İşlevler
İşlev, bir dizi bağımsız değişken değerinden tek bir değere eşlemeyi temsil eden bir değerdir. Bir işlev, bir dizi giriş değeri (bağımsız değişken değerleri) tarafından çağrılır ve tek bir çıkış değeri (dönüş değeri) üretir.
İşlevler bir işlev ifadesi kullanılarak yazılır:
işlev-ifadesi:
(
parameter-listopt)
function-return-typeopt=>
function-body
işlev gövdesi:
ifade
parameter-list:
fixed-parameter-list
fixed-parameter-list ,
optional-parameter-list
optional-parameter-list
fixed-parameter-list:
parametre
parameter ,
fixed-parameter-list
parametre:
parametre-adı parametre-türüopt
parametre-adı:
identifier
parametre türü:
assertion
function-return-type:
assertion
Iddia:
as
nullable-primiitve-type
optional-parameter-list:
optional-parameter
optional-parameter ,
optional-parameter-list
optional-parameter:
optional
parametre
nullable-primitve-type
nullable
ilkel türü seç
Aşağıda, ve tam olarak iki değer gerektiren ve y
işleci bu değerlere x
uygulamanın +
sonucunu üreten bir işlev örneği verilmiştir. x
vey
, işlevin parametre listesinin parçası olan parametrelerdir ve x + y
işlevin gövdesidir:
(x, y) => x + y
İşlev-ifadeyi değerlendirmenin sonucu bir işlev değeri üretmektir (işlev gövdesini değerlendirmek için değil). Bu belgede bir kural olarak, işlev değerleri (işlev ifadelerinin aksine) parametre listesiyle ancak işlev gövdesi yerine üç nokta (...
) ile gösterilir. Örneğin, yukarıdaki işlev ifadesi değerlendirildikten sonra aşağıdaki işlev değeri olarak gösterilir:
(x, y) => ...
İşlev değerleri için aşağıdaki işleçler tanımlanır:
Operatör | Sonuç |
---|---|
x = y |
Equal |
x <> y |
Not equal |
İşlev değerlerinin yerel türü, parametre adlarını listeleyen ve tüm parametre türlerini ve dönüş any
türünü belirten özel bir işlev türüdür (iç türünden function
türetilir). (Şuraya gidin: İşlev türleriyle ilgili ayrıntılar için işlev türleri.)
bir işlevin işlev gövdesi, bir invoke-ifadesi kullanılarak işlev değeri çağrılarak yürütülür. İşlev değerini çağırmak, işlev değerinin işlev gövdesinin değerlendirilip bir değer döndürülür veya bir hata oluşur.
invoke-expression:
birincil-ifade(
bağımsız değişken-listesitercihi )
argument-list:
ifade-listesi
bir işlev değeri her çağrıldığında, işlev bağımsız değişkenleri olarak adlandırılan bir değer kümesi bağımsız değişken listesi olarak belirtilir.
Bağımsız değişken listesi , sabit sayıda bağımsız değişkeni doğrudan ifade listesi olarak belirtmek için kullanılır. Aşağıdaki örnek, bir alanda işlev değeri olan bir kaydı tanımlar ve ardından kaydın başka bir alanından işlevi çağırır:
[
MyFunction = (x, y, z) => x + y + z,
Result1 = MyFunction(1, 2, 3) // 6
]
Bir işlev çağrılırken aşağıdakiler geçerli olur:
İşlevin işlev gövdesini değerlendirmek için kullanılan ortam, parametreyle aynı ada sahip her parametreye karşılık gelen bir değişken içerir. Her parametrenin değeri, Parametreler'de tanımlandığı gibi invoke-ifadesi bağımsız değişken listesinden oluşan bir değere karşılık gelir.
İşlev bağımsız değişkenlerine karşılık gelen tüm ifadeler, işlev gövdesi değerlendirilmeden önce değerlendirilir.
İfade listesindeki veya işlev gövdesindeki ifadeler değerlendirilirken oluşan hatalar yayılır.
bağımsız değişken listesinden yapılan bağımsız değişkenlerin sayısı işlevin parametreleriyle uyumlu olmalıdır veya neden kodu
"Expression.Error"
ile bir hata oluşur. Uyumluluğu belirleme işlemi Parametreler'de tanımlanır.
Parametre listesinde bulunabilecek iki parametre türü vardır:
Gerekli parametre, bir işlev çağrıldığında parametreye karşılık gelen bağımsız değişkenin her zaman belirtilmesi gerektiğini gösterir. Gerekli parametreler parametre listesinde ilk olarak belirtilmelidir. Aşağıdaki örnekteki işlev gerekli parametreleri ve
y
tanımlarx
:[ MyFunction = (x, y) => x + y, Result1 = MyFunction(1, 1), // 2 Result2 = MyFunction(2, 2) // 4 ]
İsteğe bağlı parametre, bir işlev çağrıldığında parametreye karşılık gelen bir bağımsız değişkenin belirtilebileceğini ancak belirtilmesi gerekmediğini gösterir. İşlev çağrıldığında isteğe bağlı bir parametreye karşılık gelen bir bağımsız değişken belirtilmezse, bunun yerine değer
null
kullanılır. İsteğe bağlı parametreler, parametre listesindeki gerekli parametrelerden sonra görünmelidir. Aşağıdaki örnekteki işlev, sabit bir parametreyix
ve isteğe bağlı bir parametreyiy
tanımlar:[ MyFunction = (x, optional y) => if (y = null) x else x + y, Result1 = MyFunction(1), // 1 Result2 = MyFunction(1, null), // 1 Result3 = MyFunction(2, 2), // 4 ]
bir işlev çağrıldığında belirtilen bağımsız değişkenlerin sayısı parametre listesiyle uyumlu olmalıdır. bir işlev F
için bağımsız değişken A
kümesinin uyumluluğu aşağıdaki gibi hesaplanır:
N değerinin bağımsız değişken listesinden yapılandırılan bağımsız değişkenlerin
A
sayısını temsil etmesine izin verin. Örneğin:MyFunction() // N = 0 MyFunction(1) // N = 1 MyFunction(null) // N = 1 MyFunction(null, 2) // N = 2 MyFunction(1, 2, 3) // N = 3 MyFunction(1, 2, null) // N = 3 MyFunction(1, 2, {3, 4}) // N = 3
Gerekli değerinin sabit parametre
F
sayısını ve İsteğe bağlı parametresinin sayısını temsil etmesineF
izin verin. Örneğin:() // Required = 0, Optional = 0 (x) // Required = 1, Optional = 0 (optional x) // Required = 0, Optional = 1 (x, optional y) // Required = 1, Optional = 1
Aşağıdakiler
A
doğruysa bağımsız değişkenler işlevleF
uyumludur:- (N >= Sabit) ve (N <= (Sabit + İsteğe Bağlı))
- Bağımsız değişken türleri, 'nin karşılık gelen parametre türleriyle
F
uyumludur
İşlevin bildirilen bir dönüş türü varsa, aşağıdakiler doğruysa işlevin
F
gövdesinin sonuç değeri 'nin dönüş türüyleF
uyumludur:- İşlev parametreleri için sağlanan bağımsız değişkenlerle işlev gövdesini değerlendirerek elde edilen değerin dönüş türüyle uyumlu bir türü vardır.
İşlev gövdesi işlevin dönüş türüyle uyumsuz bir değer verirse, neden koduyla
"Expression.Error"
ilgili bir hata oluşur.
Özyinelemeli bir işlev değeri yazmak için kapsam dahilinde işleve başvurmak için kapsam işlecinin (@
) kullanılması gerekir. Örneğin, aşağıdaki kayıt işlevi tanımlayan Factorial
bir alan ve onu çağıran başka bir alan içerir:
[
Factorial = (x) =>
if x = 0 then 1 else x * @Factorial(x - 1),
Result = Factorial(3) // 6
]
Benzer şekilde, erişilmesi gereken her işlevin bir adı olduğu sürece karşılıklı özyinelemeli işlevler yazılabilir. Aşağıdaki örnekte, işlevin Factorial
bir bölümü ikinci Factorial2
bir işlev olarak yeniden düzenlenmiş.
[
Factorial = (x) => if x = 0 then 1 else Factorial2(x),
Factorial2 = (x) => x * Factorial(x - 1),
Result = Factorial(3) // 6
]
İşlev başka bir işlevi değer olarak döndürebilir. Bu işlev, özgün işlevin bir veya daha fazla parametresine bağlı olabilir. Aşağıdaki örnekte, alanla ilişkilendirilmiş işlev, belirtilen MyFunction
parametreyi döndüren bir işlev döndürür:
[
MyFunction = (x) => () => x,
MyFunction1 = MyFunction(1),
MyFunction2 = MyFunction(2),
Result = MyFunction1() + MyFunction2() // 3
]
İşlev her çağrıldığında, parametrenin değerini koruyan yeni bir işlev değeri döndürülür, böylece çağrıldığında parametre değeri döndürülür.
Parametrelere ek olarak, işlev-ifadesinin işlev gövdesi, işlev başlatıldığında ortamda bulunan değişkenlere başvurabilir. Örneğin, alan MyFunction
tarafından tanımlanan işlev kapsayan kaydın A
alanına C
erişir:
[
A =
[
MyFunction = () => C,
C = 1
],
B = A[MyFunction]() // 1
]
MyFunction
çağrıldığında, değişkeni içermeyen C
bir ortamdan (B
) çağrılsa bile değişkeninin C
değerine erişir.
Her ifade, (alt çizgi) adlı _
tek bir parametre alan, türlenmemiş işlevleri bildirmek için söz dizimsel bir kısaltmadır.
her ifade:
each
each-expression-body
each-expression-body:
işlev gövdesi
Basitleştirilmiş bildirimler genellikle daha yüksek sıralı işlev çağrılarının okunabilirliğini geliştirmek için kullanılır.
Örneğin, aşağıdaki bildirim çiftleri eşanlamlı olarak eşdeğerdir:
each _ + 1
(_) => _ + 1
each [A]
(_) => _[A]
Table.SelectRows( aTable, each [Weight] > 12 )
Table.SelectRows( aTable, (_) => _[Weight] > 12 )