parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

kb: об объявлении переменных

Александр Петросян (PAF) 13.12.2006 11:37

Оставим пока в стороне тип переменной, Parser пока — язык без объявления типов переменных. Рассмотрим только объявления.

В идеале, как это сделано в строгих языках (C, java), объявлять нужно всё.

Есть языки, где нужно объявлять меньше.
Скажем, в VBA не нужно объявлять локальные переменные вообще.
А в старом MSBasic можно было указать «набор букв с которых начинается имя локальной переменной». Людям это так понравилось, что объявляли этот набор A-Z, и радовались.

Однако в любимом мною Perl (режим strict-off) сделано иначе:
можно не объявлять глобальные переменные, но нужно объявить локальные. Да ещё выдумано два типа локальных с динамической областью видимости (local $a) и с фиксированной (my $a).

Для Parser придумалось, что все объявления полей классов будут не из-под палки, а мягко. Своеобразный обман, признаю:
@auto[]
$static1[это мы объявили статическое поле класса]
@constructor_in_base_class[]
$dynamic1[
  это мы объявили динамическое поле класса,
  оно будет доступно из методов этого класса
]
@constructor_in_derived _class[]
^constructor_in_base_class[]
$dynamic2[
  это мы объявили динамическое поле класса,
  оно будет доступно из методов этого класса
  но оно НЕ БУДЕТ доступно из методов базового класса
]
$dynamic1[это значение попадёт в поле базового класса]

@method1[]
$dynamic2[
  это мы объявили ещё одно динамическое поле класса, 
  доступное из всех методов
]
Выходит, что вроде бы и не объявляем, но объявляем.
Особенно ярко это проявляется при наследовании классов. Чтобы динамическое поле класса было доступно методам этого класса, обязательно что-нибудь ему присвоить в конструкторе, пусть пустое значение.

Локальные переменные, ввиду вышеописанного, мы объявляем явно:
@method2[][local1;local2]
$local1[это мы что-то присвоили локальной переменной, объявленной строчкой выше]
Мне это объявление локальных переменных не нравится.
Именно из-за своего неудобства и злобного подталкивания к порочной практике использованию переменных «temp» (никогда так не делайте!).

Убеждён(© Путин), локальную переменную лучше всего объявлять по месту первого использования.
Однако непротиворечивую концепцию всех объявлений (static/dynamic/local) придумать пока не удалось.

Если есть идеи, давайте рассмотрим.
«Взять и поделить» не подходит сразу. Отправлю внимательно перечитывать это сообщение.