Что такое Mutable-аннотация

Ответ

@Mutable — это аннотация в Kotlin, которая указывает, что класс или интерфейс может изменяться после создания. Она помогает разработчикам явно обозначать изменяемые структуры данных, улучшая читаемость и предсказуемость кода.

Пример:

@Mutable
data class User(
    var name: String,
    var age: Int
)

Здесь User — изменяемый класс (поля var). Аннотация сигнализирует, что его состояние может меняться.

Нюансы:

  • Не встроена в Kotlin по умолчанию — часто используется кастомная аннотация или из библиотек (например, @Mutable из AndroidX).
  • Альтернатива — @Immutable для неизменяемых объектов.
  • Полезно в многопоточности, чтобы явно разделять изменяемые/неизменяемые данные.

Ответ 18+ 🔞

Слушай, вот есть в Котлине такая штука — @Mutable. Представь себе, ты пишешь код, а потом через полгода возвращаешься и нихуя не понимаешь, можно ли этот твой класс менять или нет. Так вот, эта аннотация — как кричащая красная табличка «ОСТОРОЖНО, ЗДЕСЬ МОЖЕТ ПОМЕНЯТЬСЯ!». Она явно говорит всем, кто читает твой код: «Чувак, этот класс — изменяемый, не удивляйся, если его состояние поплывёт».

Вот смотри, простой пример:

@Mutable
data class User(
    var name: String,
    var age: Int
)

Видишь? Класс User. Поля объявлены через var — значит, их можно перезаписывать. А сверху болтается @Mutable, чтобы ты, ёпта, с первого взгляда увидел: «Ага, тут данные могут мутировать, надо быть осторожнее, особенно если этот объект начнёт гулять между потоками».

Но есть нюансы, блядь:

  • Эта аннотация не встроена в сам Котлин из коробки. То есть стандартной такой нет. Её либо сам пишешь (кастомную), либо тащишь из какой-нибудь библиотеки — например, из AndroidX. Так что не ищи её в стандартной поставке, зря голову ломать будешь.
  • У неё есть логичная противоположность — @Immutable. Это как инь и янь: один маркирует то, что можно менять, другой — то, что должно оставаться в покое, как скала.
  • Главная польза вылезает, когда начинается многопоточность. Представь: один поток меняет объект, а другой в это же время пытается его прочитать. Если объект помечен как @Mutable, ты сразу понимаешь, что тут нужна синхронизация, блокировки или другие танцы с бубном, чтобы не получить неожиданный пиздец в рантайме. Это разделение на изменяемое и неизменяемое — основа для написания более предсказуемого и безопасного кода.

Короче, @Mutable — это не магия, а просто явный способ коммуникации между тобой-сегодняшним и тобой-через-полгода (или другим разработчиком). Чёткий сигнал: «Здесь ходить можно, но лёд тонкий, сука».