Sobes.tech
Middle

რა განსხვავებაა Kotlin-ში let, run, also და apply გაფართოების ფუნქციებს შორის?

sobes.tech AI

პასუხი AI-სგან

let: ობიექტზე დახურვის გამოძახება და დახურვის შედეგის დაბრუნება. საშუალებას აძლევს ობიექტი გამოიყენოს როგორც ლამბდა-გამოხატვის არგუმენტი (it). შესაფერისია nullable ობიექტებთან მუშაობისთვის.

// გამოყენების მაგალითი let-ის
val nullableString: String? = "Hello"
val length = nullableString?.let {
    // it - ეს არის არა-null String
    it.length
}

run: კოდის ბლოკის შესრულება ობიექტზე და ბლოკის შედეგის დაბრუნება. ბლოკის შიგნით ობიექტი ხელმისაწვდომია როგორც this. სასარგებლოა ობიექტის ინიციალიზაციისა და მეთოდების გამოძახებისთვის.

// გამოყენების მაგალითი run-ის
val result = buildString {
    // this - ეს არის StringBuilder
    append("Start\n")
    append("Middle\n")
}.run {
    // this - ეს არის String
    uppercase()
}

also: ობიექტზე დახურვის გამოძახება და თავად ობიექტის დაბრუნება. საშუალებას აძლევს დამატებითი მოქმედებების (მაგალითად, ლოგირება ან კონფიგურაცია) განხორციელებას ობიექტზე, მისი შეცვლის გარეშე.

// გამოყენების მაგალითი also-ის
val list = mutableListOf("a", "b", "c").also {
    // it - ეს არის MutableList
    println("შექმნილი სია: $it")
}

apply: ობიექტზე დახურვის გამოძახება და თავად ობიექტის დაბრუნება. ბლოკის შიგნით ობიექტი ხელმისაწვდომია როგორც this. სასარგებლოა ობიექტის თვისებების კონფიგურაციისთვის.

// გამოყენების მაგალითი apply-ის
val textView = TextView(context).apply {
    // this - ეს არის TextView
    text = "გამარჯობა, მსოფლიო!"
    textSize = 16f
    setTextColor(Color.BLACK)
}

ძირითადი განსხვავებები:

ფუნქცია როგორ არის ხელმისაწვდომი ობიექტი რა აბრუნებს ტიპიური გამოყენება
let it ლამბდა-ფუნქციის შედეგი Nullable ობიექტები, ტრანსფორმაცია
run this ლამბდა-ფუნქციის შედეგი ობიექტის ინიციალიზაცია და მეთოდების გამოძახება
also it თავად ობიექტი დამატებითი მოქმედებები (Side effects)
apply this თავად ობიექტი თვისებების კონფიგურაცია