lambda و Extension function first

پرسیده شده
فعالیت 1217 روز پیش
دیده شده 702 بار
1

دقیقه 9 شما می گید که خروجی lambda از نوع بولین هست اما خروجی فانکشن از نوع int هست به عنوان مثال : 

    val members = arrayOf(1,5,6,87,8)
    val result = members.first {
        it > 5
    }

    if(result){

    }

اگر بولین بود باید به شکل می شد خروجی گرفت ولی اینجوری نمیشه ریسالت رو به صورت یک بولین چک کرد پس خروجی بولین به نظر نمیاد و ظاهرا اینت هست 

جریانش چیه ؟

 

فایل پیوست

MohammadMoghadasi
MohammadMoghadasi

15 دی 99

4
حذف شده

سلام و احترام

 

first یک Extension functions مربوط به کلاس Array هست که اولین valueیی رو دید که با شرط قرار داده شده در بدنه  first مثال شما یعنی it>۵ برقرار هست مقداری را برمیگرداند و در داخل result میریزد پس چیزی که در result ریخته میشود اولین valueیی از Array شماست که شرط روی آن صادق بوده است.

اگر بخوام واضح تر توضیح بدم باید سری به سورس کد این فانکشن بزنیم :

public inline fun <T> Array<out T>.first(predicate: (T) -> Boolean): T {
    for (element in this) if (predicate(element)) return element
    throw NoSuchElementException("Array contains no element matching the predicate.")
}

با توجه به فانکشن بالا متوجه میشویم که predicate: (T) -> Boolean که به عنوان پارامتر این Extension function هست بدین معنیست که در بدنه first باید شرط قرار بگیرد که خروجی آن از نوع Boolean باید قرار دهیم ولی خروجی که first برمیگرداند طبق سورس کد for (element in this) if (predicate(element)) return element یک value از هر نوعی میتواند باشد .

امیدوارم به خوبی این قضیه رو توضیح داده باشم 

درمورد Extension functions در همین دوره تدریس شده است .

 

 

 

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

15 دی 99

جلسه Lambda Expressions And Anonymous Functions