Мързелива инициализация е функция за програмиране, която всеки съвременен език за програмиране трябва да притежава. Въпреки това начинът, по който се прилагат, се различава от един до друг. Нека ги сравним между Kotlin и Swift.
Декларация
Котлин
Мързеливата инициализация се извършва чрез функцията делегат by
. А lazy
всъщност е функция, която приема ламбда.
val lazyString by lazy { "Lazy string" }
Така че ламбда винаги е необходима в Kotlin lazy
.
Суифт
Мързеливата инициализация се извършва с ключовата дума lazy
на променливата. Така че можем лесно да го добавим към декларацията на променливата, за да я направим мързелива. Не е необходимо затваряне.
Забележка: Затваряне в Swift подобно на Lambda в Kotlin
lazy var lazyString = “Lazy String”
Ако имаме нужда от затваряне, бихме могли да го направим.
lazy var lazyString = {“Lazy String”}()
Изменчивост
Котлин
Kotlin позволява само неизменна променлива val
да бъде мързелива. Това е възможно, тъй като стойността се задава чрез делегата и lazyString
е просто свойство, което е зададено да се извлича чрез функцията за делегат by
.
val lazyString by lazy { "Lazy string" }
Това е идеално, тъй като за променливата lazy
, ние обичаме да се инициализира веднъж и да не се променя по-късно.
Суифт
Swift не може да има let
за мързелива променлива, тъй като let
се нуждае от стойност, която да бъде зададена по време на инициализацията. Следователно трябва да е променлив var
.
lazy var lazyString = “Lazy String”
Ползата от това е, че променливата може да се промени след това, въпреки че мисля, че това само по себе си е ограничение.
Обхват
Котлин
Мързеливо инициализираната променлива може да бъде декларирана в клас или функция. Навсякъде.
Суифт
Мързеливо инициализираната променлива може да бъде декларирана само в клас или структура. Ограничен.
Безопасност на резбата.
Котлин
По подразбиране променливата за лениво инициализиране на Kotlin е безопасна за нишки. Има известно незначително въздействие върху производителността при използването му.
Ако може да се гарантира, че е в същата нишка, функцията за безопасна нишка може да бъде изключена с помощта на LazyThreadSafetyMode.NONE
val lazyString by lazy(LazyThreadSafetyMode.NONE)
Можете да проверите в този блог за повече подробности.
Суифт
Променливата за лениво инициализиране не е безопасна за нишки.
TL;DR;
Всички причини за горните разлики се дължат на различен подход на изпълнение.
В Kotlin няма специална функция за език lazy
, но вместо това се изпълнява от функцията lazy
чрез функцията за делегат на език by
.
В Swift това е езикова функция, където lazy
е ключова дума. Следователно изпълнението е вградено в езика.
Надявам се тази публикация да ви е полезна. Можете да разгледате другите ми интересни теми тук.
Следвайте ме в среден, Twitter,Facebook или Reddit за малки съвети и обучение по теми, свързани с Android, Kotlin и др. ~Ели~