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 для изменения переменных или объектов внутри функции.