KOTLIN_LIB Telegram 601
🔥 “val” — не панацея: когда immutable переменные создают проблемы

Kotlin приучает нас к val: "если переменная не меняется — сделай её immutable". Это правильно, но есть нюанс: val не гарантирует неизменяемость объекта, а только то, что ссылка не переназначится.

На практике это может привести к багам, особенно при работе с MutableList, var - свойствами в data-классах, или в многопоточном коде.


💥 Пример проблемы:


val items = mutableListOf("A", "B")
items.add("C") // OK, но items всё ещё val


Вроде бы val, значит безопасно? Нет — items мутируются. Это особенно критично, если вы:

- передаёте val в другие слои архитектуры;
- работаете с кэшем или shared state;
- делаете val глобальными или синглтонами.


🧠 Хуже в многопоточке:


class Cache {
val data = mutableMapOf<String, Any>()
}


Если доступ к data не синхронизирован — ловите гонки. А val создаёт ложное ощущение защищённости.


Как писать безопаснее:

- Используйте List, Map (immutable интерфейсы), а не MutableList, MutableMap, если нет необходимости в мутации.


val items: List<String> = listOf("A", "B")


- Если нужно менять данные — лучше явно использовать var, чтобы было видно, что объект изменчив.


var state = State()


- Для shared state — применяйте StateFlow, Mutex, atomic -типы и пр. инструменты контроля доступа.


🧵 Ещё пример — data class:


data class User(var name: String)

val user = User("Alice")
user.name = "Bob" // mutable, хотя user — val


Снаружи кажется, что user не меняется. Но его внутренности - легко. В больших командах это ведёт к багам.

⚠️ Вывод

val — это про неизменность ссылки, не объекта. Не полагайтесь на val как на гарантию иммутабельности. Будьте явными в намерениях: или делайте объект действительно immutable, или давайте понять, что он может меняться.

✍️ @kotlin_lib
👍61👎1



tgoop.com/kotlin_lib/601
Create:
Last Update:

🔥 “val” — не панацея: когда immutable переменные создают проблемы

Kotlin приучает нас к val: "если переменная не меняется — сделай её immutable". Это правильно, но есть нюанс: val не гарантирует неизменяемость объекта, а только то, что ссылка не переназначится.

На практике это может привести к багам, особенно при работе с MutableList, var - свойствами в data-классах, или в многопоточном коде.


💥 Пример проблемы:


val items = mutableListOf("A", "B")
items.add("C") // OK, но items всё ещё val


Вроде бы val, значит безопасно? Нет — items мутируются. Это особенно критично, если вы:

- передаёте val в другие слои архитектуры;
- работаете с кэшем или shared state;
- делаете val глобальными или синглтонами.


🧠 Хуже в многопоточке:


class Cache {
val data = mutableMapOf<String, Any>()
}


Если доступ к data не синхронизирован — ловите гонки. А val создаёт ложное ощущение защищённости.


Как писать безопаснее:

- Используйте List, Map (immutable интерфейсы), а не MutableList, MutableMap, если нет необходимости в мутации.


val items: List<String> = listOf("A", "B")


- Если нужно менять данные — лучше явно использовать var, чтобы было видно, что объект изменчив.


var state = State()


- Для shared state — применяйте StateFlow, Mutex, atomic -типы и пр. инструменты контроля доступа.


🧵 Ещё пример — data class:


data class User(var name: String)

val user = User("Alice")
user.name = "Bob" // mutable, хотя user — val


Снаружи кажется, что user не меняется. Но его внутренности - легко. В больших командах это ведёт к багам.

⚠️ Вывод

val — это про неизменность ссылки, не объекта. Не полагайтесь на val как на гарантию иммутабельности. Будьте явными в намерениях: или делайте объект действительно immutable, или давайте понять, что он может меняться.

✍️ @kotlin_lib

BY Kotlin


Share with your friend now:
tgoop.com/kotlin_lib/601

View MORE
Open in Telegram


Telegram News

Date: |

On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. The court said the defendant had also incited people to commit public nuisance, with messages calling on them to take part in rallies and demonstrations including at Hong Kong International Airport, to block roads and to paralyse the public transportation system. Various forms of protest promoted on the messaging platform included general strikes, lunchtime protests and silent sit-ins. Telegram Channels requirements & features Invite up to 200 users from your contacts to join your channel Click “Save” ;
from us


Telegram Kotlin
FROM American