Как я писал ранее, сейчас я изучаю Kotlin, и для меня было много интересных открытий с этим языком.
Например, когда работаешь с тестами, нужно инициализировать большие наборы данных, к примеру, тестовых пользователей, сложные конфигурации страниц, загружаемые данные из базы и многое другое. Это может замедлить выполнение тестов.
📝Решение в Kotlin: by lazy
Этот подход позволяет откладывать создание объектов и данных до тех пор, пока они действительно не понадобятся.
Пример:
open class BaseTest {
// Ленивое создание страницы логина
protected val loginPage: LoginPage by lazy {
println("Инициализация страницы логина")
LoginPage(browser)
}
// Ленивое создание данных тестового пользователя
protected val testUser: User by lazy {
// Большой объект пользователя
User()
}
// Ленивое создание страницы дэшборда
protected val dashboardPage: DashboardPage by lazy {
DashboardPage(page)
}
}❓Сравнение с TypeScript
TypeScript не имеет встроенного механизма для ленивой инициализации, но её можно реализовать вручную. Один из способов — использование геттеров (get).
Пример на TypeScript:
class LazyExample {
private _lazyValue?: string;
get lazyValue(): string {
if (!this._lazyValue) {
console.log("Инициализация свойства");
this._lazyValue = "Hello, TypeScript!";
}
return this._lazyValue;
}
}
const example = new LazyExample();
console.log("До первого доступа");
console.log(example.lazyValue); // Выполнится инициализация
console.log(example.lazyValue); // Значение берётся из кеша😉Итог
✔️Если вы используете Kotlin, by lazy — это мощный инструмент, который делает код лаконичным и удобным для тестирования.
✔️В TypeScript вам нужно вручную управлять ленивой инициализацией через геттеры или функции. Это требует больше усилий, но предоставляет больше гибкости.
P.S. Если вы думаете, что я буду говорить только о преимуществах Kotlin, то нет. Меня уже знатно пригорело от него, особенно от пакетных менеджеров Kotlin/Java😅
Полезно? Ставьте 👍 👎