Оператор присваивания

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Сообщение Deepthroat » 27.12.2007 01:35:26

я НИКОГДА не пишу таких больших блоков кода
вынеси циклы в отдельные процдуры и объяви переменные как надо

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

Я возможно оригинал, но мне проще читать именно первый вариант.

Ну это пример не совсем удачный. Во-первых, в секции объявления всего 3 строки, а бывает и по 10, и больше. И среди них большая часть - временные переменные, счетчика циклов и т.п.

Особенно разрастается секция объявления переменных при использовании WinAPI - там сплошные буферы, переменные-контейнеры для возврата значения, переменные для хранения параметров, которые реально нужны только для одной функции - для другой нужны уже другие. Соответственно, приходится либо использовать те же переменные повторно, либо объявлять все по новой - тогда имена будут читаемые, а не tmp1, tmp2 и т.п., но и количество переменных в var возрастет.
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Сообщение alexs » 27.12.2007 02:58:56

Deepthroat писал(а):если атомарная задача

атомарная задача не может быть длинной 10 страниц текста. Иначе надо смотреть уже не на объявление переменных, а на сам алгоритм. А атомарность подразумевает краткость и лаконичность.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Mastack1 » 27.12.2007 16:57:46

Deepthroat
А где эти переменные-контейнеры определять? Если непосредственно при вызове процедуры, то уже в следующем опраторе их не будет видно. Остаётся определять блок begin - end;...

Хотя на мой вгляд, это излишяя перегрузка языка, я бы предложил возможность дополнения пресловутого begin - end; возможностью дописать к нему блок var, то есть так:
Код: Выделить всё
procedure SomeProc;
var
  переменные, видимые во всей процедуре
begin
  операторы
  var
    тут переменные, видимые только в следующем блоке
  begin
    операторы
  end;
  операторы
end;

и компиляция остаётся линейной :P

PS всем
Рискую показаться настырным, но никто так и не сказал, что он думает по-поводу полного отсутствия описания переменных цикла.
Mastack1
незнакомец
 
Сообщения: 5
Зарегистрирован: 24.12.2007 18:48:43
Откуда: Москва

Сообщение bw » 27.12.2007 17:48:12

Mastack1, не хочу никого учить, но лучше все же этот вопрос (циклы и др.) обсуждать в своей теме, но не в этой точно.

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Deepthroat » 28.12.2007 01:04:19

А где эти переменные-контейнеры определять? Если непосредственно при вызове процедуры, то уже в следующем опраторе их не будет видно. Остаётся определять блок begin - end;...

Ну вот так, например:

Код: Выделить всё
var buf: PChar;
var count: integer;
var x: cardinal;
var f: boolean;

var result: boolean := some_function(buf, count, x, f);

А уничтожать переменные на ближайшем end (ну или until, либо другой конец блока). Программисту вообще не обязательно ограничивать область видимости переменной искусственно.

атомарная задача не может быть длинной 10 страниц текста.

Задача задаче рознь :wink: Согласен, 10 страниц не может, но два экрана с несколькими вложенными циклами - запросто.
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Сообщение alexs » 28.12.2007 01:30:58

Deepthroat писал(а): но два экрана с несколькими вложенными циклами - запросто

Всё равно много - функциональный блок текста ты должен видеть за 1 раз весь - иначе трудно с этим работать.
Бей на подпрограммы.
сразу решится вопрос с областью видимости локальных переменных :-)
Mastack1
Локальные блоки кода со своими переменными - это таже процедура - так почему её не вынести отдельно?

P.S.
Народ, я не понимаю - почему вы боитесь выделять код в отдельные процедуры?
Ведь это только повышает читаемость исходного кода программы. Даже если код этой процедуры используется 1 раз, если будет к ней вызов только из одного места - но если это повысит читаемость программы - надо смело это использовать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re:

Сообщение GAMER » 16.11.2008 22:40:23

alexs писал(а):
Bonart писал(а): Там типы a b и t видны сразу и проблемы

С чего ты взял что они видны - ты аобще предлагаеш убрать объявление типа, либо размазать его по исходнику. ГДЕ БУДЕТ ЛЕГКО ВИДНО?
в нынешней нотаци паскаля я по крайней мере знаю - надо посомотрит - что у меня за переменная - смотри в начало кода процедуры/функции - а если всё это будет размазано по тексту? где смотреть?

Вставлю свои 5 копеек.
Когда писал на С++, то мне удобно было объявлять переменную в том месте, где она возникала в коде. Я тихо радовался такому счастью, но до тех пор, пока не пришлось этот код переносить на паскаль. И тут я столкнулся с проблемой, что постоянно приходилось искать описание переменных, которые встречались в коде. Если бы все было собрано в начале кода самой подпрограммы, то и переносить было бы легче. Так что я "За" описание переменных в начале кода подпрограммы.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Пред.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru
cron