Re[4]: Оператор переопределения(ещё раз о мутабельности переменных :)
От: C.A.B LinkedIn
Дата: 11.04.13 10:24
Оценка:
CAB>>Если все переменные не изменяемые, то из их определений можно выкинуть весь лишний синтаксис как то "val", "const int" etc., и писать просто "<имя> = <выражение>".
Z>Вы напишите, что решаете проблему избыточности синтаксиса. Мои претензии только к формулировкам.
Нет, я мел ввиду что такой подход позволит сделать синтаксис немножко лаконичней. А основная же задача — сократить использование мутабельных переменных.
Z>Лично я проблемы не вижу. Более того, считаю, что уметь понять изменяемая она или нет важно именно при объявлении переменной.
У меня другой стиль кодирования: я объявляю переменные как "val"(кроме явных случаев, вроде счётчиков для циклов), затем в случае необходимости исправляю на "var".
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[3]: Оператор переопределения(ещё раз о мутабельности переменных :)
От: B0FEE664  
Дата: 11.04.13 12:11
Оценка:
Здравствуйте, C.A.B, Вы писали:

Z>>Оператор = и так изменят только изменяемые переменные Зачем нам еще один?

CAB>Чтобы решить проблему изменяемых переменных, нужно сделать их все не изменяемыми.
Ничего подобного. Чтобы решить проблему изменяемых переменных — нужно отказаться от из использования. Нет переменных — нет проблем.
В конце-то концов, программа — это всего лишь суперпозиция функций из которых есть всего три системных: прочитать байт, напечатать байт и функция if(проверить условие, выполнить, выполнить).
И каждый день — без права на ошибку...
Re[5]: Оператор переопределения(ещё раз о мутабельности переменных :)
От: Ziaw Россия  
Дата: 11.04.13 14:07
Оценка: +2
Здравствуйте, C.A.B, Вы писали:

CAB>Нет, я мел ввиду что такой подход позволит сделать синтаксис немножко лаконичней. А основная же задача — сократить использование мутабельных переменных.


Ну так давайте основную задачу отделим от задачи лаконичного синтаксиса, они не пересекаются. Лично я счетчик цикла не считаю в полной мере мутабельной переменной, если конечно его не меняют руками. Остальные мутабельные переменные применяю только для оптимизаций или наполнении иммутабельного списка (точнее это более общий паттерн, названия которого я не знаю).

Z>>Лично я проблемы не вижу. Более того, считаю, что уметь понять изменяемая она или нет важно именно при объявлении переменной.

CAB>У меня другой стиль кодирования: я объявляю переменные как "val"(кроме явных случаев, вроде счётчиков для циклов), затем в случае необходимости исправляю на "var".

Так я не про написание, я про чтение. Когда переменная объявляется хочется знать, мутабельная она или нет. Там где она изменяется мы и так это знаем. Поэтому перенос признака мутабельности в место изменения скорее вреден.
Re[6]: Оператор переопределения(ещё раз о мутабельности переменных :)
От: C.A.B LinkedIn
Дата: 11.04.13 15:21
Оценка:
Z>Ну так давайте основную задачу отделим от задачи лаконичного синтаксиса, они не пересекаются.
Очень даже пересекаются, например в Scala я не использую "break", так как делать это там довольно геморройно(так сделали потому что это считает плохим стилем).
Z>Лично я счетчик цикла не считаю в полной мере мутабельной переменной, если конечно его не меняют руками. Остальные мутабельные переменные применяю только для оптимизаций или наполнении иммутабельного списка (точнее это более общий паттерн, названия которого я не знаю).
Так же могут быть удобно для вычислений:
//Это могут быть длинные выражения
  val i = 1   
  val j = 3
  var s = j + 1  
  s = j * i + s
  s = if(s == 0) 100 else s
...
  i = 1
  j = 3
  s = j + 1 
  s := (j * i + s)/2
  s := if(s == 0) 100 else s
...

и экономии идентификаторов:
  i = 0
  while(i...){
    ...}
  m = new Map(...)
  i := m.inerator()
  while(i.next()){
    ...}

и возможно в каких то других случаях.

Z>Так я не про написание, я про чтение. Когда переменная объявляется хочется знать, мутабельная она или нет. Там где она изменяется мы и так это знаем. Поэтому перенос признака мутабельности в место изменения скорее вреден.

Зачем делать работу за IDE?:
  i = 1
  j = 2
  ...
  j := 1 + j
  ...
  s = j * i
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re: Оператор переопределения(ещё раз о мутабельности переменных :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.04.13 17:28
Оценка: 6 (1)
Здравствуйте, C.A.B, Вы писали:

CAB> Что думаете? Хотели ли бы вы такую фичу в вашем ЯП?


Думаю, что ты пошел не в ту степь.

Твое предложение ничего не дает. Ну, кроме дополнительных операторов которые будут резать глаз и требовать дополнительного обучения.

Как показывает практика применения гибридных функциональных языков (где есть изменяемые переменные) в большинстве случае используется сочетание неизменяемых переменных и локальных функций. В место циклов используются функции с концевой рекурсии, а их параметры выступают в роли неизменяемых переменных-счетчиков циклов.

С тех пор как начал писать на Немерле проблем со случайным изменением изменяеммых переменных у мнея ни разу не было.

def loop1(i)
{
  if (i < /*some size*/)
  {
    //high code...
    def loop2(i)
    {
      if (i < /*some size*/)
      { 
        //do something...       
        loop2(i + 1)
      }
      else i
     }

     loop2(i)
   }
   else      
   { 
     //high code...
     loop1(i + 1)
   }
}


И никаких изменяемых переменных.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.