Sobes.tech
Junior

Ποιες λειτουργίες πεδίου γνωρίζετε στο Kotlin;

sobes.tech AI

Απάντηση από AI

  • let: Εκτελεί ένα μπλοκ κώδικα σε ένα αντικείμενο και επιστρέφει το αποτέλεσμα της τελευταίας έκφρασης. Χρησιμοποιείται συχνά για ασφαλείς κλήσεις μεθόδων σε nullable αντικείμενα.
  • run: Έχει δύο παραλλαγές:
    • Ως επέκταση λειτουργίας: Εκτελεί ένα μπλοκ κώδικα στο αντικείμενο (this) και επιστρέφει το αποτέλεσμα της τελευταίας έκφρασης.
    • Ως ανεξάρτητη λειτουργία: Εκτελεί ένα μπλοκ κώδικα χωρίς δέκτη και επιστρέφει το αποτέλεσμα της τελευταίας έκφρασης.
  • with: Εκτελεί ένα μπλοκ κώδικα σε ένα αντικείμενο-δέκτη που παρέχεται ως όρισμα και επιστρέφει το αποτέλεσμα της τελευταίας έκφρασης.
  • apply: Εκτελεί ένα μπλοκ κώδικα σε ένα αντικείμενο (this) και επιστρέφει το ίδιο το αντικείμενο. Χρησιμοποιείται συχνά για τη διαμόρφωση ιδιοτήτων του αντικειμένου.
  • also: Εκτελεί ένα μπλοκ κώδικα σε ένα αντικείμενο (it) και επιστρέφει το ίδιο το αντικείμενο. Χρησιμοποιείται για παρενέργειες στο αντικείμενο.
// Παράδειγμα χρήσης του let
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // Επιστρέφει το μήκος της συμβολοσειράς
} // length == 6

// Παράδειγμα χρήσης του run ως επέκταση
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// Παράδειγμα χρήσης του run ως ανεξάρτητης λειτουργίας
val result = run {
    // Χωρίς δέκτη
    println("Εκτέλεση μπλοκ")
    1 + 2 // Επιστρέφει 3
} // result == 3

// Παράδειγμα χρήσης του with
val configuration = configureUsing {
    // this - το αντικείμενο που περνάει στο configureUsing
    width = 100
    height = 200
}

fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
    val example = ScopeExample()
    example.builder()
    return example
}

class ScopeExample {
    var width: Int = 0
    var height: Int = 0
}

// Παράδειγμα χρήσης του apply
val person = mutableListOf<String>().apply {
    // this == λίστα
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// Παράδειγμα χρήσης του also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == λίστα
    println("Επεξεργασία λίστας: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]