kalit so'z it: bitta parametrning yashirin nomi
Sintaksisning yana bir foydali xususiyati, agar u yagona bo'lsa ( -> bilan birga) funktsiya parametrini e'lon qilishni o'tkazib yuborish qobiliyatidir. Bu so'z bunday funktsiyaning nomi sifatida qabul qilinadi:
Ints.map (bu * 2)
Ushbu konventsiya LINQ uslubida kod yozish imkonini beradi:
Strings.filter ( it.lenght == 5 ).sortBy ( it ).map ( it.toUpperCase() )
Inline funktsiyalari
Ba'zan inline funktsiyalari yordamida yuqori darajadagi funktsiyalarning ishlashini yaxshilash kerak bo'ladi.
Lambda ifodalari va anonim funksiyalar
Lambda iboralari yoki anonim funktsiyalar "funktsiya konstantalari" (asl "funktsional literal"), ya'ni e'lon qilinmagan, lekin darhol ifoda sifatida uzatilgan funksiyalar. Quyidagi misolni ko'rib chiqing:
Maks(satrlar, ( a, b -> a. uzunlik< b.length })
Max funksiyasi yuqori darajadagi funksiyadir, chunki u kirish argumenti sifatida boshqa funktsiyani oladi. Bu ikkinchi argument o'zi funksiya bo'lgan ifodadir, ya'ni funktsional harf.
Qiziqarli taqqoslash(a: String, b: String): Boolean = a.length< b.length
Funktsiya turlari
Funksiya boshqa funktsiyani kirish parametri sifatida qabul qilishi uchun uning (kirish funksiyasi) turini belgilashimiz kerak. Masalan, yuqoridagi maksimal funksiya quyidagicha aniqlanadi:
Qiziqarli max(to'plam: To'plam , kamroq: (T, T) -> Mantiqiy): T? ( var max: T? = null for (it in collection) if (max == null || less(max, it)) max = it return max )
"Kamroq" parametr (T, T) -> Mantiqiy tip, ya'ni T tipidagi ikkita parametrni qabul qiluvchi va birinchi parametr ikkinchidan kichik bo'lsa "Mantiqiy":"to'g'ri" qaytaradigan funksiya.
Funksiya tanasida 4-satr, kamroq funksiya sifatida ishlatiladi: u T tipidagi ikkita argumentni uzatish orqali chaqiriladi.
Funktsiya turi yuqoridagi kabi yozilishi mumkin yoki har bir parametrning qiymatlarini belgilashni istasangiz, u o'ziga xos parametrlarga ega bo'lishi mumkin.
Val solishtiring: (x: T, y: T) -> Int = ...
Do'stlaringiz bilan baham: |