Обновить
5
vbif@vbif

Пользователь

Отправить сообщение
А в случае, когда переменные объявляют при первом использовании, компилятор ошибки не выдаст?
В языках, где переменные объявляют в месте использования, результат функции обычно передаётся в момент выхода из неё.
Я так и не понял, как объявление переменной в начале функции поможет избежать такой ошибки?
Где такое есть? В C#, к примеру, если я попытаюсь получить значение переменной до её объявления, программа не скомпилируется. Напомните мне, в каком языке это не так?
Аргументы в стиле «а представьте, что ваш ребёнок объявляет переменные в теле процедуры!» — это круто, но всё же, вы так и не привели примера, который бы действительно показывал, что объявлять переменные удобнее в начале программы, а не при инициализации. А вот пример, показывающий обратное: пишешь ты такой код, и нужно сделать
for point in vector do

Придётся перейти в секцию var и вписать туда
point:TPoint

и снова вернуться к секции for. Или, к примеру, обрабатываешь ты XML-ку, нужно получить какие-то атрибуты из ноды. Если бы в паскале можно было объявлять переменные в месте их использования, получилось бы так:
HeaderNode : IXmlNode = Document.DocumentElement['HEADER'];
Model := HeaderNode.Attributes['MODEL'];
Mark := HeaderNode.Attributes['MARK'];
EngineNode : IXmlNode = Document.DocumentElement['ENGINE'];
EngineVolume := EngineNode.Attributes['VOLUME'];
EngineType := EngineNode.Attributes['TYPE'];

Когда переменные нужно объявлять вначале, пишут так:
var
  …
  Node:IXmlNode;
  …
begin
  Node := Document.DocumentElement['HEADER'];
  Model := Node.Attributes['MODEL'];
  Mark := Node.Attributes['MARK'];
  Node : IXmlNode = Document.DocumentElement['ENGINE'];
  EngineVolume := Node.Attributes['VOLUME'];
  EngineType := Node.Attributes['TYPE'];

Или так:

with Document.DocumentElement['HEADER'] do
begin
  Model := Attributes['MODEL'];
  Mark := Attributes['MARK'];
end;
with Document.DocumentElement['ENGINE'] do
begin
  EngineVolume := Attributes['VOLUME'];
  EngineType := Attributes['TYPE'];
end;


А то и вовсе

Model := Document.DocumentElement['HEADER'].Attributes['MODEL'];
Mark := Document.DocumentElement['HEADER'].Attributes['MARK'];
EngineVolume := Document.DocumentElement['HEADER'].Attributes['VOLUME'];
EngineType := Document.DocumentElement['HEADER'].Attributes['TYPE'];
Перемешал, добавил, разницы не почувствовал.
Многие программисты, пишущие на Delphi методы длиной более 1000 строк, объявляющие переменные про запас, использующие переменные по нескольку раз и дающие им имена типа «s1», «sss» и «str1», игнорируют предупреждения компилятора.
Поясните, чем он сомнителен.
Как эти примеры оправдывают необходимость объявления переменных в начале функции?
Просто не использовать параметры как переменные.
А если подавать три фазы?
Параметры — это интерфейс между функцией и вызывающим её кодом.
Константы — на то и константы, что могут использоваться где угодно, но обязаны иметь всегда одно значение, тем более что «инициализируются» они сразу при объявлении.
Почему к ним должны быть «должны быть ближе остальные локальные переменные»? Почему «Чем ближе все определения друг к другу — тем удобнее работать»?
Тем хуже: войдёт в привычку, что неинициализированная переменная принимает 0, '' или nil, а потом понадобится переучиться на другой язык.
Если нужно завалить студента на экзамене, сложность ничем не ограничена.
Но ведь мы как-то избавились от ятей и повсеместных еров?
А зачем? Кроме того, есть соблазн пользоваться неинициализированными переменными.
Единственный, довольно сомнительный, плюс от объявления переменных в начале функции — такое ограничение заставляет писать более короткие функции. Однако, любители писать функции на 1000 строк выходят из положения, просто объявляя «про запас» переменные типа «s1,s2…», либо повторно используя одну и ту же переменную.
Полагаю, первый минус мостовой схемы аннулируется для трёхфазных схем?
Сдаётся мне, что общество плоской земли было придумано специально, чтобы даже необразованным обывателям, верящим в астрологию и мировые заговоры, было на фоне кого казаться умнее.
А в каких профессиях такое не встречается? Разве что на уровне рабочего на конвейере, где есть технологическая карта и всё расписано до шага.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность