Несомненно вам известно о пользе изменяемых переменных:
i = 0
while(i < /*some size*/){
//do something...
i += 1}
и об их опасности:
i = 0
while(i < /*some size*/){
//high code...
//copypaste
i = 0
while(i < /*some size*/){
//do something...
i += 1}
//high code...
i += 1}
Чтобы сделать программирование безопаснее, авторы некоторых языков разделяют переменные на изменяемы и не изменяемые (постоянные переменные
):
var i = 0
val j = 0
i = 1
j = 1 //<<error
Однако, ИМХО, такой подход не очень эффективен, так как, хоть изменяемых переменных и становится меньше они всё равно остаются.
Но, что если сделать все переменные "почти" неизменяемыми и добавить оператор для их изменения? Т.е. переменные могут быть изменены только одним специальным оператором:
i = 0 //definition variable
i := 1 //change variable
i = 0 //<<error: "i" already defined
j := 1 //<<error: "j" not defined
Пример:
i = 0
while(i < /*some size*/){
//high code...
//copypaste
i = 0 //<<error
while(i < /*some size*/){
//do something...
i +:= 1}
//high code...
i +:= 1}
Что думаете? Хотели ли бы вы такую фичу в вашем ЯП?
Спасибо.
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)