Мързелива инициализация е функция за програмиране, която всеки съвременен език за програмиране трябва да притежава. Въпреки това начинът, по който се прилагат, се различава от един до друг. Нека ги сравним между 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 и др. ~Ели~