elizarov
10/06/2017, 6:17 PMMutableList -> List это весьма механическая опреация (надо просто вырезать мутирующие методы), поэтому можно переименовать MutableList в mutable List, где приставка mutable как раз и делает это вырезание. Ну и чтобы можно это было к любым классам интерфейсам применять до кучи. Ну это идея в целом. Там много всяких подводных граблей вылезает, которые надо аккуратно обойтиilya.gorbunov
10/06/2017, 6:40 PMelizarov
10/06/2017, 6:50 PMimmutable class Data(mut x: Int, mut y: Int) то за сценой компилятор может сделать x & y mutable (не final), но добавить final Boolean readonly поле, а на всех setter-а сгенерировать проверки на readonly. Тогда один и тот же класс-файл сможет работь и как 100% immutable object c гарантированной runtime проверкой что его нельзя поменять, так и свой же собственный билдер, чтобы удобно было менять поле-за-полем. Остается какая-то мелочь — аккуратно всё это встроить в систему типу и в синтаксис 🧌ilya.gorbunov
10/06/2017, 6:51 PMelizarov
10/06/2017, 6:54 PMelizarov
10/06/2017, 6:57 PMimmutable class. Как их назвать? Вот я в примере вышел сказал mut. Потому что это и не совсем val и не совсем var а черт-знает что. На самом деле, это, конечно mut var, а если еще точнее, то это свойство у которого есть обычный getter и mut fun setter…. Ну а дальше в эти дебри если лезть то становится еще веселей. Там и “abstraction over mutablity” вылаезат и весь вагон других проблем, на который 100500 научных работ написано.