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 научных работ написано.