powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Флейм про оформление и begin-end
25 сообщений из 261, страница 2 из 11
Флейм про оформление и begin-end
    #40062999
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16.04.2021 11:59, _Vasilisk_ пишет:
> Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм

при наличии подсветки - маразм.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063002
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МП> CnPack отлично подсвечивает и на старых версияx IDE.

Угу, но им пользуются не только лишь все и бажный был он раньше.

МП> а писать "от чего конец" - маразм.

Это в абстрактной идеальной ситуации - маразм, да.
А когда там не только лесенка, а простыня, которая
по вертикали в экран не помещается - не маразм, а
удобство. Надо не в догмы ударяться, а работать так,
как удобно и эффективно (при чём не только тебе).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063015
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Только если длинные блоки (что уже плохо)

Длинные блоки - это само по себе не плохо. Это нормально и где-то неизбежно, если не принимать откровенно искусственных решений. Плохо, когда у длинных блоков начинается разнообразная и непредсказуемая вложенность. И тогда уже никакие отметки на end-ах делу не помогут.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063020
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Мимопроходящий
а писать "от чего конец" - маразм.
Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм

Когда в конце процедуры образуется лесенка из 4-5 end - это верный признак кривого нуждающегося в улучшении кода сверху от них. Я сейчас пробежал глазами страшный легаси модуль, на переделку которого точу зубы с тех пор как пришёл в этот проект - и то больше трёх end-ов подряд нигде не увидел.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063040
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> Длинные блоки - это само по себе не плохо.
softwarer> Плохо, когда у длинных блоков начинается
softwarer> разнообразная и непредсказуемая вложенность.

То ли я не понял, что ты пытался сказать, то ли это
какая-то демагогия. "разнообразная вложенность" -
понятие слишком растяжимое - скажем, наличие в
одной п/п if (одного или нескольких), case и try..except
является разнообразной вложенностью или нет?

softwarer> И тогда уже никакие отметки на end-ах делу не помогут.

Помогут увидеть блоки. Код лучше не сделают, конечно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063043
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> страшный легаси модуль ...
softwarer> больше трёх end-ов подряд нигде не увидел.

Да ну, 3 end - это курам на смех, 3 end-a автоматически
образуются в каждом втором-третьем длинном методе.

Вот, для примера, расскажи мне, как
рефакторить следующий г*код:


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
...
begin
  if (Not Key in [VK_DELETE, VK_RETURN])
    then Exit;
  if (Key = VK_RETURN) then
  case FSelRow of
    0: if not FInProcess then ...
    8: if FInProcess then FStopFlag:= true
    else Generate;
  end
  else
  if (Key = VK_DELETE) and not FInProcess then
  begin
     case FSelRow of
     0: begin
        end;
     1: begin
        end;
...
     7: begin
          FFileName := c_NotSpecify;
          ...
        end;
     end;
  end;
end;




И это простыня всего лишь на 60 строк, на экран почти помещается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063050
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
3 end-a автоматически образуются в каждом втором-третьем длинном методе.

Ну в общем, да. Один end на процедуру, один на finally - то есть нормально два. Один резервный - на какую-нибудь доп. хрень. А вот когда их 4-5 - это уже наворочено.

Гаджимурадов Рустам
Вот, для примера, расскажи мне, как рефакторить следующий г*код:

Ну для начала, очевидно

Код: pascal
1.
2.
3.
4.
begin
  if Key = VK_DELETE then DeleteSomething(FSelRow);
  if Key = VK_RETURN then ReturnSomething(FSelRow);
end;


а дальше уже надо предметно смотреть, что внутри этих case-ов. В недавнем прошлом, когда я занимался такой хренью, лучшим оказался подход

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
type
  TSelRow = class
  protected
    procedure DoDelete; virtual;
    procedure DoReturn; virtual;
  end;

  TSelRow1 = class(TSelRow)
    ...


но это уже принципиально зависит от.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063056
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> Ну для начала, очевидно
softwarer> if Key = VK_DELETE then DeleteSomething(FSelRow);
softwarer> if Key = VK_RETURN then ReturnSomething(FSelRow);


Ну что и ожидалось - вместо одного длинного плохого метода
получить два плохих, но покороче. А вчера были большие,
но по пять, а сегодня маленькие, но по 3. (с)

> лучшим оказался подход
> type
> TSelRow = class
> protected
> procedure DoDelete; virtual;
> procedure DoReturn; virtual;
> end;

Это ИМХО ещё хуже, чем одна длинная простыня.
Впрочем, не настаиваю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063057
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
"разнообразная вложенность" - понятие слишком растяжимое

Я не возьмусь сформулировать математически строго - сама область слишком зыбкая и растяжимая. Попробую примерно так:

1. Линейный блок (то есть тот, где передача управления идёт строго сверху вниз) может быть столь длинным, сколь нужно для конкретной задачи. Это нормально читается и не создаёт практических проблем. В том числе он может включать в себя локальные (то есть небольшие) ветвления и циклы, это не мешает. В том числе он может быть завёрнут в try.

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

3. В ветвлении совершенно недопустимы два длинных блока (if условие then длинный else длинный). Ветвление с одной веткой (if условие then длинный) чаще всего следует переписать как (if not условие then exit; длинный). Ветвление с одной длинной и одной короткой веткой нежелательно. Если таки не удаётся его избежать, короткая ветка должна идти первой (if условие then длинный else короткий) следует переписать как (if not условие then короткий else длинный).

4. В некоторых случаях допустимо дальнейшее наращение вложенности (например, цикл, телом которого является цикл с длинным блоком или if с длинным блоком), но здесь быстро наступает предел (скажем, какой-нибудь двукратно вложенный if внутри длинного блока из предыдущего примера уже точно слишком).
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063063
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Ну что и ожидалось - вместо одного длинного плохого метода получить два плохих получше

Всё правильно. Там, где нет возможности для одного глобального улучшения, надо идти шаг за шагом.

Гаджимурадов Рустам
Это ИМХО ещё хуже, чем одна длинная простыня.

В твоём случае - возможно. В моём - это неизмеримо лучше. Краткая характеристика моего случая в терминологии из твоего примера: FSelRow - несколько десятков, условно группируемых на два подтипа, склонны к регулярному пополнению; клавиши - пара десятков, стабильны, обработчики - в большинстве случаев типовые, частично - типовые для подтипа FSelRow, время от времени - особые, однажды прописанные, почти никогда не меняются. Соответственно, какое удовольствие было ползать среди двух десятков простыней, содержащих case на полсотни вариантов каждая.... я как один раз его ощутил, так сразу и переделал на короткий элегантный модуль, в котором добавление нового FSelRow делается за несколько минут, просто-напросто добавлением нового класса и доопределением в нём трёх-четырёх методов.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063068
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> 3. ... Если таки не удаётся его избежать, короткая
softwarer> ветка должна идти первой (if условие then длинный
softwarer> else короткий) следует переписать как (if not условие
softwarer> then короткий else длинный).

Ну это вариации из Макконнелла, он описал их лучше
(хоть и гораздо многословнее), ИМХО. Кроме того,
лично мне больше нравится (и понятнее/читабельнее)
"натуральный" код, вместо "переставленного по размеру".
Т.е. НЕ "переделанный" вариант следующего вида:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
if (not проверочное_условие) then
begin
  технические действия;
  MsgBox/raise;
end
else
begin
  try
    длинная обработка;
  except/finally
  end
end



Да и вообще, "важный"/основной код хочется видеть
до второстепенного, а не переставлять наоборот.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063072
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> удовольствие было ползать среди двух десятков простыней

Когда простыней много - да, плюсы могут пересилить минусы. :)

softwarer> короткий элегантный модуль, в котором добавление
softwarer> ... делается за несколько минут, просто-напросто
softwarer> добавлением нового класса и доопределением в нём трёх-четырёх методов.

Ну, "за несколько минут" оставим без комментариев, но
ты забыл упомянуть, насколько разрастается при этом код
(по сравнению с одной простыней, не несколькими) и все
прелести взаимодействия не-friendly классов. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063073
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Ну это вариации из Макконнелла, он описал их лучше (хоть и гораздо многословнее), ИМХО.

Я допускаю, что Макконнел заглядывал в мой код, когда писал свою книгу.

Гаджимурадов Рустам
Кроме того, лично мне больше нравится (и понятнее/читабельнее) "натуральный" код, вместо "переставленного по размеру".

Ничего не имею против, но при этом else за пару страниц от if категорически нечитабелен. Просто без вариантов. Я назвал вариант приведения наименьшей кровью, но если результат не устраивает - можно воспользоваться любым другим подходом, устраняющим такой if.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063079
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Флейм"...хм. Ёлы-палы, просто спросил!))
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063080
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57> "Флейм"...хм. Ёлы-палы, просто спросил!))

Предложи название получше - переименую.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063082
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> при этом else за пару страниц от if категорически нечитабелен.

В смысле "условие" else или сам блок?
Для "условия" как раз есть подсветка,
комментарии, фолдинг и пр. извраты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063084
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм

От таких мест нужно избавляться.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063085
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Ну, "за несколько минут" оставим без комментариев

Верное решение.

Гаджимурадов Рустам
ты забыл упомянуть, насколько разрастается при этом код

Боюсь тебя огорчить, но я померял. Между версиями v1 и v2 (последними перед переделкой) добавление 4-х FSelRow по старому типу привело к увеличению кода на 95 строк. Между версиями v3 и v4 (первыми после переделки) добавление 2-х FSelRow по новому типу привело к увеличению кода на 52 строки. Если вычесть из этих строк пустые и комментарии, думаю, окажется, что код ещё и сокращается. Впрочем, это в любом случае неважно. Размер кода важен, когда маневрируешь между простынями. Здесь же FSelRow собран в компактный лежащий вместе класс, размером, например (у последнего из добавленных) 36 строк, с которыми ты и работаешь. До всего остального кода просто нет никакого дела. Если захочется, можно, например, вынести этот FSelRow в отдельный файл и наслаждаться "разросшимся кодом" менее 50 строк.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063086
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
В смысле "условие" else или сам блок?

В смысле, программный код, содержащий такую конструкцию.

Гаджимурадов Рустам
Для "условия" как раз есть подсветка, комментарии, фолдинг и пр. извраты.

Скажем так, костыли до определённой степени помогают, но не вижу смысла полагаться на них как на базовый механизм.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063102
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,
авторавтор Минус фигурных скобок в том что если камент...
...
Про комментирование в целях отладки уже отметили,
....

Ну, отладке это точно не помешает, если не путаться в их последовательности
Код: pascal
1.
2.
(*
*)
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063107
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenko> Ну, отладке это точно не помешает, если не путаться в их последовательности

Ну Вы хоть сообщение, на которое отвечаете,
дальше первой строчки прочитайте что ли...


softwarer> добавление 4-х FSelRow по старому типу
softwarer> привело к увеличению кода на 95 строк

Это для скольки штук простыней?


softwarer> Здесь же FSelRow собран в компактный лежащий
softwarer> вместе класс, размером, например 36 строк

Ещё раз - ты на каждый FSelRow свой наследник
делаешь или что именно тут 36 строк занимает?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063109
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
_Vasilisk_
Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм
От таких мест нужно избавляться.

Ну как ты от них избавишься?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end



Что тут выкинуть?
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063122
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

- именно в примере - все пары b/e.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063123
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЯННП.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063126
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
if then
  while do
    try
    end
  


А вообще - смелее выделять блоки кода в методы, даже если они вызываются лишь из одной точки. Колбаса не нужна.
...
Рейтинг: 0 / 0
25 сообщений из 261, страница 2 из 11
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Флейм про оформление и begin-end
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]