Поиск по сайту:

Kotlin пусть, работает, а также применяется, с


В этом руководстве мы будем реализовывать некоторые важные функции стандартной библиотеки, доступные в Kotlin. kotlin-stdlib предоставляет нам полезные функции более высокого порядка, реализующие идиоматические шаблоны. Посмотрим, как они упростят и ускорят программирование на Kotlin. Функции, которые мы собираемся обсудить ниже:

  • пусть
  • беги
  • также
  • применить
  • с

Котлин пусть

let принимает объект, к которому он вызывается, в качестве параметра и возвращает результат лямбда-выражения. Kotlin let — это функция области видимости, в которой переменные, объявленные внутри выражения, не могут использоваться снаружи. Пример, демонстрирующий функцию kotlin let, приведен ниже.

fun main(args: Array<String>) {
    var str = "Hello World"
    str.let { println("$it!!") }
    println(str)

}
//Prints
//Hello World!!
//Hello World

Ключевое слово it содержит копию свойства внутри let. Последнее значение из let возвращается в качестве аргумента, как показано ниже.

var strLength = str.let { "$it function".length }
println("strLength is $strLength") //prints strLength is 25

Цепочка функций let

var a = 1
var b= 2

a = a.let { it + 2 }.let { val i = it + b
        i}
println(a) //5

Вложенность пусть

Мы можем установить выражение let внутри другого выражения let, как показано ниже.

var x = "Anupam"
x.let { outer -> outer.let { inner -> print("Inner is $inner and outer is $outer") } }

//Prints
//Inner is Anupam and outer is Anupam

Для вложенного let мы не можем использовать ключевое слово it. Нам нужно присвоить явные имена it в обеих функциях let. Только самый внешний let возвращает значение, как показано ниже.

var x = "Anupam"
    x = x.let { outer ->
        outer.let { inner ->
            println("Inner is $inner and outer is $outer")
            "Kotlin Tutorials Inner let"
        }
        "Kotlin Tutorials Outer let" 
    }
    println(x) //prints Kotlin Tutorials Outer let

пусть для нулевых проверок

Кроме того, let полезен для проверки свойств Nullable, как показано ниже.

var name : String? = "Kotlin let null check"
name?.let { println(it) } //prints Kotlin let null check
name = null
name?.let { println(it) } //nothing happens

Код внутри выражения let выполняется, только если свойство не равно null. Таким образом, пусть спасает нас и от проверки нулей if else!

Котлин бег

Kotlin run — еще одна интересная функция. Следующий пример демонстрирует варианты его использования.

var tutorial = "This is Kotlin Tutorial"
    println(tutorial) //This is Kotlin Tutorial
    tutorial = run {
        val tutorial = "This is run function"
        tutorial
    }
    println(tutorial) //This is run function

  • Подобно функции let, функция run также возвращает последний оператор.
  • В отличие от let, функция run не поддерживает ключевое слово it.

пускай и беги

Давайте объединим функции let и run вместе.

var p : String? = null
    p?.let { println("p is $p") } ?: run { println("p was null. Setting default value to: ")
        p = "Kotlin"}

    println(p)
//Prints
//p was null. Setting default value to: 
//Kotlin

Котлин также

Как следует из названия, выражения также выполняют некоторую дополнительную обработку объекта, который был вызван. В отличие от let, он возвращает исходный объект вместо каких-либо новых возвращаемых данных. Следовательно, возвращаемые данные всегда имеют один и тот же тип. Как и let, также тоже использует it.

var m = 1
m = m.also { it + 1 }.also { it + 1 }
println(m) //prints 1 

Котлин пусть против также

Следующий фрагмент кода показывает отличный пример различия между let и также.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

var l = person.let { it.tutorial = "Android" }
var al = person.also { it.tutorial = "Android" }
    
println(l)
println(al)
println(person)

Котлин применить

Kotlin apply — это функция расширения типа. Он работает со ссылкой на объект (также известной как приемник) в выражении и возвращает ссылку на объект по завершении.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

person.apply { this.tutorial = "Swift" }
println(person)

применять против также

data class Person(var n: String, var t : String)
var person = Person("Anupam", "Kotlin")

person.apply { t = "Swift" }
println(person)

person.also { it.t = "Kotlin" }
println(person)

Котлин с

Как и apply, with используется для изменения свойств экземпляра без необходимости каждый раз вызывать оператор точки над ссылкой.

data class Person(var name: String, var tutorial : String)
var person = Person("Anupam", "Kotlin")

with(person)
    {
        name = "No Name"
        tutorial = "Kotlin tutorials"
    }

Котлин применить против с

  • with запускается без объекта (получателя), тогда как для применения он нужен.
  • apply работает со ссылкой на объект, тогда как with просто передает ее в качестве аргумента.
  • Последнее выражение функции with возвращает результат.

var xyz = with(person)
    {
        name = "No Name"
        tutorial = "Kotlin tutorials"
        val xyz = "End of tutorial"
        xyz
    }
    println(xyz) //End of tutorial

Это все, что касается стандартных функций Kotlin для изменения переменных или объектов внутри функции.