İş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.

İşlev yazma

İş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:

      asnullable-primiitve-type
optional-parameter-list:
      optional-parameter
      optional-parameter
,optional-parameter-list
optional-parameter:

      optionalParametre
nullable-primitve-type
      nullable
ilkel türü seç

Aşağıda, ve tam olarak iki değer gerektiren ve yiş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:

İşleç 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üş anytürünü belirten özel bir işlev türüdür (iç türünden functiontüretilir). (Şuraya gidin: İşlev türleriyle ilgili ayrıntılar için işlev türleri.)

İşlevleri çağırma

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 listesindenoluş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.

Parametreler

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 ytanı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 parametreyi x ve isteğe bağlı bir parametreyi ytanı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. Örnek:

      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 etmesine Fizin verin. Örnek:

    ()               // 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şlevle F 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 Fuyumludur
  • İş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üyle Fuyumludur:

    • İş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 işlevler

Ö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 
]

Kapanışları

İş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.

İşlevler ve ortamlar

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 Aalanına C erişir:

[ 
A =  
    [ 
        MyFunction = () => C, 
        C = 1 
    ], 
B = A[MyFunction]()           // 1 
]

MyFunction çağrıldığında, değişkeni içermeyen Cbir ortamdan (B) çağrılsa bile değişkeninin Cdeğerine erişir.

Basitleştirilmiş bildirimler

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:
      eacheach-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 )