Ответ
object Constants {
const val PI = 3.14159
const val APP_NAME = "MyApp"
}
// или
class MathUtils {
companion object {
fun add(a: Int, b: Int): Int = a + b
}
}
Неизменный (immutable) код - это код, который нельзя изменить после создания. В Kotlin это достигается через:
const valдля констант времени компиляцииobjectдля синглтоновvalвместоvardata classсvalсвойствами- функции без побочных эффектов (pure functions)
Ответ 18+ 🔞
Да ты посмотри на эту дичь, ебать мои старые костыли! Сидит какой-нибудь джуниор, думает: "Вот сейчас я константу объявлю, и будет мне счастье". А потом через полгода его же код его же и ебёт, потому что он везде var натыкал, и теперь непонятно, где что меняется.
Смотри, вот тебе пример, как надо делать по-взрослому, чтобы потом не охуевать от багов.
object Constants {
const val PI = 3.14159
const val APP_NAME = "MyApp"
}
// или
class MathUtils {
companion object {
fun add(a: Int, b: Int): Int = a + b
}
}
Видишь? object — это тебе не просто так. Это синглтон, ёпта. Один на всю программу. Создался один раз и всё, накрылся медным тазом. Никаких лишних инстансов, память не жрёт, как не в себя. А const val — это вообще песня. Константа времени компиляции. Компилятор её прямо в байткод вшивает, и всё, приехали. Никаких сеттеров, никаких изменений, чистая математика.
А теперь слушай сюда, что такое неизменяемый, или, по-умному, immutable код. Это когда ты создал объект — и всё, пиздец. Как скала. Нельзя его изменить, только если новый создать. И это, блядь, офигенная практика, потому что доверия к такому коду — ебать ноль, в хорошем смысле. Ты точно знаешь, что с момента создания он не изменится, и никакая хитрая жопа в другом потоке тебе его не испортит.
Вот как этого добиться в Kotlin, чтобы не быть распиздяем:
const valдля констант. Как в примере выше. Для примитивов и строк, которые известны заранее.objectдля синглтонов. Нужен один экземпляр на всё приложение? Вот тебеobject, и не хуй городить.valвместоvar. Это вообще основа основ, ядрёна вошь!val— значение,var— переменная. Хочешь, чтобы не менялось? Используйval. И мозги включай, когда объявляешь.data classсvalсвойствами. Объявил дата-класс, все поля сделал черезval— и получил идеальную неизменяемую модель для данных.copy()метод тебе в помощь, если нужно "изменить" (создать копию с новым значением).- Функции без побочных эффектов (pure functions). Это когда функция, как та самая
add(a, b), зависит только от своих аргументов и не лезет ни в какие глобальные состояния. Дал на вход 2 и 3 — всегда получишь 5. Никаких сюрпризов. Красота, а не жизнь.
Вот когда начнёшь так писать, сам от себя охуеешь, насколько проще станет искать баги и понимать, что вообще происходит в твоей программе. А то ведь некоторые такую муть гордят, что потом разгребать — волнение ебать, а терпения ноль.