Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5 6 7 8 9 10 11      [все]
 Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
_Vasilisk_

+
while LCurInfo <> nil do begin
      if (LCurInfo^.Type_ = MIB_IF_TYPE_ETHERNET) then begin
        for Li := 0 to Length(TestMacList) do begin
          if Int64(LCurInfo^.Address) = TestMacList[Li] then begin
            Result := True;
            Exit;
          end;
        end;
      end;
Тебе реально так удобно расставлять begin'ы?!
15 апр 21, 12:41    [22309300]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
дебаркадеро так ставит.
а в исходниках VCL встречается всякое и симметричные begin .. end, и асимметричные.
15 апр 21, 12:46    [22309303]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
Мимопроходящий
дебаркадеро так ставит.
Не замечал за ними такого. Вгде они так делают?
15 апр 21, 13:05    [22309312]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
Да. Если строка короткая. А если длинная пишу так

if
  Condition1 and
  Condition2
then begin
Тогда каждый end соответствует конкретному оператору
15 апр 21, 13:52    [22309335]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
Мне удобно, всегда так делаю. Не вижу смысла в лесенках типа
end
else
begin
15 апр 21, 14:28    [22309360]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
_Vasilisk_
Если строка короткая. А если длинная пишу так

if
  Condition1 and
  Condition2
then begin
+2 тоже
только вот так
if Condition1 and
   Condition2
then begin


Сообщение было отредактировано: 15 апр 21, 14:23
15 апр 21, 14:30    [22309362]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
_Vasilisk_
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
Да. Если строка короткая. А если длинная пишу так

if
  Condition1 and
  Condition2
then begin

Тогда каждый end соответствует конкретному оператору


а я для сложных условий пишу вот так
if
  Condition1 
  and
  Condition2
then begin


тогда and/or не теряется в конце, условие сразу видно, чего с чем
15 апр 21, 14:33    [22309364]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
_Vasilisk_, непривычно тяжело читать...
15 апр 21, 16:13    [22309423]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
defecator> тогда and/or не теряется в конце

Чтобы не терялись в конце - их можно писать
в начале (в той же строчке, не на отдельной).

Отступы делаешь, кстати?

Posted via ActualForum NNTP Server 1.5

15 апр 21, 18:08    [22309479]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
Гаджимурадов Рустам
defecator> тогда and/or не теряется в конце

Чтобы не терялись в конце - их можно писать
в начале (в той же строчке, не на отдельной).

Отступы делаешь, кстати?


конечно делаю !

+
begin
     if FVideoSource.Video.Size = 0 then Exit ;

     try
        try
           { если сейчас НЕ режим сессии }
           if not SessionStarted then Exit ;

           { записать видео на диск }
           WriteFrame(FVideoSource.Video,FVideoSource.Motions,FVideoSource.CurrFPS) ;

           { настраиваем внутренний буфер }
           if (FBufferBmp.Width <> FVideoSource.Bmp.Width) or
              (FBufferBmp.Height <> FVideoSource.Bmp.Height)
            then FBufferBmp.Assign(FVideoSource.Bmp)
            else FBufferBmp.Canvas.Draw(0,0,FVideoSource.Bmp) ;

           { напускаем на картинку детектор }
           Test := FVideoSource.MotExists ;

           { движения нет - на выход }
           if not Test then Exit ;
           
           FVideoSource.MotDet.LoadToMotionRes(FMotRes) ;

           { вырезать картинку пробки или зоны движения }
           BoundRect := FMotRes.GetBoundRect(FBufferBmp.Canvas) ;

           PartW := BoundRect.Right  - BoundRect.Left ;
           PartH := BoundRect.Bottom - BoundRect.Top ;

           if (FPartBmp.Width <> PartW) or
              (FPartBmp.Height <> PartH) then
            begin
                 FPartBmp.Width := PartW ;
                 FPartBmp.Height := PartH ;
            end ;

           { отрисовать зону }
           FPartBmp.Canvas.CopyRect(Rect(0, 0, PartW,PartH),FBufferBmp.Canvas,BoundRect) ;

           { проверить наличие пробки }
           { определяем, пробка у нас в кадре или нет }
           ProbkaExists := RecogProbka(FPartBmp,aBLevel,aWLevel) ;

           if ProbkaExists then
            begin
                 { увеличить счетчик пробок }
                 IncrementBottlesCounter ;
            end ;
        except
15 апр 21, 18:17    [22309484]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
defecator> конечно делаю !

Не, отступы внутри сложных булевых выражений. А-ля

(условие1)
and
(условие2
  or
условие3)

итп

Posted via ActualForum NNTP Server 1.5

15 апр 21, 18:55    [22309512]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
defecator
ProbkaExists := RecogProbka
15 апр 21, 19:13    [22309519]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 755
defecator
                 { увеличить счетчик пробок }
                 IncrementBottlesCounter ;

А почему не ProbkaCounter?)
15 апр 21, 20:31    [22309539]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
Fr0sT-Brutal
defecator
                 { увеличить счетчик пробок }
                 IncrementBottlesCounter ;


А почему не ProbkaCounter?)

считались бутылки по пробкам - стоит камера над конвейером, который ползёт весьма быстро,
и надо было сосчитать количество бутылок за смену

причём только оптическое распознавание, никаких магнитиков и прочей шушеры

хороший заказной проект был из Казахстана, 2010-й год, тонны денег принёс

Сообщение было отредактировано: 15 апр 21, 20:27
15 апр 21, 20:35    [22309541]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
bk0010
Member

Откуда:
Сообщений: 5081
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
Мне - очень. Смысл терять строку на begin? Экран не резиновый, читабельность ухудшается (из-за отступов, так сразу видно, чей end).
15 апр 21, 23:28    [22309595]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
С некоторых пор я отказался от комментариев вида {} в пользу комментариев вида //
Минус фигурных скобок в том что если камент многострочный и закомментировать одну из скобок - то действие оставшейся распространяется совсем не туда куда нужно. Это ограничивает использование комментирования блока операторов в целях отладки.

Теперь всегда пишу // тем более что в GExperts есть шорткат что бы такими символами закоментировать/раскомментировать сразу все выделенные строки.

Так же, для удобства, после end пишу от чего этот begin.

  if SPR(9, id, sname) then begin
    EditSagc.Text := sname;
    Fsagc_id      := id;
  end;//if

    case err of
      1: MessageDlg(err_msg + 'В введенном коде содержатся не только цифры!'     , mtError, [mbOk], 0);
      2: MessageDlg(err_msg + 'Длина введенного кода не 10 цифр а '+ IntToStr(length(s)), mtError, [mbOk], 0);
      else
         MessageDlg(err_msg + 'Еще какая-то ошибка' , mtError, [mbOk], 0);
    end;//case


var
  id_ss_cor : integer; // id строки в таблице кодов поставщиков
  id_ss     : integer; // id источника кодов
begin
  // вставить новый код поставщика
  id_ss     := 0; // не знаем код какого поставщика будет вставлен
  id_ss_cor := SScorInsert(id_ss, Fid);
  if id_ss_cor > 0 then begin
    F5_CODE;
    CDV_Code.PositionID(id_ss_cor);
  end;//if
end;
16 апр 21, 03:52    [22309640]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
bk0010
читабельность ухудшается
Ну не знаю... по мне - как раз наоборот.
16 апр 21, 09:37    [22309680]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
Стандартный форматтер в среде согласен со мной))
16 апр 21, 09:39    [22309682]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
Минус фигурных скобок в том что если камент многострочный и закомментировать одну из скобок - то действие оставшейся распространяется совсем не туда куда нужно. Это ограничивает использование комментирования блока операторов в целях отладки.

Вот уж воистину - применить кривой метод, вляпаться в несуществующую проблему и отказаться от хорошей вещи ради её "решения".

"Комментирование в целях отладки" - довольно кривая практика, но если уж решил этим путём - попробуй как-нибудь использовать для этого (* такие комментарии *), тебя ждёт сюрприз.
16 апр 21, 10:14    [22309697]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
Так же, для удобства, после end пишу от чего этот begin.

И ещё венгерскую нотацию надо бы вспомнить. Дабы собрать все древние глупости в одном флаконе. Кстати, это "удобство" ярко иллюстрирует проблемы от неправильного позиционирования begin-а.

Сообщение было отредактировано: 16 апр 21, 10:08
16 апр 21, 10:15    [22309698]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 755
fraks
Так же, для удобства, после end пишу от чего этот begin.

Для длинных блоков тоже пишу.

Вот так топик о Мак-адресе скатился в спор о стилях))
16 апр 21, 10:19    [22309700]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
Египетские скобки в паскале, это капец...
16 апр 21, 10:21    [22309703]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
fraks> Минус фигурных скобок в том что если камент
fraks> многострочный и закомментировать одну из скобок -
fraks> то действие оставшейся распространяется совсем
fraks> не туда куда нужно. Это ограничивает использование
fraks> комментирования блока операторов в целях отладки.

Про комментирование в целях отладки уже отметили,
но комментировать блоки надо не так

{
строка;
строка;
}


а так

{
строка;
строка;
{}


При чём независимо от IDE и языка.


fraks> Так же, для удобства, после end пишу от чего этот begin.

Только если длинные блоки (что уже плохо).
Отступы должны помогать, тем более щас IDE умеют
подсвечивать блоки (вот раньше проблема была, да).

Posted via ActualForum NNTP Server 1.5

16 апр 21, 11:44    [22309742]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

16.04.2021 11:44, Гаджимурадов Рустам пишет:
> Отступы должны помогать, тем более щас IDE умеют
> подсвечивать блоки (вот раньше проблема была, да).
>

CnPack отлично подсвечивает и на старых версияx IDE.
а писать "от чего конец" - маразм.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 11:48    [22309744]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
Мимопроходящий
а писать "от чего конец" - маразм.
Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм
16 апр 21, 11:59    [22309751]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

16.04.2021 11:59, _Vasilisk_ пишет:
> Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм

при наличии подсветки - маразм.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 12:02    [22309753]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
МП> CnPack отлично подсвечивает и на старых версияx IDE.

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

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

Это в абстрактной идеальной ситуации - маразм, да.
А когда там не только лесенка, а простыня, которая
по вертикали в экран не помещается - не маразм, а
удобство. Надо не в догмы ударяться, а работать так,
как удобно и эффективно (при чём не только тебе).

Posted via ActualForum NNTP Server 1.5

16 апр 21, 12:05    [22309756]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Только если длинные блоки (что уже плохо)

Длинные блоки - это само по себе не плохо. Это нормально и где-то неизбежно, если не принимать откровенно искусственных решений. Плохо, когда у длинных блоков начинается разнообразная и непредсказуемая вложенность. И тогда уже никакие отметки на end-ах делу не помогут.
16 апр 21, 12:46    [22309781]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
_Vasilisk_
Мимопроходящий
а писать "от чего конец" - маразм.
Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм

Когда в конце процедуры образуется лесенка из 4-5 end - это верный признак кривого нуждающегося в улучшении кода сверху от них. Я сейчас пробежал глазами страшный легаси модуль, на переделку которого точу зубы с тех пор как пришёл в этот проект - и то больше трёх end-ов подряд нигде не увидел.
16 апр 21, 12:52    [22309789]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> Длинные блоки - это само по себе не плохо.
softwarer> Плохо, когда у длинных блоков начинается
softwarer> разнообразная и непредсказуемая вложенность.

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

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

Помогут увидеть блоки. Код лучше не сделают, конечно.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 13:32    [22309814]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> страшный легаси модуль ...
softwarer> больше трёх end-ов подряд нигде не увидел.

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

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

+

...
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

16 апр 21, 13:40    [22309826]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
3 end-a автоматически образуются в каждом втором-третьем длинном методе.

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

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

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

begin
  if Key = VK_DELETE then DeleteSomething(FSelRow);
  if Key = VK_RETURN then ReturnSomething(FSelRow);
end;

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

type
  TSelRow = class
  protected
    procedure DoDelete; virtual;
    procedure DoReturn; virtual;
  end;

  TSelRow1 = class(TSelRow)
    ...

но это уже принципиально зависит от.

Сообщение было отредактировано: 16 апр 21, 13:50
16 апр 21, 13:58    [22309836]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
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

16 апр 21, 14:18    [22309843]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
"разнообразная вложенность" - понятие слишком растяжимое

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

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

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

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

4. В некоторых случаях допустимо дальнейшее наращение вложенности (например, цикл, телом которого является цикл с длинным блоком или if с длинным блоком), но здесь быстро наступает предел (скажем, какой-нибудь двукратно вложенный if внутри длинного блока из предыдущего примера уже точно слишком).
16 апр 21, 14:25    [22309845]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Ну что и ожидалось - вместо одного длинного плохого метода получить два плохих получше

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

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

В твоём случае - возможно. В моём - это неизмеримо лучше. Краткая характеристика моего случая в терминологии из твоего примера: FSelRow - несколько десятков, условно группируемых на два подтипа, склонны к регулярному пополнению; клавиши - пара десятков, стабильны, обработчики - в большинстве случаев типовые, частично - типовые для подтипа FSelRow, время от времени - особые, однажды прописанные, почти никогда не меняются. Соответственно, какое удовольствие было ползать среди двух десятков простыней, содержащих case на полсотни вариантов каждая.... я как один раз его ощутил, так сразу и переделал на короткий элегантный модуль, в котором добавление нового FSelRow делается за несколько минут, просто-напросто добавлением нового класса и доопределением в нём трёх-четырёх методов.
16 апр 21, 14:39    [22309855]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> 3. ... Если таки не удаётся его избежать, короткая
softwarer> ветка должна идти первой (if условие then длинный
softwarer> else короткий) следует переписать как (if not условие
softwarer> then короткий else длинный).

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

if (not проверочное_условие) then
begin
  технические действия;
  MsgBox/raise;
end
else
begin
  try
    длинная обработка;
  except/finally
  end
end


Да и вообще, "важный"/основной код хочется видеть
до второстепенного, а не переставлять наоборот.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 14:48    [22309863]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> удовольствие было ползать среди двух десятков простыней

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

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

Ну, "за несколько минут" оставим без комментариев, но
ты забыл упомянуть, насколько разрастается при этом код
(по сравнению с одной простыней, не несколькими) и все
прелести взаимодействия не-friendly классов. :)

Posted via ActualForum NNTP Server 1.5

16 апр 21, 14:53    [22309868]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Ну это вариации из Макконнелла, он описал их лучше (хоть и гораздо многословнее), ИМХО.

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

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

Ничего не имею против, но при этом else за пару страниц от if категорически нечитабелен. Просто без вариантов. Я назвал вариант приведения наименьшей кровью, но если результат не устраивает - можно воспользоваться любым другим подходом, устраняющим такой if.
16 апр 21, 14:53    [22309870]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
"Флейм"...хм. Ёлы-палы, просто спросил!))
16 апр 21, 15:06    [22309880]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
Barmaley57> "Флейм"...хм. Ёлы-палы, просто спросил!))

Предложи название получше - переименую.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 15:09    [22309881]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> при этом else за пару страниц от if категорически нечитабелен.

В смысле "условие" else или сам блок?
Для "условия" как раз есть подсветка,
комментарии, фолдинг и пр. извраты.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 15:11    [22309883]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
_Vasilisk_
Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм

От таких мест нужно избавляться.

Сообщение было отредактировано: 16 апр 21, 16:25
16 апр 21, 15:16    [22309885]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Ну, "за несколько минут" оставим без комментариев

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

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

Боюсь тебя огорчить, но я померял. Между версиями v1 и v2 (последними перед переделкой) добавление 4-х FSelRow по старому типу привело к увеличению кода на 95 строк. Между версиями v3 и v4 (первыми после переделки) добавление 2-х FSelRow по новому типу привело к увеличению кода на 52 строки. Если вычесть из этих строк пустые и комментарии, думаю, окажется, что код ещё и сокращается. Впрочем, это в любом случае неважно. Размер кода важен, когда маневрируешь между простынями. Здесь же FSelRow собран в компактный лежащий вместе класс, размером, например (у последнего из добавленных) 36 строк, с которыми ты и работаешь. До всего остального кода просто нет никакого дела. Если захочется, можно, например, вынести этот FSelRow в отдельный файл и наслаждаться "разросшимся кодом" менее 50 строк.
16 апр 21, 15:18    [22309886]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
В смысле "условие" else или сам блок?

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

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

Скажем так, костыли до определённой степени помогают, но не вижу смысла полагаться на них как на базовый механизм.
16 апр 21, 15:22    [22309887]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4664
Гаджимурадов Рустам,
автор
автор
Минус фигурных скобок в том что если камент...

...
Про комментирование в целях отладки уже отметили,
....


Ну, отладке это точно не помешает, если не путаться в их последовательности
(*
*)
16 апр 21, 16:05    [22309908]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
Gerasimenko> Ну, отладке это точно не помешает, если не путаться в их последовательности

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


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

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


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

Ещё раз - ты на каждый FSelRow свой наследник
делаешь или что именно тут 36 строк занимает?

Posted via ActualForum NNTP Server 1.5

16 апр 21, 16:24    [22309916]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
ъъъъъ
_Vasilisk_
Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм
От таких мест нужно избавляться.

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

begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end


Что тут выкинуть?
16 апр 21, 16:34    [22309924]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
Гаджимурадов Рустам,

- именно в примере - все пары b/e.
16 апр 21, 17:27    [22309942]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
ЯННП.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 17:30    [22309944]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
if then
  while do
    try
    end
  

А вообще - смелее выделять блоки кода в методы, даже если они вызываются лишь из одной точки. Колбаса не нужна.
16 апр 21, 17:37    [22309948]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Это для скольки штук простыней?

Написал же вроде, пара десятков.

Гаджимурадов Рустам
Ещё раз - ты на каждый FSelRow свой наследник делаешь

Да.
16 апр 21, 17:38    [22309950]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end


Что тут выкинуть?

begin
  if not () then exit;
  while () do
  try
  except
  end;
end;
16 апр 21, 17:39    [22309951]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
softwarer
Гаджимурадов Рустам
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end


Что тут выкинуть?

begin
  if not () then exit;
  while () do
  try
  except
  end;
end;
+100500
16 апр 21, 17:49    [22309955]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> Написал же вроде, пара десятков.

Соответственно, кол-во строк не имеет смысла.

softwarer> if not () then exit;

С этим согласен, в простейшем случае.

А это


> while () do
> try
> except
> end;
> end;


неравносильно предыдущему куску кода
(особенно если except заменить на finally).

Posted via ActualForum NNTP Server 1.5

16 апр 21, 17:58    [22309960]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
ъъъъъ> А вообще - смелее выделять блоки кода в методы

Ты хоть смайлики ставь, а-то не всегда очевидно, когда ты троллишь. :)

Posted via ActualForum NNTP Server 1.5

16 апр 21, 17:58    [22309961]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
booby
Member

Откуда:
Сообщений: 2534
softwarer
...
...
begin
  if not () then exit;
  while () do
  try
  except
  end;
end;

exit вроде обязывает, нет?

В структурно родственных языках практикуют такого рода форму для любителей раннего выхода:
for var i := 1 to 1 do
begin
  if not () then break;
  while () do
  try
  except
  end;
end;


Сообщение было отредактировано: 16 апр 21, 18:04
16 апр 21, 18:11    [22309969]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
booby> exit вроде обязывает, нет?

Exit - выход из метода.

> В структурно родственных языках практикуют такого
> рода форму для любителей раннего выхода:

break - выход из цикла, не из метода.
И Ваш код отличается от обсуждаемого.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 18:22    [22309977]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
booby
Member

Откуда:
Сообщений: 2534
Гаджимурадов Рустам,

теперь я ЯННП

обсуждать вроде предлагалось расстановку скобок составного оператора...
В топике тогда весь код не соответствует обсуждаемому.

Ладно, не обращай внимания, я случайно забрёл.
16 апр 21, 18:29    [22309980]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
ъъъъъ
if then
  while do
    try
    end
Это на пару порядков хуже. Сразу теряется понимание, что к какому блоку принадлежит.

Я в begin-end заворачиваю даже один оператор, если он длинный и располагается на нескольких строках
16 апр 21, 18:46    [22309983]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
_Vasilisk_> Я в begin-end заворачиваю даже один оператор, если
_Vasilisk_> он длинный и располагается на нескольких строках

Это оверкилл.

Если это расчётный оператор (а не вызов функции
с 12ю параметрами), то лучше его просто разбить
на 2-3 с переприсваиваниями.

Сообщение было отредактировано: 16 апр 21, 18:51
16 апр 21, 18:57    [22309991]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
booby> обсуждать вроде предлагалось расстановку скобок составного оператора...

Обсуждалось много чего, просто рассуждения
про break vs exit - совсем не тема данного топика.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 18:58    [22309992]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
Гаджимурадов Рустам
Если это расчётный оператор (а не вызов функции
Ну вот из реального кода
  if not TimeFromIsNull then begin
    LStr := LStr + Format(
      ', Value: %s',
      [FormatDateTime('yyyy-mm-ss hh:nn:ss.zzz', AUtil.ISCTimeStampToDateTime(Self.TimeFrom))]
    );
  end;
или
    if AStyle.Style.BorderWidth > 0 then begin
      LPath.D := Format(
        'M %.1f %.1f H %.1f L 50 %d Z', [
          6.7 + LDelta,
          75 - AStyle.Style.BorderWidth / 2,
          93.3 - LDelta,
          AStyle.Style.BorderWidth
        ],
        LPath.SVGFormatSettings
      );
    end else
      LPath.D := 'M 6.7 75 H 93.3 L 50 0 Z';
16 апр 21, 20:03    [22310011]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
_Vasilisk_> Ну вот из реального кода

Тут составной оператор определённо лишний.
Лично я бы и Format выкинул, за ненадобюностью.

> или
> LPath.D := Format(

Тут составной оператор тоже не нужен, ИМХО,
достаточно отступов, которые ты итак сделал.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 20:12    [22310015]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
Гаджимурадов Рустам
ъъъъъ
пропущено...
От таких мест нужно избавляться.

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

begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end



Что тут выкинуть?


первый IF выкинуть вообще просто
Я лично адепт простых условий, и чтобы не было вложенносте
всё, что не надо, проверить ДО

begin
  if not () then Exit ;

    while () do
    begin
      try
      except
      end
    end

end
16 апр 21, 21:22    [22310032]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
_Vasilisk_
Гаджимурадов Рустам
Если это расчётный оператор (а не вызов функции
Ну вот из реального кода
  if not TimeFromIsNull then begin
    LStr := LStr + Format(
      ', Value: %s',
      [FormatDateTime('yyyy-mm-ss hh:nn:ss.zzz', AUtil.ISCTimeStampToDateTime(Self.TimeFrom))]
    );
  end;

или
    if AStyle.Style.BorderWidth > 0 then begin
      LPath.D := Format(
        'M %.1f %.1f H %.1f L 50 %d Z', [
          6.7 + LDelta,
          75 - AStyle.Style.BorderWidth / 2,
          93.3 - LDelta,
          AStyle.Style.BorderWidth
        ],
        LPath.SVGFormatSettings
      );
    end else
      LPath.D := 'M 6.7 75 H 93.3 L 50 0 Z';

это всеми любимый стиль оформления в PL/SQL
16 апр 21, 21:25    [22310033]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
defecator> всё, что не надо, проверить ДО

Это победа, да, 3 end-a вместо четырёх.
Потом другом в коде выкинуть With и
написать вместо блока переменную, да.

Posted via ActualForum NNTP Server 1.5

16 апр 21, 21:35    [22310037]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
delphinotes
Member

Откуда: Санкт-Петербург
Сообщений: 394
А я ещё в некоторых случаях стал точку с запятой в отдельную строку выносить. И в вызываемый метод, когда параметров много - каждый параметр на отдельной строке. Пример:

  if Condition then
    SomethingMethodWithManyParams(
      // in:
      FirstParam,
      NextParam,
      ..
      // out:
      LastParam
    )
  else
    OtherMethodWithFewParams(P1, P2, P3)
  ;


Смысл в том, что:
а) легко выделять для копи-пасты (строками целиком, не надо целиться мышкой между символами)
б) пока код черновой - добавлять/удалять параметры можно комментированием одной строки
в) точка с запятой показывает текущий отступ и не затеряется где-то справа, если вдруг вызов второго метода разрастётся ещё параметрами и это всё уедет вправо.

Но такое чаще для PL/SQL (в Oracle, особенно точка с запятой актуальна для SQL-блоков в PL/SQL-коде).
В Delphi всё же проще параметры определять в рекорды/классы и передавать одной переменной (или просто вызвав метод класса без параметров).

А вообще я за GunSmoker не пишите комментарии - такой подход добавит читаемости и уменьшит кол-во потенциальных ошибок, проверено практикой.
16 апр 21, 21:35    [22310038]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
bk0010
Member

Откуда:
Сообщений: 5081
Гаджимурадов Рустам

Ну как ты от них избавишься?
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end

Что тут выкинуть?
Зачем выкидывать? Тут как раз все нормально: процедура выполняет одну задачу. Зачем ее искусственно рвать на куски? Нет, если память как у золотой рыбки или код не форматирован, то смысл есть, но в реальности-то зачем?
16 апр 21, 22:34    [22310057]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
didgik
Member

Откуда:
Сообщений: 987
Вот поэтому скобочки из С++ рулят.
17 апр 21, 00:02    [22310074]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
didgik
Вот поэтому скобочки из С++ рулят.


чем это они рулят ?
ровно то же самое и будет
17 апр 21, 09:11    [22310103]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
_Vasilisk_
ъъъъъ
if then
  while do
    try
    end

Это на пару порядков хуже. Сразу теряется понимание, что к какому блоку принадлежит.
...

Да ладно. С "этим" питон живет, и ни жу-жу. И в рейтинге, в отличии от.
17 апр 21, 10:35    [22310115]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
defecator
didgik
Вот поэтому скобочки из С++ рулят.


чем это они рулят ?
ровно то же самое и будет

В сях begin end в среднем в 4 раза короче, и нет тупости типа

 if x then
  XXX; // Ахтунг!
 else
  YYY; 
17 апр 21, 10:40    [22310118]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Соответственно, кол-во строк не имеет смысла.

Так я сразу так и сказал. Но поскольку тебя заинтересовал этот вопрос - дал информацию.

Гаджимурадов Рустам
неравносильно предыдущему куску кода

Зависит от. Именно поэтому я не ленюсь расставлять комментарии типа { ... длинный кусок кода ... }.

booby
exit вроде обязывает, нет?

"Всё, что я должен, записано в налоговом кодексе" (тм)

booby
В структурно родственных языках практикуют такого рода форму

Есть разработчики, которые пользуются языком программирования примерно так же, как таджики разговаривают по-русски. Они пишут

if {условие}
  then a := true
  else a := false


пишут

if {условие} then
begin
  i := 1;
end;


и ещё множество подобных конструкций, в том числе и описанную Вами.
17 апр 21, 12:41    [22310131]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
Гаджимурадов Рустам

Что тут выкинуть?

begin
  if not () then exit;
  ...
end;

Я конечно тоже использую такой метод "испуганного программирования", но исключительно когда эта строка - первая и единственная такого рода в процедуре. Типа если в датасете нет выбранной строки - то идем нафиг.

Если такие убегания встречаются внутри, да еще неоднократно - это не есть хорошо.
17 апр 21, 12:49    [22310132]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
ъъъъъ
defecator
пропущено...


чем это они рулят ?
ровно то же самое и будет

В сях begin end в среднем в 4 раза короче, и нет тупости типа

 if x then
  XXX; // Ахтунг!
 else
  YYY; 


твой ахтунг в Дельфи не скомпилируется
17 апр 21, 12:51    [22310133]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
Гаджимурадов Рустам


fraks> Так же, для удобства, после end пишу от чего этот begin.

Только если длинные блоки (что уже плохо).
Отступы должны помогать, тем более щас IDE умеют
подсвечивать блоки (вот раньше проблема была, да).


У меня D7, там нету подсветки.

В Notepad++ и в Lazarus она есть, но не скажу что бы это как-то сильно помогало. Впрочем, я в них не работаю, только иногда запускаю.

Поискал у себя код с длинными лестницами, нашел вот такого вида. Есть и больше, но в единичных случаях, лень искать.

  // проверим есть ли в документе записи с кол-вом 0
  if not Fro then begin // если документ открыт не в режиме "Только для чтения"
    if CheckKolZero then begin // если есть позиции с кол=0
      if mrOk = MessageDlg('Удалить позиции с нулевым количеством?', mtConfirmation, mbOkCancel, 0) then begin
        // удалить пустые позиции
        QDel.ParamByName('ndok').AsInteger := Fndok;
        QDel.ParamByName('io'  ).AsString  := Fio;
        for i := 0 to CDS.Count-1 do begin
          if CDS.ReadIntegerFN(i, 'BTOV_KOL') = 0 then begin
            idtov := CDS.ReadIntegerFN(i, 'BTOV_IDTOV');
            QDel.ParamByName('idtov').AsInteger := idtov;
            Open_Query(QDel); // открытие с обработкой исключений и с сообщениями
            QDel.Transaction.Commit;
          end;//if
        end;//for
        F5_refresh;
      end;//if
    end;//if
  end;//if



Иногда даже вот так выделяю блоки

  if aid = 0 then begin
    //*************************************************************************************
    CDS.ExecSelect(QSel);
    F5_font; // раскрасим шрифт по признаку вхождения в наборы товаров и выставим Bold по условиям с партиями
    CDV.Sync;
    CDV.RowRestorePosition; // поставим фокус на сохраненную строку или на первую если ничего не было сохранено
    // поставим фокус на тот же товар что был до обновления. Это обход проблем в случае клиентской сортировки
    if save_id <> 0 then begin
      if CDS.FindInteger(save_id, 'btov_idtov', iRow) then begin
        CDV.RowSelect(iRow);
      end;//if
    end;//if
    //*************************************************************************************
  end else begin
    //*************************************************************************************
    CDS.ExecSelectRefresh(QSel, arow);
    F5_font(arow); // раскрасим шрифт по признаку вхождения в наборы товаров и выставим Bold по условиям с партиями
    VTree.Invalidate;
    //*************************************************************************************
  end;//if
17 апр 21, 13:05    [22310137]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
Еще бывает что для компактности кода if с блоками растягиваю в одной строке

  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 0
  if Item_GoodMark1.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA1 := 0; Item_GoodMark1.Caption := nosel; end;
  if Item_GoodMark2.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA2 := 0; Item_GoodMark2.Caption := nosel; end;
  if Item_GoodMark3.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA3 := 0; Item_GoodMark3.Caption := nosel; end;
  if Item_GoodMark4.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA4 := 0; Item_GoodMark4.Caption := nosel; end;
  if Item_GoodMark5.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA5 := 0; Item_GoodMark5.Caption := nosel; end;
  if Item_GoodMark6.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA6 := 0; Item_GoodMark6.Caption := nosel; end;
  //
17 апр 21, 13:07    [22310139]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Гаджимурадов Рустам
ъъъъъ
пропущено...
От таких мест нужно избавляться.

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

begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end



Что тут выкинуть?


begin
  if not () then
    Exit;

  while 
17 апр 21, 13:20    [22310145]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Сбоянил я смачно, да! :)
17 апр 21, 13:21    [22310147]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
bk0010
Гаджимурадов Рустам

Ну как ты от них избавишься?
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end


Что тут выкинуть?
Зачем выкидывать? Тут как раз все нормально: процедура выполняет одну задачу. Зачем ее искусственно рвать на куски? Нет, если память как у золотой рыбки или код не форматирован, то смысл есть, но в реальности-то зачем?

Для улучшения читабельности. Только для этого, и это очень важно.
17 апр 21, 13:24    [22310149]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
fraks
Гаджимурадов Рустам


fraks> Так же, для удобства, после end пишу от чего этот begin.

Только если длинные блоки (что уже плохо).
Отступы должны помогать, тем более щас IDE умеют
подсвечивать блоки (вот раньше проблема была, да).


У меня D7, там нету подсветки.

В Notepad++ и в Lazarus она есть, но не скажу что бы это как-то сильно помогало. Впрочем, я в них не работаю, только иногда запускаю.

Поискал у себя код с длинными лестницами, нашел вот такого вида. Есть и больше, но в единичных случаях, лень искать.

  // проверим есть ли в документе записи с кол-вом 0
  if not Fro then begin // если документ открыт не в режиме "Только для чтения"
    if CheckKolZero then begin // если есть позиции с кол=0
      if mrOk = MessageDlg('Удалить позиции с нулевым количеством?', mtConfirmation, mbOkCancel, 0) then begin
        // удалить пустые позиции
        QDel.ParamByName('ndok').AsInteger := Fndok;
        QDel.ParamByName('io'  ).AsString  := Fio;
        for i := 0 to CDS.Count-1 do begin
          if CDS.ReadIntegerFN(i, 'BTOV_KOL') = 0 then begin
            idtov := CDS.ReadIntegerFN(i, 'BTOV_IDTOV');
            QDel.ParamByName('idtov').AsInteger := idtov;
            Open_Query(QDel); // открытие с обработкой исключений и с сообщениями
            QDel.Transaction.Commit;
          end;//if
        end;//for
        F5_refresh;
      end;//if
    end;//if
  end;//if


[/SRC]
Это обычный говнокод. Первые 3 ифа выкидываются на с помощью Exit.
17 апр 21, 13:27    [22310150]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
fraks
Еще бывает что для компактности кода if с блоками растягиваю в одной строке

  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 0
  if Item_GoodMark1.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA1 := 0; Item_GoodMark1.Caption := nosel; end;
  if Item_GoodMark2.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA2 := 0; Item_GoodMark2.Caption := nosel; end;
  if Item_GoodMark3.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA3 := 0; Item_GoodMark3.Caption := nosel; end;
  if Item_GoodMark4.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA4 := 0; Item_GoodMark4.Caption := nosel; end;
  if Item_GoodMark5.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA5 := 0; Item_GoodMark5.Caption := nosel; end;
  if Item_GoodMark6.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA6 := 0; Item_GoodMark6.Caption := nosel; end;
  //
Это еще хуже, нужен else if везде, кроме первой строки.
17 апр 21, 13:30    [22310152]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
fraks> У меня D7, там нету подсветки.

CnPack есть, он умеет.

fraks> QDel.ParamByName('ndok').AsInteger := Fndok;
fraks> QDel.ParamByName('io' ).AsString := Fio;

Это тоже полезная привычка, да.

Posted via ActualForum NNTP Server 1.5

17 апр 21, 13:30    [22310153]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
softwarer

begin
  if not () then exit;
  while () do
  try
  except
  end;
end;

  if not () then exit;
А если там дальше ещё код после этого блока?
17 апр 21, 13:57    [22310161]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
defecator
ъъъъъ
пропущено...

В сях begin end в среднем в 4 раза короче, и нет тупости типа

 if x then
  XXX; // Ахтунг!
 else
  YYY; 



твой ахтунг в Дельфи не скомпилируется

Вот именно. Есть ";" перед else - ахтунг.
Нет "end" в конце модуля - ахтунг. Ладно, end в конце .dpr имеет свой begin. А в модуле-то он накуа?
Нет "." в конце модуля - ахтунг.
17 апр 21, 14:07    [22310166]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
alekcvp
А если там дальше ещё код после этого блока?

Второй раз за сегодняшнее утро пишу: именно поэтому я не ленюсь расставлять в примерах комментарии типа { ... длинный кусок кода ... }
17 апр 21, 14:07    [22310167]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
bk0010
Member

Откуда:
Сообщений: 5081
YuRock
Это обычный говнокод. Первые 3 ифа выкидываются на с помощью Exit.
Чем вам лесенка плоха? Логику видно, отлаживаться удобно...
17 апр 21, 14:10    [22310170]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
YuRock
Это еще хуже, нужен else if везде, кроме первой строки.

С чего бы там был нужен else if? Думаешь, два товара слететь не могут?

Скорее там нужен вопрос "а если этих гудсов не шесть, а сто двадцать шесть, так и будешь код масштабировать?"
17 апр 21, 14:11    [22310171]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
ъъъъъ
А в модуле-то он накуа?

Ты ещё спроси накуа он в декларации классов или записей, бегина-то тоже нет...
17 апр 21, 14:13    [22310175]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
Kazantsev Alexey
ъъъъъ
А в модуле-то он накуа?

Ты ещё спроси накуа он в декларации классов или записей, бегина-то тоже нет...

Бигин там есть. А в модуле - нет.
17 апр 21, 14:16    [22310179]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
ъъъъъ
Бигин там есть. А в модуле - нет.

В модуле тоже есть.
17 апр 21, 14:22    [22310180]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
Kazantsev Alexey
ъъъъъ
Бигин там есть. А в модуле - нет.

В модуле тоже есть.

Ахтунг сплошной.
17 апр 21, 14:33    [22310181]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
YuRock
fraks
Еще бывает что для компактности кода if с блоками растягиваю в одной строке

  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 0
  if Item_GoodMark1.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA1 := 0; Item_GoodMark1.Caption := nosel; end;
  if Item_GoodMark2.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA2 := 0; Item_GoodMark2.Caption := nosel; end;
  if Item_GoodMark3.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA3 := 0; Item_GoodMark3.Caption := nosel; end;
  if Item_GoodMark4.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA4 := 0; Item_GoodMark4.Caption := nosel; end;
  if Item_GoodMark5.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA5 := 0; Item_GoodMark5.Caption := nosel; end;
  if Item_GoodMark6.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA6 := 0; Item_GoodMark6.Caption := nosel; end;
  //
Это еще хуже, нужен else if везде, кроме первой строки.


Else тут не нужен нигде.
Каждая строка отвечает за свою настройку, независимо от других.
17 апр 21, 14:37    [22310184]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
YuRock
Это еще хуже, нужен else if везде, кроме первой строки.

С чего бы там был нужен else if? Думаешь, два товара слететь не могут?

Скорее там нужен вопрос "а если этих гудсов не шесть, а сто двадцать шесть, так и будешь код масштабировать?"

Там речь про выделение товаров цветом на основании вхождения товара в определенный список товаров.
Магическая цифра 6 - это ориентировочное количество цветов которые обычный человек достаточно безошибочно может различить по цвету. Цветов немного, даже меньше шести.
В данном случае используется 2 одинаковых цвета. Ранее было 5 настроек.
17 апр 21, 14:43    [22310186]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
Гаджимурадов Рустам
fraks> У меня D7, там нету подсветки.

CnPack есть, он умеет.


Я уже стар мозгами.
Если я как-то обошелся без лишних неведомых мне свистоперделок - значит оно мне и не нужно.

Гаджимурадов Рустам

fraks> QDel.ParamByName('ndok').AsInteger := Fndok;
fraks> QDel.ParamByName('io' ).AsString := Fio;

Это тоже полезная привычка, да.

Тут наверное было что-то умное, но я не понял.
Если не лень - распиши.
17 апр 21, 14:45    [22310187]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
YuRock
fraks
пропущено...


У меня D7, там нету подсветки.

В Notepad++ и в Lazarus она есть, но не скажу что бы это как-то сильно помогало. Впрочем, я в них не работаю, только иногда запускаю.

Поискал у себя код с длинными лестницами, нашел вот такого вида. Есть и больше, но в единичных случаях, лень искать.

  // проверим есть ли в документе записи с кол-вом 0
  if not Fro then begin // если документ открыт не в режиме "Только для чтения"
    if CheckKolZero then begin // если есть позиции с кол=0
      if mrOk = MessageDlg('Удалить позиции с нулевым количеством?', mtConfirmation, mbOkCancel, 0) then begin
        // удалить пустые позиции
        QDel.ParamByName('ndok').AsInteger := Fndok;
        QDel.ParamByName('io'  ).AsString  := Fio;
        for i := 0 to CDS.Count-1 do begin
          if CDS.ReadIntegerFN(i, 'BTOV_KOL') = 0 then begin
            idtov := CDS.ReadIntegerFN(i, 'BTOV_IDTOV');
            QDel.ParamByName('idtov').AsInteger := idtov;
            Open_Query(QDel); // открытие с обработкой исключений и с сообщениями
            QDel.Transaction.Commit;
          end;//if
        end;//for
        F5_refresh;
      end;//if
    end;//if
  end;//if


[/SRC]
Это обычный говнокод. Первые 3 ифа выкидываются на с помощью Exit.


Я не претендую на образцовый код.

> Первые 3 ифа выкидываются на с помощью Exit.

Я избегаю "испуганного программирования", кроме единственного случая который в этом треде уже упоминал.
Приведенный мной код - это только часть процедуры, Exit тут совсем не в тему.

Сообщение было отредактировано: 17 апр 21, 14:40
17 апр 21, 14:48    [22310188]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
fraks> Я уже стар мозгами. Если я как-то обошелся без лишних
fraks> неведомых мне свистоперделок - значит оно мне и не нужно.

Я знаю, но это неправильная, самоограничивающая логика.
Если что-то может повысить удобство - нужно попробовать.
Не понравится - выкинешь. Другое дело - лень, время и пр.

fraks> Тут наверное было что-то умное, но я не понял. Если не лень - распиши.

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

Posted via ActualForum NNTP Server 1.5

17 апр 21, 14:53    [22310191]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
Kazantsev Alexey> Ты ещё спроси накуа он в декларации
Kazantsev Alexey> классов или записей, бегина-то тоже нет...

Я бы, кстати, не был бы против, если бы его
когда-то назвали (или хотя переименовали)
из end в endclass, например.

Posted via ActualForum NNTP Server 1.5

17 апр 21, 14:54    [22310192]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Я бы, кстати, не был бы против, если бы его когда-то назвали (или хотя переименовали)
из end в endclass, например.

Это был бы такой же шаг в прошлое с его end if, end loop итп., как и "комментарии что завершает этот end".
17 апр 21, 14:59    [22310197]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
Я конечно тоже использую такой метод "испуганного программирования", но исключительно когда эта строка - первая и единственная такого рода в процедуре.

Это попытка остаться немножко беременной. Если такая строка хороша как первая в процедуре, отсюда по индукции следует, что она хороша и в других случаях.

fraks
Если такие убегания встречаются внутри, да еще неоднократно - это не есть хорошо.

Это есть хорошо. И точно всяко лучше, чем попытки обойтись без них.

Кстати, задай себе простой вопрос: используешь ли ты raise в середине процедур? Если да - значит кривишь душой, ибо это точно такое же убегание, только более масштабное. Если нет.... ну да, ну да, настоящие мастера исключений не используют. Только коды ошибок, только хардкор.
17 апр 21, 15:03    [22310199]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
fraks
Я уже стар мозгами.
Если я как-то обошелся без лишних неведомых мне свистоперделок - значит оно мне и не нужно.

Не, надо пробовать.
Я вот CNPack терпеть не могу: попробовал. Долго не пользовался GExperts, тоже пробовал ибо. Сейчас я Gexperts использую, т.к. в нем есть годный автоформаттер. Но всё остальное смело бы выкинул... хи, идея, вычистить Gexperts. :)
17 апр 21, 15:14    [22310201]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
Гаджимурадов Рустам

fraks> Тут наверное было что-то умное, но я не понял. Если не лень - распиши.

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


А, это да, это обязательно.
Все что можно выровнять - обязательно выровняю. Во многих случаях это сразу показывает где ошибка.
К сожалению, некоторые языки не позволяют такого. При написании bat-файлов очень не хватает такой возможности, выровнять при присвоении переменным по знаку =.
17 апр 21, 15:15    [22310202]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
Я конечно тоже использую такой метод "испуганного программирования", но исключительно когда эта строка - первая и единственная такого рода в процедуре.

Это попытка остаться немножко беременной. Если такая строка хороша как первая в процедуре, отсюда по индукции следует, что она хороша и в других случаях.


Категорически не согласен.

Характерный пример у меня - обработчик события из контекстного меню грида.
Если нет выделенной строки (фокус не выставлен или нет ни одной записи) то убегаем.
Сразу видно что процедура далее не будет выполняться.

Если убегание где-то в середине, да еще и не одно то это фигово т.к. нет места где производится "по окончании процедуры", ибо этих окончаний образуется целая куча. И при попытке дописать в процедуру еще одну обработку можем пролететь, ибо из нее вышли раньше.


softwarer
fraks
Если такие убегания встречаются внутри, да еще неоднократно - это не есть хорошо.

Это есть хорошо. И точно всяко лучше, чем попытки обойтись без них.


Не всегда попытки обойтись заканчиваются красиво, но множественные выходы - исключительная, крайняя мера, а не обычное решение.

softwarer
Кстати, задай себе простой вопрос: используешь ли ты raise в середине процедур? Если да - значит кривишь душой, ибо это точно такое же убегание, только более масштабное. Если нет.... ну да, ну да, настоящие мастера исключений не используют. Только коды ошибок, только хардкор.


Хм... для меня raise это примерно как транзакция. Где оно нужно - там оно нужно и это не вопрос красоты.

Сообщение было отредактировано: 17 апр 21, 15:19
17 апр 21, 15:22    [22310205]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
fraks
При написании bat-файлов очень не хватает такой возможности, выровнять при присвоении переменным по знаку =.

Используй PowerShell.
17 апр 21, 15:24    [22310206]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
ъъъъъ
fraks
Я уже стар мозгами.
Если я как-то обошелся без лишних неведомых мне свистоперделок - значит оно мне и не нужно.

Не, надо пробовать.
Я вот CNPack терпеть не могу: попробовал. Долго не пользовался GExperts, тоже пробовал ибо. Сейчас я Gexperts использую, т.к. в нем есть годный автоформаттер. Но всё остальное смело бы выкинул... хи, идея, вычистить Gexperts. :)

У меня установлен GExperts, с незапамятных времен.
С тех когда было не лень изучать что-то новое :)
Сейчас даже не могу сказать что именно оттуда использую, ибо все через шорткаты.

- Комментирование/расскоментирование блока строк.
- TODO List
- Procedure List

Форматтер не использую.
17 апр 21, 15:27    [22310211]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
ъъъъъ
fraks
При написании bat-файлов очень не хватает такой возможности, выровнять при присвоении переменным по знаку =.

Используй PowerShell.

PowerShell прикольная штука, но это нужно дополнительно изучать, и плюс там проблемка с запуском скрипта.
Если все по феншую то скрипт должен иметь подпись чтобы запускаться.
Или нужно полностью отключить защиту от запуска.
Отключить что-то меня стремает, а подписывать - какая-то очень непростая песня, решил что пока обойдусь.
17 апр 21, 15:32    [22310212]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
fraks
ъъъъъ
пропущено...

Используй PowerShell.

PowerShell прикольная штука, но это нужно дополнительно изучать, и плюс там проблемка с запуском скрипта.
Если все по феншую то скрипт должен иметь подпись чтобы запускаться.
Или нужно полностью отключить защиту от запуска.
Отключить что-то меня стремает, а подписывать - какая-то очень непростая песня, решил что пока обойдусь.

Ага, а bat - файлы неподписанные не стремает...
17 апр 21, 15:44    [22310216]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
Категорически не согласен.

Да наздоровье. Просто это несогласие чисто эмоциональной природы, без опоры на факты.

fraks
Характерный пример у меня - обработчик события из контекстного меню грида.
Если нет выделенной строки (фокус не выставлен или нет ни одной записи) то убегаем.
Сразу видно что процедура далее не будет выполняться.

Теперь с позиций этого рассуждения раскритикуй вот этот код и расскажи, чем ужасен выход из второй строки:

  function ProcessMultiRowSelect(ColIndex: integer): variant;
  var Cnt, i: integer;
  begin
    Cnt := GridView.Controller.SelectedRecordCount;
    if Cnt <= 0 then exit(Unassigned);
    Result := VarArrayCreate([0, Cnt - 1], varVariant);
    for i := 0 to Cnt - 1 do
      Result[i] := GridView.Controller.SelectedRecords[i].Values[ColIndex];
    Form.ModalResult := mrOK;
  end;

fraks
И при попытке дописать в процедуру еще одну обработку можем пролететь

При любом дописывании в процедуру можно пролететь. Поэтому нужно думать, что и куда дописываешь, проверять корректность. Множественные точки выхода здесь ничего не меняют, тем более, как мы уже выяснили, они у тебя по факту всё равно есть - через raise.

"Единая точка выхода" - это рудимент теории структурного программирования, смысл которого с тех пор потерялся. Когда об этом писал Дейкстра, под этим имелось в виду следующее: в середине структурного блока не должно быть GOTO куда-то в другие части программы. То есть не должно быть так, что из блока ты можешь уйти в A, в Б, в В и в Г, точка выхода должна быть одна. exit - это всего лишь goto на последний end процедуры. То есть конструкции

Первая
procedure X;
begin
  ....
  if условие then
  begin
    ...
  end;
end;
вторая
procedure X;
label exit:
begin
  ....
  if not условие then goto exit;
  ...
  exit:
end;
и третья
procedure X;
begin
  ....
  if not условие then exit;
  ...
end;


полностью эквиваленты и соответствуют подходу структурного программирования. Просто третья из них наиболее читаемая и удобная для восприятия.

fraks
Хм... для меня raise это примерно как транзакция. Где оно нужно - там оно нужно и это не вопрос красоты.

Это же верно и для других конструкций, в том числе exit.

Сообщение было отредактировано: 17 апр 21, 15:40
17 апр 21, 15:47    [22310217]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
fraks
softwarer
пропущено...

begin
  if not () then exit;
  ...
end;


Я конечно тоже использую такой метод "испуганного программирования", но исключительно когда эта строка - первая и единственная такого рода в процедуре


а я очень сильно люблю именно этот метод.
позволяет избавиться от излишней вложенности условий

Сразу отсёк на входе в подпрограмму то, что не соответствует условиям,
и пишешь только функциональный код
17 апр 21, 15:58    [22310218]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
bk0010
YuRock
Это обычный говнокод. Первые 3 ифа выкидываются на с помощью Exit.
Чем вам лесенка плоха? Логику видно, отлаживаться удобно...
Никакого видно и удобно там нет, есть именно лишняя лесенка.
17 апр 21, 16:06    [22310221]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
defecator
а я очень сильно люблю именно этот метод. позволяет избавиться от излишней вложенности условий. Сразу отсёк на входе в подпрограмму то, что не соответствует условиям, и пишешь только функциональный код

Любовь к этому методу появляется у тех, кто достаточно повозился со сложными и запутанными условиями, задолбался править вызванные ими баги и начал ценить упрощение и даваемые им блага.
17 апр 21, 16:08    [22310222]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
softwarer
YuRock
Это еще хуже, нужен else if везде, кроме первой строки.

С чего бы там был нужен else if? Думаешь, два товара слететь не могут?
Если так - то да. Но это еще хуже, значит нужен массив и цикл.
17 апр 21, 16:08    [22310223]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
fraks
YuRock
пропущено...
Это еще хуже, нужен else if везде, кроме первой строки.


Else тут не нужен нигде.
Каждая строка отвечает за свою настройку, независимо от других.
Я понял уже. Значит, нужен цикл по контролам, используя свойство Tag.
17 апр 21, 16:09    [22310224]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
fraks
Приведенный мной код - это только часть процедуры
Это вторая проблема (если не первая)
17 апр 21, 16:11    [22310225]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
К сожалению весь код Delphi без использования Exit и с лишними begin/end
DelphiМогло бы быть
procedure TCustomForm.SetWindowMenu(Value: TMenuItem);
begin
  if FWindowMenu <> Value then
  begin
    FWindowMenu := Value;
    if Value <> nil then Value.FreeNotification(Self);
    RefreshMDIMenu;
  end;
end;
procedure TCustomForm.SetWindowMenu(Value: TMenuItem);
begin
  if FWindowMenu = Value then Exit;
  FWindowMenu := Value;
  if Value <> nil then Value.FreeNotification(Self);
  RefreshMDIMenu;
end;
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition <> Value then
  begin
    FPosition := Value;
    if not (csDesigning in ComponentState) then RecreateWnd;
  end;
end;
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition = Value then Exit;
  FPosition := Value;
  if not (csDesigning in ComponentState) then RecreateWnd;
end;
procedure TCustomForm.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if FCanvas <> nil then
  begin
    FCanvas.Brush.Color := Color;
    Perform(CM_BORDERCHANGED, 0, 0);
  end;
end;
procedure TCustomForm.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if FCanvas = nil then Exit;
  FCanvas.Brush.Color := Color;
  Perform(CM_BORDERCHANGED, 0, 0);
end;
17 апр 21, 16:13    [22310226]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
YuRock
Значит, нужен цикл по контролам, используя свойство Tag.

Так будет ещё хуже. А нужно там тривиальное

CheckReset(Item_GoodMark1, CFG.LT_GoodsMark_ID_LTA1);
CheckReset(Item_GoodMark2, CFG.LT_GoodsMark_ID_LTA2);
CheckReset(Item_GoodMark3, CFG.LT_GoodsMark_ID_LTA3);
CheckReset(Item_GoodMark4, CFG.LT_GoodsMark_ID_LTA4);
CheckReset(Item_GoodMark5, CFG.LT_GoodsMark_ID_LTA5);
CheckReset(Item_GoodMark6, CFG.LT_GoodsMark_ID_LTA6);

Это если не задаваться вопросом о том, что для "шести одинаковых по сути фрагментов" следует использовать решения, поддерживающие множественность.
17 апр 21, 16:18    [22310227]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
rgreat
Member

Откуда:
Сообщений: 6711
DimaBr,

Ага, Exit, Break и Continue отлично сокращает лесенки.

Но надо быть аккуратным в использовании.
17 апр 21, 16:21    [22310228]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
YuRock
fraks
пропущено...
Else тут не нужен нигде.
Каждая строка отвечает за свою настройку, независимо от других.
Я понял уже. Значит, нужен цикл по контролам, используя свойство Tag.


Эээээ. я совсем перестал понимать что такое хорошо.
Зачем мне цикл по N контролам на форме, причем увидеть что конкретно в этот цикл попадет - весьма непросто,
вместо 6 одинаковых строк с прямыми ссылками на контролы, из которых все очевидно?

Если можно сделать просто кодом, без визуальщины - так и нужно сделать. Меньше потенциальных глюков.
17 апр 21, 16:28    [22310232]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
softwarer
YuRock
Значит, нужен цикл по контролам, используя свойство Tag.

Так будет ещё хуже. А нужно там тривиальное

CheckReset(Item_GoodMark1, CFG.LT_GoodsMark_ID_LTA1);
CheckReset(Item_GoodMark2, CFG.LT_GoodsMark_ID_LTA2);
CheckReset(Item_GoodMark3, CFG.LT_GoodsMark_ID_LTA3);
CheckReset(Item_GoodMark4, CFG.LT_GoodsMark_ID_LTA4);
CheckReset(Item_GoodMark5, CFG.LT_GoodsMark_ID_LTA5);
CheckReset(Item_GoodMark6, CFG.LT_GoodsMark_ID_LTA6);


Это, конечно, улучшит ситуацию на 17% :)
17 апр 21, 16:28    [22310233]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
DimaBr
К сожалению весь код Delphi без использования Exit и с лишними begin/end

В 94-м году я тоже писал "без exit и с лишними begin/end". Мир развивается.

P.S. Впрочем, сейчас заглянул в исходники конца 80-х - в части случаев уместные exit я использовал и тогда.
17 апр 21, 16:28    [22310234]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
defecator
а я очень сильно люблю именно этот метод. позволяет избавиться от излишней вложенности условий. Сразу отсёк на входе в подпрограмму то, что не соответствует условиям, и пишешь только функциональный код

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

Именно.
Все эти простые варианты просты пока не наступит пора их переделать.
При переделке вся эта простота оборачивается необходимостью переписать всю логику по новой, но уже на нормальных условиях, без бегства.
17 апр 21, 16:30    [22310235]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
ъъъъъ
fraks
пропущено...

PowerShell прикольная штука, но это нужно дополнительно изучать, и плюс там проблемка с запуском скрипта.
Если все по феншую то скрипт должен иметь подпись чтобы запускаться.
Или нужно полностью отключить защиту от запуска.
Отключить что-то меня стремает, а подписывать - какая-то очень непростая песня, решил что пока обойдусь.

Ага, а bat - файлы неподписанные не стремает...

Ну да, есть такое двоемыслие :)
У нас еще довольно много машинок под WnXP где этого PowerShell нету.
17 апр 21, 16:33    [22310238]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks,

сказочник
17 апр 21, 16:36    [22310240]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
YuRock
Значит, нужен цикл по контролам, используя свойство Tag.

Так будет ещё хуже. А нужно там тривиальное

CheckReset(Item_GoodMark1, CFG.LT_GoodsMark_ID_LTA1);
CheckReset(Item_GoodMark2, CFG.LT_GoodsMark_ID_LTA2);
CheckReset(Item_GoodMark3, CFG.LT_GoodsMark_ID_LTA3);
CheckReset(Item_GoodMark4, CFG.LT_GoodsMark_ID_LTA4);
CheckReset(Item_GoodMark5, CFG.LT_GoodsMark_ID_LTA5);
CheckReset(Item_GoodMark6, CFG.LT_GoodsMark_ID_LTA6);

Это если не задаваться вопросом о том, что для "шести одинаковых по сути фрагментов" следует использовать решения, поддерживающие множественность.


Это нормальный вариант. Если случиться переделать - буду в этом направлении двигаться.

Множественность вообще и множественность по сильно ограниченному множеству - не всегда есть смысл связываться с множеством.
Здесь одна только попытка перебрать контролы убъет весь смысл.

Сообщение было отредактировано: 17 апр 21, 16:37
17 апр 21, 16:45    [22310242]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
YuRock
softwarer
пропущено...

Так будет ещё хуже. А нужно там тривиальное

CheckReset(Item_GoodMark1, CFG.LT_GoodsMark_ID_LTA1);
CheckReset(Item_GoodMark2, CFG.LT_GoodsMark_ID_LTA2);
CheckReset(Item_GoodMark3, CFG.LT_GoodsMark_ID_LTA3);
CheckReset(Item_GoodMark4, CFG.LT_GoodsMark_ID_LTA4);
CheckReset(Item_GoodMark5, CFG.LT_GoodsMark_ID_LTA5);
CheckReset(Item_GoodMark6, CFG.LT_GoodsMark_ID_LTA6);


Это, конечно, улучшит ситуацию на 17% :)

А цикл по Tag несомненно улучшит и работу и читабельность на 100%.

Сообщение было отредактировано: 17 апр 21, 16:39
17 апр 21, 16:47    [22310243]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
не всегда есть смысл связываться с множеством

Наличие

CFG.LT_GoodsMark_ID_LTA1
CFG.LT_GoodsMark_ID_LTA2
CFG.LT_GoodsMark_ID_LTA3
CFG.LT_GoodsMark_ID_LTA4
CFG.LT_GoodsMark_ID_LTA5
CFG.LT_GoodsMark_ID_LTA6

означает, что любой работающий с ними код будет иметь тенденцию к шестикратному копированию. А это - очень существенный аргумент в пользу того, чтобы сразу от такого уйти. Потому что если я, допустим, в случае чего придумаю, как без этого обойтись, то добрая половина разработчиков на голубом глазу возьмёт фрагмент строк в пятьдесят и откопирует его пять раз, меняя в нём CFG.LT_GoodsMark_ID_LTA1 на CFG.LT_GoodsMark_ID_LTA2...
17 апр 21, 16:57    [22310245]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
не всегда есть смысл связываться с множеством

Наличие

CFG.LT_GoodsMark_ID_LTA1
CFG.LT_GoodsMark_ID_LTA2
CFG.LT_GoodsMark_ID_LTA3
CFG.LT_GoodsMark_ID_LTA4
CFG.LT_GoodsMark_ID_LTA5
CFG.LT_GoodsMark_ID_LTA6

означает, что любой работающий с ними код будет иметь тенденцию к шестикратному копированию. А это - очень существенный аргумент в пользу того, чтобы сразу от такого уйти. Потому что если я, допустим, в случае чего придумаю, как без этого обойтись, то добрая половина разработчиков на голубом глазу возьмёт фрагмент строк в пятьдесят и откопирует его пять раз, меняя в нём CFG.LT_GoodsMark_ID_LTA1 на CFG.LT_GoodsMark_ID_LTA2...

В данном месте 50 элементов невозможно принципиально, я уже писАл, это цветА.
Перебрать контролы в виде множества - отдельная заморочка.
В данном случае проще делать именно так, поименные переменные в конфиге.
Я единственный разработчик этого продукта.
17 апр 21, 17:04    [22310246]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
В данном месте 50 элементов невозможно принципиально, я уже писАл, это цветА

Шестикратное копирование - уже достаточно плохо.

fraks
Я единственный разработчик этого продукта.

Не факт, что так сохранится навечно.
17 апр 21, 17:07    [22310247]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
означает, что любой работающий с ними код будет иметь тенденцию к шестикратному копированию.

У нас на работе есть питонист, самостоятельно переучившийся из 1С-ника.
Он любитель хардкодить частные случаи, из чего проистекает то что любой код у него в единственном экземпляре.
Одинаковых баз у нас штук 10, но справочники в каждой - свои.
Бэкапов не любит, системы контроля версий не использует вообще.
Вот это - проблема.
17 апр 21, 17:10    [22310248]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
В данном месте 50 элементов невозможно принципиально, я уже писАл, это цветА

Шестикратное копирование - уже достаточно плохо.

Переделки этого кода не сулят никаких выгод.

softwarer
fraks
Я единственный разработчик этого продукта.

Не факт, что так сохранится навечно.

Я не в ответе за чужие ошибки в будущем.
17 апр 21, 17:13    [22310250]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
Я не в ответе за чужие ошибки в будущем.

Не в ответе. Но код, который уберегает от ошибок, качественнее, чем код, который к ним подталкивает.
17 апр 21, 17:21    [22310253]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> Это был бы такой же шаг в прошлое с его end if, end loop итп.

Всему надо знать меру, необязательно от
EndClass-a прыгать на EndIf и EndLoop. :)

Понятно, что это малоактуально, но если
бы был "код методов прямо в декларации" -
было бы гораздо более актуально. :)

Posted via ActualForum NNTP Server 1.5

17 апр 21, 17:29    [22310256]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
Я не в ответе за чужие ошибки в будущем.

Не в ответе. Но код, который уберегает от ошибок, качественнее, чем код, который к ним подталкивает.

Если приведешь пример кода, может быть я бы понял о чем речь. Пока что мне видится что любой перевод в N-мерность только усложнит и увеличит количество кода, и приведет к необходимости контролировать это самое N (границы).
17 апр 21, 17:30    [22310257]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Всему надо знать меру, необязательно от EndClass-a прыгать на EndIf и EndLoop. :)

Но их история побуждает не прыгать и к end class.

Гаджимурадов Рустам
Понятно, что это малоактуально, но если бы был "код методов прямо в декларации" -
было бы гораздо более актуально.

Да. И по этой причине мне не нравится тенденция напихивать в декларации классов всякие хрени в java-стиле. Лучше сохранять компактные декларации классов, при которых достаточно end.

Вот, кстати, чего мне действительно не хватает, так это возможности объявить в interface секции только часть класса, а кучу технических деталей убрать в implementation. Что-то вроде partial классов в .net.
17 апр 21, 17:38    [22310260]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
Если приведешь пример кода, может быть я бы понял о чем речь.

Имхо, в тот момент, когда ты писал эти строки в CFG, стоило остановиться и сделать их, например, массивом.
17 апр 21, 17:42    [22310262]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
Если приведешь пример кода, может быть я бы понял о чем речь.

Имхо, в тот момент, когда ты писал эти строки в CFG, стоило остановиться и сделать их, например, массивом.

И как потом к ним обращаться?
Вот конкретно этот код как будет выглядеть если параметры будут массивом?

  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 0
  if Item_GoodMark1.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA1 := 0; Item_GoodMark1.Caption := nosel; end;
  if Item_GoodMark2.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA2 := 0; Item_GoodMark2.Caption := nosel; end;
  if Item_GoodMark3.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA3 := 0; Item_GoodMark3.Caption := nosel; end;
  if Item_GoodMark4.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA4 := 0; Item_GoodMark4.Caption := nosel; end;
  if Item_GoodMark5.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA5 := 0; Item_GoodMark5.Caption := nosel; end;
  if Item_GoodMark6.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA6 := 0; Item_GoodMark6.Caption := nosel; end;


Сообщение было отредактировано: 17 апр 21, 17:44
17 апр 21, 17:50    [22310269]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
И как потом к ним обращаться?

Как к элементам массива.

fraks
Вот конкретно этот код как будет выглядеть если параметры будут массивом?

  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 0
  if Item_GoodMark1.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA1 := 0; Item_GoodMark1.Caption := nosel; end;
  if Item_GoodMark2.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA2 := 0; Item_GoodMark2.Caption := nosel; end;
  if Item_GoodMark3.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA3 := 0; Item_GoodMark3.Caption := nosel; end;
  if Item_GoodMark4.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA4 := 0; Item_GoodMark4.Caption := nosel; end;
  if Item_GoodMark5.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA5 := 0; Item_GoodMark5.Caption := nosel; end;
  if Item_GoodMark6.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA6 := 0; Item_GoodMark6.Caption := nosel; end;

Конкретно этот?

  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 0
  if Item_GoodMark1.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[1] := 0; Item_GoodMark1.Caption := nosel; end;
  if Item_GoodMark2.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[2] := 0; Item_GoodMark2.Caption := nosel; end;
  if Item_GoodMark3.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[3] := 0; Item_GoodMark3.Caption := nosel; end;
  if Item_GoodMark4.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[4] := 0; Item_GoodMark4.Caption := nosel; end;
  if Item_GoodMark5.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[5] := 0; Item_GoodMark5.Caption := nosel; end;
  if Item_GoodMark6.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[6] := 0; Item_GoodMark6.Caption := nosel; end;

Неужели без меня было сложно ответить на этот вопрос?
17 апр 21, 18:12    [22310277]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
И как потом к ним обращаться?

Как к элементам массива.

fraks
Вот конкретно этот код как будет выглядеть если параметры будут массивом?

  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 0
  if Item_GoodMark1.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA1 := 0; Item_GoodMark1.Caption := nosel; end;
  if Item_GoodMark2.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA2 := 0; Item_GoodMark2.Caption := nosel; end;
  if Item_GoodMark3.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA3 := 0; Item_GoodMark3.Caption := nosel; end;
  if Item_GoodMark4.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA4 := 0; Item_GoodMark4.Caption := nosel; end;
  if Item_GoodMark5.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA5 := 0; Item_GoodMark5.Caption := nosel; end;
  if Item_GoodMark6.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA6 := 0; Item_GoodMark6.Caption := nosel; end;

Конкретно этот?

  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 0
  if Item_GoodMark1.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[1] := 0; Item_GoodMark1.Caption := nosel; end;
  if Item_GoodMark2.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[2] := 0; Item_GoodMark2.Caption := nosel; end;
  if Item_GoodMark3.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[3] := 0; Item_GoodMark3.Caption := nosel; end;
  if Item_GoodMark4.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[4] := 0; Item_GoodMark4.Caption := nosel; end;
  if Item_GoodMark5.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[5] := 0; Item_GoodMark5.Caption := nosel; end;
  if Item_GoodMark6.Caption = '' then begin CFG.LT_GoodsMark_ID_LTA[6] := 0; Item_GoodMark6.Caption := nosel; end;

Неужели без меня было сложно ответить на этот вопрос?

Я думал что массив должен принести какую-то пользу, а принес один вред.
Где контроль границ массива?
Где инициализация этого массива?
Где сокращение кода, хотя бы в перспективе?
Количество строк такое же.
В чем смысл массива?

Я бы еще понял если бы у меня контролы в виде массива были, но ведь нет.

Код с конкретными переменными в большинстве случаев проверяется при компиляции. С массивом - неа, в рантайме извольте словить.

Сообщение было отредактировано: 17 апр 21, 18:22
17 апр 21, 18:21    [22310282]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
Я думал что массив должен принести какую-то пользу, а принес один вред.

И ты придумал эту фразу ещё до того, как задал вопрос

fraks
Где инициализация этого массива?

А где инициализация твоих переменных? Ты хоть какую-то логику пытаешься соблюсти?

fraks
Где сокращение кода, хотя бы в перпективе?

Везде. Скажем, если ты сохраняешь этот CFG в какой-нибудь ini-шник - на чтение и запись у них уйдёт по две строки вместо шести. Хотя как и в случае Рустама, количество строк - далеко не главный критерий, на который стоит опираться.

fraks
Количество строк такое же.
В чем смысл массива?

Смысл массива в том, что разработчик, когда начнёт писать подобные шесть строк - задумается и напишет получше.

fraks
Я бы еще понял если бы у меня контролы в виде массива были

И в чём проблема сделать их в виде массива? И, например, вместо шести строк ResetCodes, о которых шла речь выше, остаётся одна:

ResetCodes([Item_GoodMark1, Item_GoodMark2, Item_GoodMark3, Item_GoodMark4, Item_GoodMark5, Item_GoodMark6]);

fraks
Код с конкретными переменными в большинстве случаев проверяется при компиляции. С массивом - неа, в рантайме извольте словить.

Ты сам не первый час бьёшь себя пяткой в грудь о том, что их шесть, ровно шесть и никогда не будет иначе. Так какой тебе контроль нужен? Придумываешь "аргументы" без всякой логики, лишь бы звучали "весомо".

Сообщение было отредактировано: 17 апр 21, 18:25
17 апр 21, 18:32    [22310284]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
Я думал что массив должен принести какую-то пользу, а принес один вред.

И ты придумал эту фразу ещё до того, как задал вопрос

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

От массива вижу только лишние ненужные заморочки.

С массивами фиксированного размера работал последний раз наверное в еще в фортране.
17 апр 21, 19:03    [22310303]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
У меня первым пунктом идет понимание что любое действие должно приносить пользу.

И это понимание снабжено религиозной верой в то, где есть польза, а где нет. Например, выше я упомянул про сокращение кода - и, уверен, этот фактор моментально перестал быть для тебя полезным.

fraks
С массивами фиксированного размера работал последний раз наверное в еще в фортране.

(пожимая плечами) Ну, для данных фиксированного размера это довольно естественное решение. Но если хочешь, можешь с работать с массивами переменного размера или вообще не с массивами. Скажем, у меня часть свойств реализована как массивы с автодобавлением, бывает крайне удобно. Примерно так:

  
  ...
  protected
    function GetCell(ALine, ACol, AIndex: integer): integer;
    procedure SetCell(ALine, ACol, AIndex, AValue: integer);
    property Width[ALine, ACol: integer]: integer index 0 read GetCell write SetCell;
    property Carry[ALine, ACol: integer]: integer index 1 read GetCell write SetCell;
  ...

function TRulers.GetCell(ALine, ACol, AIndex: integer): integer;
begin
  Dec(ALine, MinLine);
  if (AIndex < Length(Cells)) and (ALine < Length(Cells[AIndex])) and (ACol < Length(Cells[AIndex][ALine]))
    then Result := Cells[AIndex][ALine][ACol]
    else Result := 0;
end;

procedure TRulers.SetCell(ALine, ACol, AIndex, AValue: integer);
begin
  Dec(ALine, MinLine);
  if Length(Cells) <= AIndex then SetLength(Cells, AIndex + 1);
  if Length(Cells[AIndex]) <= ALine then SetLength(Cells[AIndex], ALine + 1);
  if Length(Cells[AIndex][ALine]) <= ACol then SetLength(Cells[AIndex][ALine], ACol + 1);
  Cells[AIndex][ALine][ACol] := AValue;
end;
17 апр 21, 19:21    [22310308]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
если в правой части ещё и пустой строкой отделить,
то правая часть будет просто замечательной
а левая часть - УГ
DimaBr
К сожалению весь код Delphi без использования Exit и с лишними begin/end
DelphiМогло бы быть
procedure TCustomForm.SetWindowMenu(Value: TMenuItem);
begin
  if FWindowMenu <> Value then
  begin
    FWindowMenu := Value;
    if Value <> nil then Value.FreeNotification(Self);
    RefreshMDIMenu;
  end;
end;
procedure TCustomForm.SetWindowMenu(Value: TMenuItem);
begin
  if FWindowMenu = Value then Exit;

  FWindowMenu := Value;
  if Value <> nil then Value.FreeNotification(Self);
  RefreshMDIMenu;
end;
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition <> Value then
  begin
    FPosition := Value;
    if not (csDesigning in ComponentState) then RecreateWnd;
  end;
end;
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition = Value then Exit;

  FPosition := Value;
  if not (csDesigning in ComponentState) then RecreateWnd;
end;
procedure TCustomForm.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if FCanvas <> nil then
  begin
    FCanvas.Brush.Color := Color;
    Perform(CM_BORDERCHANGED, 0, 0);
  end;
end;
procedure TCustomForm.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if FCanvas = nil then Exit;

  FCanvas.Brush.Color := Color;
  Perform(CM_BORDERCHANGED, 0, 0);
end;
17 апр 21, 19:22    [22310309]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
defecator
если в правой части ещё и пустой строкой отделить, то правая часть будет просто замечательной

Вот с этим не соглашусь. Я считаю, что каждый раз, когда внутри подпрограммы хочется написать пустую строку - есть решение лучше. Чаще всего - это комментарий, но в данном случае они излишни. Приведённые Димой варианты лучше, и незачем портить их пустыми строками.
17 апр 21, 19:26    [22310310]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> Да. И по этой причине мне не нравится тенденция
softwarer> напихивать в декларации классов всякие хрени в java-стиле.
softwarer> Лучше сохранять компактные декларации классов

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

Posted via ActualForum NNTP Server 1.5

17 апр 21, 20:43    [22310340]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Иногда удобно всё вместе, без разделения на декларацию и реализацию.
В любом случае, лучше иметь возможность, чем не иметь её

К сожалению, не в любом.

Я был бы согласен с этим утверждением при условии, что с инструментом работают достаточно компетентные люди, которые не творят совсем уж глупостей. Но в ситуации, когда фича, с одной стороны, не даёт заметных преимуществ при грамотном использовании, а с другой - "заставь дурака богу молиться"... Лучше не давать фичи, главным и единственным результатом которой будут новые тонны говнокода.
17 апр 21, 21:13    [22310353]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2572
Гаджимурадов Рустам
Иногда удобно всё вместе, без разделения на декларацию и реализацию.
В любом случае, лучше иметь возможность, чем не иметь её (в т.ч. ту, о
которой говоришь ты).
+1
17 апр 21, 21:54    [22310379]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
softwarer
defecator
если в правой части ещё и пустой строкой отделить, то правая часть будет просто замечательной

Вот с этим не соглашусь. Я считаю, что каждый раз, когда внутри подпрограммы хочется написать пустую строку - есть решение лучше. Чаще всего - это комментарий, но в данном случае они излишни. Приведённые Димой варианты лучше, и незачем портить их пустыми строками.


ты что, экономишь строки ?
может, ты ещё и комментарии экономишь ????

Сообщение было отредактировано: 17 апр 21, 22:07
17 апр 21, 22:14    [22310385]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
fraks
под WnXP где этого PowerShell нету.

https://www.microsoft.com/ru-ru/download/details.aspx?id=16818
17 апр 21, 22:57    [22310409]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
defecator
ты что, экономишь строки ?

Я экономлю опрятность и читаемость кода. Пустая строка - отличный, хорошо видимый разделитель подпрограмм (ну или других деклараций). Использование её внутри программного блока - ничего не даёт (либо даёт экономию комментария, которому стоило бы стоять в этом месте), но снижает её ценность как визуального разделителя. У тех разработчиков, которые пихают пустые строки, я не раз и не два видел вообще чудесный вариант: внутри подпрограмм куча пустых строк, при этом между подпрограммами разделителей нередко нет. Вот уж за что бил бы кирпичом, так именно за это.

На всякий случай оговорюсь, что здесь я не имею в виду ассемблер, там зачастую фрагменты стоило разделять пустыми строками парой пустая строка - комментарий. Ну и пустые строки следует использовать в секции деклараций подпрограммы, если там есть вложенные подпрограммы.
17 апр 21, 23:02    [22310413]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
rgreat
Member

Откуда:
Сообщений: 6711
У меня пустая строка разделитель логических блоков внутри процедуры.
И наличие комментария не отменяет пользы пустой строки перед ним.

Между процедурами - 3 пустых строки.

Сообщение было отредактировано: 17 апр 21, 23:39
17 апр 21, 23:47    [22310427]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
Гаджимурадов Рустам
Иногда удобно всё вместе, без разделения на декларацию и реализацию.
В любом случае, лучше иметь возможность, чем не иметь её

Нет, эту возможность нужно запретить международной конвенцией, как антигуманную. За кодовой лапшой напрочь теряется интерфейс типа. Чтобы просто понять что делает класс, нужно втыкать, втыкать и втыкать во всё это безумие.
18 апр 21, 00:18    [22310429]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
Kazantsev Alexey
Гаджимурадов Рустам
Иногда удобно всё вместе, без разделения на декларацию и реализацию.
В любом случае, лучше иметь возможность, чем не иметь её

Нет, эту возможность нужно запретить международной конвенцией, как антигуманную. За кодовой лапшой напрочь теряется интерфейс типа. Чтобы просто понять что делает класс, нужно втыкать, втыкать и втыкать во всё это безумие.

Если реализация метода короткая - зачем её прятать черте-куда? Должна быть возможность сделать разумно для разработчика.

"Пусть расцветают сто цветов" - (с).
18 апр 21, 01:36    [22310444]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
Пример, кричащий: класс, реализующий интерфейс. Бессмысленное копирование из интерфейса декларации методов. Класс, возможно, расширяет интерфейс лишь одним-двумя методами. А ты поди отличи эти методы от всего мусора, подтянутого из интерфейса.
18 апр 21, 01:51    [22310445]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
ъъъъъ
Должна быть возможность сделать разумно для разработчика.

Благими намерениями... Будь такая возможность, короткими методами ограничиваться никто не будет (особенно, если точить некогда - пилить надо).

ъъъъъ
А ты поди отличи эти методы от всего мусора, подтянутого из интерфейса.

Отличить одно от другого, это уже потом, после того, как понял, что оно вообще делает. Давно взял за правило заключать реализацию интерфейсов в регионы.
18 апр 21, 02:20    [22310450]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
Kazantsev Alexey
Благими намерениями... Будь такая возможность, короткими методами ограничиваться никто не будет (особенно, если точить некогда - пилить надо).

Если не будут ограничиваться - значит, разработчики считают, что так делать правильно. Не нравится - не делай так. А если тебя заботят проблемы сопровождения чужого кода, то - "кто на что учился", и вообще, это проблема административная, а не техническая.

Когда-то создатель паскалей посчитали программистов несмышлеными идиотами, писающими под себя, и понаставили всюду квадратных колес и бессмысленных ограничений.
И в итоге, паскаль скатился до уровня ЯП для маргиналов.
18 апр 21, 02:43    [22310451]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
ъъъъъ
И в итоге, паскаль скатился до уровня ЯП для маргиналов.

Единственная причина того, что он скатился в эту позицию - то, что он хорошо получился у Борланда. Если бы Борланд вместо него написал крутой и замечательный Turbo C, весь мир бы сейчас работал на Visual Pascal.
18 апр 21, 03:04    [22310455]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
ъъъъъ
А если тебя заботят проблемы сопровождения чужого кода, то - "кто на что учился", и вообще, это проблема административная, а не техническая.

Проблемы в чужом болоте административно не решаются. Там своя администрация, со своим правильным видением.

ъъъъъ
Когда-то создатель паскалей посчитали программистов несмышлеными идиотами, писающими под себя, и понаставили всюду квадратных колес и бессмысленных ограничений.
И в итоге, паскаль скатился до уровня ЯП для маргиналов.

И в итоге появился сишарп. Fixed.
18 апр 21, 03:06    [22310456]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
Я бы еще понял если бы у меня контролы в виде массива были

И в чём проблема сделать их в виде массива? И, например, вместо шести строк ResetCodes, о которых шла речь выше, остаётся одна:

ResetCodes([Item_GoodMark1, Item_GoodMark2, Item_GoodMark3, Item_GoodMark4, Item_GoodMark5, Item_GoodMark6]);

Для меня такая строка нечитаема, не видно ни сколько в ней элементов, ни как они пронумерованы, ни какие там разделители.
Я бы записывал эту строку так:
ResetCodes([ Item_GoodMark1, 
             Item_GoodMark2, 
             Item_GoodMark3, 
             Item_GoodMark4, 
             Item_GoodMark5, 
             Item_GoodMark6 ]);

при этом она все равно остается неуклюжей.
18 апр 21, 07:08    [22310466]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
ъъъъъ
fraks
под WnXP где этого PowerShell нету.

https://www.microsoft.com/ru-ru/download/details.aspx?id=16818

Это дополнительный софт, он исходно не установлен.
Если можно написать нужное на cmd и в системе ничего не трогать - это нормально.
Так же иногда использую финт - если на cmd выходит слишком заморочно, по каким-то причинам, то просто пишу консольную микроулилитку на delphi и вызываю ее из cmd.
Никакого лишнего тяжелого софта, все подконтрольно.
18 апр 21, 07:13    [22310467]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
softwarer
fraks
У меня первым пунктом идет понимание что любое действие должно приносить пользу.

И это понимание снабжено религиозной верой в то, где есть польза, а где нет. Например, выше я упомянул про сокращение кода - и, уверен, этот фактор моментально перестал быть для тебя полезным.

fraks
С массивами фиксированного размера работал последний раз наверное в еще в фортране.

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

Я постоянно работаю с массивами переменного размера. Я давно отказался от попыток работать с DataSet, вместо которого у меня самодельный компонент представляющий из себя, по сути, динамический массив рекордов. Если природа данных имеет неопределенное количество элементов - то использую именно его, но при этом и интерфейсно, это отображается либо в гриде либо в крайнем случае в списке. И сохраняется такое в конфиг соответственно, циклом. В рассматриваемом моем примере интерфейсная часть - несколько именованных пунктов меню, поэтому, с учетом что количество этих элементов ограничено как и по смыслу так и чисто физически - нет смысла делать гигантские меню - применять тут массив смысла никакого нет.
18 апр 21, 07:26    [22310468]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
fraks
Для меня такая строка нечитаема, не видно ни сколько в ней элементов, ни как они пронумерованы, ни какие там разделители.

Да и незачем :) Достаточно понимать, что в ней все контролы этой группы. Впрочем, оформление здесь - не суть.

fraks
при этом она все равно остается неуклюжей.

Ну, если вспомнить, что идёт в качестве уклюжего варианта....
18 апр 21, 11:33    [22310504]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
rgreat
У меня пустая строка разделитель логических блоков внутри процедуры.
И наличие комментария не отменяет пользы пустой строки перед ним.

У меня так же.
rgreat
Между процедурами - 3 пустых строки.
А вот это я ненавижу, одной строки достаточно, и так все видно.
18 апр 21, 11:44    [22310508]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
fraks

Я бы записывал эту строку так:
ResetCodes([ Item_GoodMark1, 
             Item_GoodMark2, 
             Item_GoodMark3, 
             Item_GoodMark4, 
             Item_GoodMark5, 
             Item_GoodMark6 ]);


при этом она все равно остается неуклюжей.
Вот, как надо:
ResetCodes(
  [
    Item_GoodMark1, 
    Item_GoodMark2, 
    Item_GoodMark3, 
    Item_GoodMark4, 
    Item_GoodMark5, 
    Item_GoodMark6
  ]
);
18 апр 21, 11:49    [22310511]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> Я был бы согласен с этим утверждением при условии,
softwarer> что с инструментом работают достаточно компетентные
softwarer> люди, которые не творят совсем уж глупостей.

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

softwarer> Но в ситуации, когда фича, с одной стороны, не даёт
softwarer> заметных преимуществ при грамотном использовании

Ещё как даёт. Компактность, наглядность.


Kazantsev Alexey> За кодовой лапшой напрочь теряется интерфейс типа.
Kazantsev Alexey> Чтобы просто понять что делает класс, нужно втыкать,
Kazantsev Alexey> втыкать и втыкать во всё это безумие.

Я помню, что ты сторонник чистой декларации, да.
Автофолдинг спасёт нежелающих втыкать. :)

Posted via ActualForum NNTP Server 1.5

18 апр 21, 13:50    [22310539]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
YuRock> rgreat > Между процедурами - 3 пустых строки.
> А вот это я ненавижу, одной строки достаточно, и так все видно.


Это дело вкуса. Многие предваряют заголовок процедуры
// **** строкой комментария *** -
этого вполне достаточно, наглядно и пр.
Хорошее решение для всяких Лиспов и пр. скриптов.

Posted via ActualForum NNTP Server 1.5

18 апр 21, 13:52    [22310540]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
DimaBr
Member

Откуда:
Сообщений: 12091
А ещё встречаются такие варианты
Begin

End;
18 апр 21, 14:14    [22310548]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Гаджимурадов Рустам
Я и сам часто придерживаюсь подобного мнения, но можно ведь добавить запрет (опцию) этого на уровне проекта или директивы компилятора.

Во-первых, это никак не спасёт. Тот, кто собирается наплодить тонну говнокода - и опцию выставит. Ну а во-вторых, такие опции - в принципе плохое решение. Их можно принять, когда из языка убирается что-то плохое, но иногда нужна совместимость со старым кодом - как, например, когда убирали присвоения типизированным константам, но "новое плохое решение с опцией" ещё хуже, чем просто "новое плохое решение".

Гаджимурадов Рустам
Ещё как даёт. Компактность, наглядность.

Я достаточно поработал с языками, где это разрешено, и ни в своём коде, ни в коде других не ощутил пользы, выходящей за "вопрос вкусов". Когда на другой чаше весов объективный ощутимый вред... вкусы того не стоят, имхо.

Гаджимурадов Рустам
Это дело вкуса.

Не совсем. В разделителях должна быть логика. Если между процедурами делать три пустых строки - даже когда сама процедура состоит из трёх строк - значит, их же нужно делать между другими декларациями. Значит, их же нужно делать между вложенными процедурами (внутри которых, в свою очередь, будут сажать пустые строки). В итоге... думаю, код получится слишком уж разреженным. В том смысле, что слишком большая потеря площади экрана, считаемой в "непустых строках".

Гаджимурадов Рустам
Многие предваряют заголовок процедуры комментарием

Вот с этим согласен. Хорошая практика, близкая к обязательной. Хотя сволочное IDE здесь изрядно портит жизнь, поскольку просто обожает при автодополнении лепить новую процедуру между заголовком старой и относящимся к нему комментарием.
18 апр 21, 14:15    [22310549]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
DimaBr
А ещё встречаются такие варианты
Begin

End;

Это стиль восьмидесятых. Я тоже так писал года наверное до 87-го. Современный вариант удобнее, но и тот вполне адекватен. По сути это замена цветового выделения ключевых слов, и когда она появилась - от такого написания ушли.
18 апр 21, 14:18    [22310551]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
Гаджимурадов Рустам
Автофолдинг спасёт нежелающих втыкать. :)

Для автофолдинга нужна IDE. Я просматриваю чужой код (не только дельфийский, но и жабу и шарпы и плюсы), обычно, в far или mc. Вот, например, читать код оксидженовской rtl, которая написана в таком стиле, это ад, блин.
18 апр 21, 14:30    [22310559]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Гаджимурадов Рустам

Это дело вкуса. Многие предваряют заголовок процедуры
// **** строкой комментария ***.
Так я тоже иногда делаю, но не всегда, только когда надо описань какие-то неоднозначные на первый взгляд нюансы процедуры. Например, из каких потоков ее можно или нельзя вызывать (для методов), или описание хитрых параметров.
Но если всё однозначно, подводных камней нет - то и названия процедуры хватает, коммент не нужен.
18 апр 21, 16:05    [22310572]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
softwarer> Тот, кто собирается наплодить тонну говнокода - и опцию выставит.

Не всегда нужно ориентироваться на всяких ламеров и обезьян.
Да, это будет проблемой, но если ты с ними не сталкиваешься -
тьо и ущерба (тебе) не будет или будет неощутимо.

softwarer> Ну а во-вторых, такие опции - в принципе плохое решение.
softwarer> "новое плохое решение с опцией" ещё хуже, чем просто
softwarer> "новое плохое решение".

Это такое НЛП - сделать сомнительный постулат и отталкиваться
от него, как от истины. Плохое оно для тебя (и ещё для ламеров и
обезьян, которых ты так опасаешься), для других - может оказаться
полезным/удобным/хорошим в определённых ситуациях.

В любом случае, даже если добавить эту возможность, по дефолту
заблокированную - всё равно в массе большинство не сразу станет
её использовать, просто по тенденции.

> Я достаточно поработал с языками, где это разрешено

Ну т.е. в том же шарпе - это плохо и неудобно?

> Не совсем. В разделителях должна быть логика.

Какая ещё логика в разделителях?

softwarer> Если между процедурами делать три пустых строки -
softwarer> значит, их же нужно делать между другими декларациями.
softwarer> Значит, их же нужно делать между вложенными процедурами

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

> Хотя сволочное IDE здесь изрядно портит жизнь, поскольку
> просто обожает при автодополнении лепить новую процедуру
> между заголовком старой и относящимся к нему комментарием.

Это ты, видимо, про какой-то баг времён ХЕ2/ХЕ3 говоришь,
в старых версиях этого не наблюдалось, IIRC (насчёт новых -
не знаю, исправили или нет).

Posted via ActualForum NNTP Server 1.5

18 апр 21, 16:58    [22310580]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
Kazantsev Alexey> Для автофолдинга нужна IDE. Я просматриваю чужой код

Мы всё-таки про Delphi говорим и теоретизируем...
Даже в твоём случае - тот же NPP умеет фолдинг
(и автофолдинг сделать не рокет-саенс).

Posted via ActualForum NNTP Server 1.5

18 апр 21, 16:59    [22310581]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
Гаджимурадов Рустам
Мы всё-таки про Delphi говорим и теоретизируем...

Delphi 10.4.2 фолдит регионы:
Картинка с другого сайта.
Шёл 2021 год...
18 апр 21, 18:06    [22310595]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
bk0010
Member

Откуда:
Сообщений: 5081
softwarer
Единственная причина того, что он скатился в эту позицию - то, что он хорошо получился у Борланда. Если бы Борланд вместо него написал крутой и замечательный Turbo C, весь мир бы сейчас работал на Visual Pascal.
Не С, Бейсик. MS и Borland договорились прекратить развитие Quick Pascal и Turbo Basic соответственно.
18 апр 21, 18:20    [22310596]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
Kazantsev Alexey> Delphi 10.4.2 фолдит регионы:

О да, я с этим ещё в ХЕ3 натерпелся.
Само ужасное - что "это" может как
портить код, так и вылетать с AV.

Posted via ActualForum NNTP Server 1.5

18 апр 21, 19:11    [22310602]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5115
Гаджимурадов Рустам,

Мне она код не портила, но вот фолдить за всё время так и не научилась.
18 апр 21, 21:13    [22310635]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
Kazantsev Alexey> Мне она код не портила

Там "неточно" воспроизводимый, но довольно
стабильный баг, в результате которого в коде
(в тексте) возникала "визуальная" чехарда...

Малоприятная штука, если ты написал/изменил
пару десятков строк и не успел сохраниться -
сиди потом и вспоминай, где остановился...
Правда, старая ДОСовская привычка чуть-что
нажимать Ctrl+S по 5 раз в минуту спасает... :)

Posted via ActualForum NNTP Server 1.5

18 апр 21, 21:45    [22310648]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1690
YuRock
Вот, как надо:
ResetCodes(
  [
    Item_GoodMark1, 
    Item_GoodMark2, 
    Item_GoodMark3, 
    Item_GoodMark4, 
    Item_GoodMark5, 
    Item_GoodMark6
  ]
);
Так строчек жалко :)
Так я только запросы пишу.
19 апр 21, 07:10    [22310719]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 755
+ к пустым строкам для логического разделения
- к реализации в декларации - когда плюсы в универе проходили, поначалу нравилось, но это были лабораторки. На большом проекте размазывание только вносит сумятицу. На дельфях есть прямой read/write пропертей из внутренних полей, и хватит.
+ к "испуганному стилю" (крутое название :))
19 апр 21, 10:54    [22310799]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
bk0010
Member

Откуда:
Сообщений: 5081
Dmitry Arefiev
??
Если вы про это
[quot bk0010#22310596]
softwarer
Не С, Бейсик. MS и Borland договорились прекратить развитие Quick Pascal и Turbo Basic соответственно.
то напомню, что раньше MS повторяли все за Borland: Borland выпустит Turbo Basic, MS - Quick Basic (до этого у MS был классический GW-Basic с номерами строк и gosub), Borland выпустит Turbo Pascal, MS - Quick Pascal, Borland выпустит Turbo C, MS - Quick C, , Borland выпустит Quattro Pro, MS - Excel, , Borland купит DBase, MS - Fox и т.д. Только CodeView MS выпустила раньше, чем , Borland Turbo Debugger. Ну, или наоборот, Borland повторял за MS, сейчас уже непринципиально, даты искать неохота. Вот однажды и решили они "разойтись бортами": в области C было с десяток конкурентов, причем более продвинутых (Watcom и TopSpeed, например), а в Basic и Pascal конкурентов не то чтобы не было (Powerbasic был, например, или TopSpeed Pascal), но они были на вторых ролях. Вот и договорились они, что MS развивает Basic, а Borland - Pascal.
19 апр 21, 20:47    [22311238]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
Борланда уже сто лет как нет никакого. Что вы всё ковыряете засохшее.
19 апр 21, 21:03    [22311245]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
ъъъъъ
Борланда уже сто лет как нет никакого. Что вы всё ковыряете засохшее.

ну так ты же дельфи ковыряешь, а оно тоже засохшее
19 апр 21, 22:37    [22311268]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
rgreat
Member

Откуда:
Сообщений: 6711
defecator
ну так ты же дельфи ковыряешь, а оно тоже засохшее
Не все сидят на Дельфи 7.
19 апр 21, 22:56    [22311272]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ъъъъъ
Member

Откуда:
Сообщений: 2125
defecator
ъъъъъ
Борланда уже сто лет как нет никакого. Что вы всё ковыряете засохшее.

ну так ты же дельфи ковыряешь, а оно тоже засохшее

Мы тут все знатоки вкуса устриц.
20 апр 21, 11:53    [22311399]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
GunSmoker
Member

Откуда:
Сообщений: 3233
Опубликовали обновлённое руководство по стилевому оформлению кода Delphi.

В частности:
Statements
// CORRECT
  if A < B then 
  begin
    DoSomething; 
    DoSomethingElse;
  end 
  else 
  begin
    DoThis;
    DoThat;
  end;
29 апр 21, 19:37    [22316535]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
GunSmoker
Опубликовали обновлённое руководство по стилевому оформлению кода Delphi.

В частности:
Statements
// CORRECT
  if A < B then 
  begin
    DoSomething; 
    DoSomethingElse;
  end 
  else 
  begin
    DoThis;
    DoThat;
  end;

Ужасно. Логические блоки через три сторки. Ужасно-ужасно.
29 апр 21, 19:41    [22316538]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
  case x of
    csStart:
      begin
        j := UpdateValue;
      end;
    csBegin: x := j;
    csTimeOut:
      begin
        j := x;
        x := UpdateValue;
      end;    
  end;
      
  case ScrollCode of
    SB_LINEUP, SB_LINEDOWN:
      begin
        Incr := FIncrement div FLineDiv;
        FinalIncr := FIncrement mod FLineDiv;
        Count := FLineDiv;
      end;
    SB_PAGEUP, SB_PAGEDOWN:
      begin
        Incr := FPageIncrement;
        FinalIncr := Incr mod FPageDiv;
        Incr := Incr div FPageDiv;
        Count := FPageDiv;
      end;
    else
      Count := 0;
      Incr := 0;
      FinalIncr := 0;
    end;


Еще оттуда. Это что, шутка, или серьезно? Не хочу матюкаться и обзываться, так что ничего не скажу.
29 апр 21, 19:45    [22316540]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
YuRock
Еще оттуда. Это что, шутка, или серьезно? Не хочу матюкаться и обзываться, так что ничего не скажу.

Ну я бы блок else .. end на один уровень с case поставил, а в остальном что не так? Когда там begin-end присутствует - это самый удобный вариант, ИМХО.

Ну и когда однострочники идут вперемешку с блоками, то их тоже на отдельную строчку, да.

Сообщение было отредактировано: 29 апр 21, 20:27
29 апр 21, 20:35    [22316561]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 14667
alekcvp
Ну я бы блок else .. end на один уровень с case поставил, а в остальном что не так?
Читается не очень.
Во-первых, field-префиксы, равно как и прочие, лучше со строчной буквы писать.
Во вторых, когда одно- и много-строчные case-ы идут подряд, лучше пустые строки вставлять, иначе при беглом просмотре запросто можно пропустить что-то.
Ну и case-else я бы отступом делал, но это уже на любителя.

Сообщение было отредактировано: 29 апр 21, 21:08
29 апр 21, 21:16    [22316569]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
alekcvp
YuRock
Еще оттуда. Это что, шутка, или серьезно? Не хочу матюкаться и обзываться, так что ничего не скажу.

Ну я бы блок else .. end на один уровень с case поставил, а в остальном что не так? Когда там begin-end присутствует - это самый удобный вариант, ИМХО.

Ну и когда однострочники идут вперемешку с блоками, то их тоже на отдельную строчку, да.
Кроме этого, адо begin после двоеточия, а end - на уровень с меткой.
Зачем нужен этот дополнительный уровень с begin end? И так ведь лесенка case.
Необъяснимое уродство.
29 апр 21, 23:02    [22316597]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
YuRock
Зачем нужен этот дополнительный уровень с begin end?

Дополнительный уровень с begin/end удобен либо когда некоторые case-метки слишком длинны, либо когда в некоторых блоках достаточно большие (в смысле количества строк) и длинные (в смысле длины одной строки в символах) действия. Тогда такое форматирование по мне предпочтительно, иначе важные части логики оказываются "слишком справа".
29 апр 21, 23:23    [22316601]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6505
И все дружно забывают, что это ТОЛЬКО рекомендации. Давайте тогда обсудим, имеет ли право на жизнь конструкция типа:

 if ()  then
   BEGIN
      bla-bla
      if () then
         begin
               ....
         end
     else
        begin
                ....
        end
   END
ELSE
   ......
Я про микс заглавных и строчных, если что....
30 апр 21, 01:06    [22316619]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
DarkMaster
И все дружно забывают, что это ТОЛЬКО рекомендации. Давайте тогда обсудим, имеет ли право на жизнь конструкция типа:

 if ()  then
   BEGIN
      bla-bla
      if () then
         begin
               ....
         end
     else
        begin
                ....
        end
   END
ELSE
   ......

Я про микс заглавных и строчных, если что....
Кроме этого микса, еще и похоже на те кейсы из рекомендаций.
30 апр 21, 01:19    [22316623]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6505
YuRock,

Во всяком случае - более наглядно с отступами, как по мне...
30 апр 21, 01:54    [22316627]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2572
А мне нравиЦа!)) Сами практически так пишем
30 апр 21, 03:34    [22316633]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
ma1tus
Member

Откуда:
Сообщений: 789
white_nigger
А мне нравиЦа!)) Сами практически так пишем

За что вам отдельное cпасибо. Читать легко и приятно.
* А то, экономщики строчек, как наведут "красоту компактности", так и выискивай потом по диагоналям - к какому там begin относится этот end,
или ещё хужей позаботятся - намусорят комментариями "end; // for if | for for | for do"..
30 апр 21, 05:12    [22316638]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
zedxxx
Member

Откуда:
Сообщений: 93
ma1tus
* А то, экономщики строчек, как наведут "красоту компактности", так и выискивай потом по диагоналям - к какому там begin относится этот end

А подсветка синтаксиса на что? Правильный end же сам подсветится.
30 апр 21, 08:39    [22316669]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
zedxxx
ma1tus
* А то, экономщики строчек, как наведут "красоту компактности", так и выискивай потом по диагоналям - к какому там begin относится этот end

А подсветка синтаксиса на что? Правильный end же сам подсветится.

Ага, особенно когда тебе надо быстро посмотреть кусок кода без запуска среды, например на GitHub'e.
30 апр 21, 09:20    [22316675]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
DarkMaster> Давайте тогда обсудим, имеет ли право на жизнь конструкция типа:

Давайте обсудим.
1. Не имеет.
2. Где ты её увидел?

Posted via ActualForum NNTP Server 1.5

30 апр 21, 09:41    [22316685]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 755
GunSmoker
Опубликовали обновлённое руководство по стилевому оформлению кода Delphi.

Я так и пишу)
30 апр 21, 10:22    [22316715]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
Fr0sT-Brutal
GunSmoker
Опубликовали обновлённое руководство по стилевому оформлению кода Delphi.

Я так и пишу)
+1
Всё красиво. Но case c begin глаз режет. Имхо, так лучше
  case x of
    csStart:
    begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut:
    begin
      j := x;
      x := UpdateValue;
    end;    
  end;
30 апр 21, 11:09    [22316754]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
DarkMaster
И все дружно забывают, что это ТОЛЬКО рекомендации
Перед тем, как сходить в туалет рекомендуется снять трусы. Но это всего лишь рекомендация. Никто никого не заставляет))
30 апр 21, 11:15    [22316763]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Barmaley57
Fr0sT-Brutal
пропущено...

Я так и пишу)
+1
Всё красиво. Но case c begin глаз режет. Имхо, так лучше
  case x of
    csStart:
    begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut:
    begin
      j := x;
      x := UpdateValue;
    end;    
  end;
А еще лучше - так:
  case x of
    csStart: begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;    
  end;
30 апр 21, 11:39    [22316788]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
YuRock,

Вообще идеально. В смысле идеальный фарш. Сиди и одупляйся - где метки, где код, и к какому begin относится вот этот конкретный end.
30 апр 21, 11:48    [22316798]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Barmaley57
Member

Откуда: Москва
Сообщений: 5866
YuRock
А еще лучше - так:
  case x of
    csStart: begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;    
  end;
Не не не не не!!! (с) Зохан
30 апр 21, 12:10    [22316816]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
YuRock
А еще лучше - так:

Раз здесь соревнование троллей, то я, пожалуй, скажу, что лучше записать этот case в одну строку.
Хотя нет. Лучше в две.

Сообщение было отредактировано: 30 апр 21, 12:03
30 апр 21, 12:11    [22316818]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Близнец1980
Member

Откуда:
Сообщений: 100
А как вам это:
case x of
  csStart  : begin
               j := UpdateValue;
             end;
  csBegin  : x := j;
  csTimeOut: begin
               j := x;
               x := UpdateValue;
             end;
else
   j := x+1;
end;
30 апр 21, 12:20    [22316822]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
zedxxx
Member

Откуда:
Сообщений: 93
  case x of
    csStart: begin
      j := UpdateValue;
    end;

    csBegin: begin  
      x := j;
    end;

    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;    
  end;
30 апр 21, 12:21    [22316824]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1326
Barmaley57
Fr0sT-Brutal
пропущено...

Я так и пишу)
+1
Всё красиво. Но case c begin глаз режет. Имхо, так лучше
  case x of
    csStart:
    begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut:
    begin
      j := x;
      x := UpdateValue;
    end;    
  end;

В варианте рекомендации лучше видны разные варианты case, тут их выискивать в тексте нужно, а там сразу видны.
30 апр 21, 12:25    [22316828]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
L_argo
Member

Откуда:
Сообщений: 1475
Близнец1980
А как вам это:
case x of
  csStart  : begin
               j := UpdateValue;
             end;
  csBegin  : x := j;
  csTimeOut: begin
               j := x;
               x := UpdateValue;
             end;
else
   j := x+1;
end;
Самый читабельный вариант, ИМХО. И для одного оператора я бы не делал бегин/энд.
30 апр 21, 12:30    [22316830]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Близнец1980
А как вам это:

Один из лучших вариантов. Разве что else я делаю тоже с отступом. Но как я уже говорил, этот вариант неудачен в случае

case x of
  csFirst, csSecond, csThird..csFouth, csFifth: ...


Сообщение было отредактировано: 30 апр 21, 12:22
30 апр 21, 12:30    [22316831]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Близнец1980
Member

Откуда:
Сообщений: 100
softwarer
Один из лучших вариантов. Разве что else я делаю тоже с отступом. Но как я уже говорил, этот вариант неудачен в случае

case x of
  csFirst, csSecond, csThird..csFouth, csFifth: ...


Можно ведь так, что-бы далеко не убегало:
    case x of
       csFirst,
       csSecond,
       csThird,
       csFifth  : ...
30 апр 21, 12:52    [22316837]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Близнец1980
Можно ведь так, что-бы далеко не убегало:

Можно. Но по мне, в этом случае

case x of
  csFirst, csSecond, csThird..csFouth, csFifth:
    ...

значительно лучше.

Сообщение было отредактировано: 30 апр 21, 12:48
30 апр 21, 12:56    [22316840]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
alekcvp
YuRock,

Вообще идеально. В смысле идеальный фарш. Сиди и одупляйся - где метки, где код, и к какому begin относится вот этот конкретный end.
Тут как раз не надо отдупляться, тут всего два уровня - меток и кода.
end - всегда под меткой.
Выло бы else - это была бы еще как одна метка.

  case x of
    csStart: begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;
    else begin
      j := x;
      x := 2 * UpdateValue;
    end;    
  end;


Идеально. Никакой лапши, как в вариантах выше.
30 апр 21, 13:44    [22316879]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Близнец1980
А как вам это:
case x of
  csStart  : begin
               j := UpdateValue;
             end;
  csBegin  : x := j;
  csTimeOut: begin
               j := x;
               x := UpdateValue;
             end;
else
   j := x+1;
end;
Намного лучше, чем трёхуровневая лапша. Здесь по прежнему 2 уровня.
Неясно только, почему перед else нет двух пробелов, ну да ладно, и так всё видно.
30 апр 21, 13:46    [22316884]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
zedxxx
  case x of
    csStart: begin
      j := UpdateValue;
    end;

    csBegin: begin  
      x := j;
    end;

    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;    
  end;
Нормально. Хотя и две пустые строки - на любителя, но вполне, и намного лучше, чем begin с новой строки и с нового уровня.
30 апр 21, 13:47    [22316887]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Близнец1980
softwarer
Один из лучших вариантов. Разве что else я делаю тоже с отступом. Но как я уже говорил, этот вариант неудачен в случае

case x of
  csFirst, csSecond, csThird..csFouth, csFifth: ...



Можно ведь так, что-бы далеко не убегало:
    case x of
       csFirst,
       csSecond,
       csThird,
       csFifth  : ...
+++
Я так всегда делаю.
30 апр 21, 13:49    [22316888]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 755
У меня всегда begin с новой строки. Кроме случаев, когда короткие блоки в одну строчку
30 апр 21, 14:44    [22316928]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Fr0sT-Brutal
У меня всегда begin с новой строки.
Не всегда. В паскале достаточно конструкций, где нет begin, но есть end. Типа class, case, record, try...
Они, наверно, портят твой код, ведь такие блоки начинается не после доп. строки begin, а сразу. Или ты в таких случаях пустую строку добавляешь для единообразия с комментарием //begin?
30 апр 21, 14:52    [22316933]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
YuRock
Типа class, case, record, try...
Они, наверно, портят твой код, ведь такие блоки начинается не после доп. строки begin, а сразу. Или ты в таких случаях пустую строку добавляешь для единообразия с комментарием //begin?

Там само ключевое слово вместо begin.
30 апр 21, 15:20    [22316950]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
YuRock
Fr0sT-Brutal> У меня всегда begin с новой строки.
Не всегда. В паскале достаточно конструкций, где нет begin, но есть end.

А - Логика. Почему А? Потому что Альтернативная.

Posted via ActualForum NNTP Server 1.5

30 апр 21, 15:22    [22316954]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
alekcvp
YuRock
Типа class, case, record, try...
Они, наверно, портят твой код, ведь такие блоки начинается не после доп. строки begin, а сразу. Или ты в таких случаях пустую строку добавляешь для единообразия с комментарием //begin?

Там само ключевое слово вместо begin.
Вот говорят, отделяют begin, чтобы видно было, к какому begin относится end.
А оказывается, что begin далеко не во всех блоках есть, и в этих случаях понятно, к чему относится end )))

А на самом деле всё просто - все блоки заканчиваются end (и тут есть исключение - repeat until, ну ладно), и не надо видеть, где там begin, чтобы всё было наглядно. То, что end - это конец блока - видно всегда и всем, при нормальном структурировании без лишних уровней в виде лапши.
30 апр 21, 15:40    [22316969]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Гаджимурадов Рустам
YuRock
Fr0sT-Brutal> У меня всегда begin с новой строки.
Не всегда. В паскале достаточно конструкций, где нет begin, но есть end.

А - Логика. Почему А? Потому что Альтернативная.
Ну да, я живу в такой реальности: мне кажется, что запутаться в двух уровнях структурирования сложнее, чем в трёх уровнях.
Кто живёт в другой реальности - пожалуйста, я ж не против.
30 апр 21, 15:42    [22316971]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
YuRock
То, что end - это конец блока - видно всегда и всем, при нормальном структурировании без лишних уровней в виде лапши.

Когда кейз структурирован как лапша выше - не видно где начинается конретный блок. Потому что перед ним может идти несколько однострочников без end.
30 апр 21, 19:53    [22317072]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
alekcvp
YuRock
То, что end - это конец блока - видно всегда и всем, при нормальном структурировании без лишних уровней в виде лапши.

Когда кейз структурирован как лапша выше - не видно где начинается конретный блок. Потому что перед ним может идти несколько однострочников без end.
Всегда видно, если есть отступ в два пробела.
30 апр 21, 20:11    [22317075]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
YuRock> Ну да, я живу в такой реальности

Перечитай ещё раз внимательно, что и на что ты отвечал.
Но да, проще продолжать упорствовать и вещать про уровни.

Posted via ActualForum NNTP Server 1.5

1 май 21, 11:03    [22317164]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
JayDi
Member

Откуда: Сызрань, Россия
Сообщений: 4195
Откровенно говоря волосы на голове шевелились, когда читал этот топик. Есть же стандарт форматирования делфи-кода (что от самой эмбаркадеры, что от каких-нибудь jvcl -- разница минимальна). Но народ все-равно упорно отказывается его соблюдать, и каждый придумывает свой собственный стиль. Зачем?
1 май 21, 12:39    [22317188]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 852
JayDi,

если было бы всё так просто. В так называемом стандарте форматирования кода от самой эмбы нет ни слова об использовании допустим тех же {$REGION} или той же XML-документации. Хотя сама же Эмба в новых модулях их использует, причем одни модули оформлены в одном стиле, в других в другом и т.д.
1 май 21, 12:44    [22317189]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
rgreat
Member

Откуда:
Сообщений: 6711
JayDi
каждый придумывает свой собственный стиль. Зачем?

Потому что это вкусовщина.
1 май 21, 12:57    [22317193]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 852
вот пример требования из Object Pascal Style Guide от Эмбы:
автор
The exception to the Hungarian notation rule is in enumerated types.

TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp,
bkYes, bkNo, bkClose, bkAbort, bkRetry,
bkIgnore, bkAll);

In this case the letters bk are inserted before each element of this enumeration. bk stands for ButtonKind.
Устаревшее требование, сейчас как раз никаких добавлений вида bk быть не должно принципиально
1 май 21, 12:58    [22317194]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
JayDi> Зачем?

1. Стандартов может быть (и есть) больше одного.
2. Стандарт оформления - это, как правило, рекомендация, а не догма.
3. Кому-то какой-то стандарт может не нравиться/быть неудобным.

Posted via ActualForum NNTP Server 1.5

1 май 21, 12:59    [22317195]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
> 1. Стандартов может быть (и есть) больше одного.

1.1. Стандарт (даже одного авторства) может меняться со временем.

Posted via ActualForum NNTP Server 1.5

1 май 21, 13:00    [22317197]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
alekcvp
Member

Откуда:
Сообщений: 2878
asutp2
Устаревшее требование, сейчас как раз никаких добавлений вида bk быть не должно принципиально

Добавлений не должно быть при $SCOPEDENUMS ON, не?..
1 май 21, 14:49    [22317222]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
JayDi
Откровенно говоря волосы на голове шевелились, когда читал этот топик. Есть же стандарт форматирования делфи-кода (что от самой эмбаркадеры, что от каких-нибудь jvcl -- разница минимальна). Но народ все-равно упорно отказывается его соблюдать, и каждый придумывает свой собственный стиль. Зачем?
Я на паскале начинал так писать, как сейчас пишу, когда даже не знал еще, что такое интернет.
А когда узнал - у меня еще его не было много-много лет.
О каких таких стандартах тогда могла речь идти? Я придумал свои, и меня они устраивают полностью.
А сейчас кто-то там что-то придумал, и я должен ломать привычки, которые нарабатывал десятилетиями?
Это риторический вопрос.
1 май 21, 15:56    [22317245]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
JayDi
Member

Откуда: Сызрань, Россия
Сообщений: 4195
YuRock
А сейчас кто-то там что-то придумал, и я должен ломать привычки, которые нарабатывал десятилетиями?
Это риторический вопрос.

Нет. Это не риторический вопрос. Это банальные требования к любому разработчику в организации -- соблюдать стандарты форматирования и стиля. И это довольно серьезные вещи.

К сожалению, инфраструктура делфи-разработки долгое время игнорировала подобные требования, в результате получили то, что получили (каждый делает так, как ему нравится). Настройки и форматирование кода появилось относительно недавно; про умное форматирование при написании/вставки, видимо, можно забыть. Делаю ставку на то, что во всём виноват кривой код инсайт, который не позволял долгое время хоть что-то сделать при работе с кодом.
1 май 21, 20:43    [22317300]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
JayDi
YuRock
А сейчас кто-то там что-то придумал, и я должен ломать привычки, которые нарабатывал десятилетиями?
Это риторический вопрос.

Нет. Это не риторический вопрос. Это банальные требования к любому разработчику в организации --
соблюдать стандарты форматирования и стиля принятые вот в этой конкретной организации


в другой будет другой стиль

Сообщение было отредактировано: 1 май 21, 20:49
1 май 21, 20:57    [22317302]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
JayDi
Member

Откуда: Сызрань, Россия
Сообщений: 4195
defecator
в другой будет другой стиль

В 95% случаев это будет стиль, созданный на основе официального (ака из интернетов по запросу "delphi оформление кода").
1 май 21, 21:58    [22317312]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
JayDi
defecator
в другой будет другой стиль

В 95% случаев это будет стиль, созданный на основе официального (ака из интернетов по запросу "delphi оформление кода").

как раз таки вовсе нет
1 май 21, 22:01    [22317313]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
JayDi
defecator
в другой будет другой стиль

В 95% случаев это будет стиль, созданный на основе официального (ака из интернетов по запросу "delphi оформление кода").
В моей организации стандартом является мой стиль.
Хотя в некоторые куски я не лезу, там бывает другой, но если мне приходится рефакторить - переделываю под свой, иначе ничего не вижу в этих конченых end else begin в три строки.
1 май 21, 22:28    [22317317]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2572
YuRock
А когда узнал - у меня еще его не было много-много лет.
О каких таких стандартах тогда могла речь идти? Я придумал свои, и меня они устраивают полностью.
А сейчас кто-то там что-то придумал, и я должен ломать привычки, которые нарабатывал десятилетиями?
Работа в команде требует выработки code rules
defecator
JayDi
пропущено...
В 95% случаев это будет стиль, созданный на основе официального (ака из интернетов по запросу "delphi оформление кода").

как раз таки вовсе нет
В большинстве крупных вендоров все же ближе к Ембаркадеровскому
2 май 21, 00:02    [22317341]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 6369
YuRock, white_nigger
я думаю если компания хочет платить за такие глупости, то почему бы и нет
4 май 21, 08:59    [22318115]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Wlr-l
Member

Откуда:
Сообщений: 565
Это обсуждение перенесло меня в 80 годы прошлого столетия. Тогда очень много спорили у кого программа более структурная. Учитывая интерес к этой теме я решил немного написать. Постараюсь сделать это небольшими сообщениями.

Настоящие программисты меряются длиной своих программ в строчках.
Поэтому для таких ключевых слов, которые слабо влияют на функциональные возможности программы: uses, const, var, begin выделяют отдельную строку. Возможно, это осталось с тех времен, когда программистов оценивали по количеству строк их программ.

Из трех конструкций, необходимых и достаточных, для реализации любой программы, сначала рассмотрим линейную последовательность операторов. Очевидной записью последовательности операторов является O1; O2; ...; Оn. Но эту последовательность операторов решили назвать "блоком операторов" и обрамить её специальными словами: begin O1; O2; ...; Оn end. Точка с запятой разделяют операторы, а не завершают их. Конструкция O1;; O2 равносильна O1, пустой оператор, O2. Это позволяет добиться эффекта завершения команды символом ; (как исключение, К; else запрещена).

Теперь возник вопрос "как удобно расставлять begin'ы?!", который я свел бы к вопросу "Как расставить begin'ы, чтобы нагляднее отразить структуру программы?". А этот вопрос, в свою очередь, приводит к структурному программированию, основной смысл которого заключается в уменьшении вероятности появления ошибок программиста в разрабатываемых им программах.
Как только ОП доходит до реализации метода оно заканчивается и начинается СП.

В некоторых ЯП слово begin заменили на скобку { и преподали это как преимущество одного языка перед другим.

Но есть и языки, в которых обрамление последовательности операторов убрали совсем. В результате вопрос "Как расставить begin'ы?" стал бессмысленным.
11 май 21, 23:58    [22320696]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Wlr-l
Member

Откуда:
Сообщений: 565
Теперь перейдем к второй конструкции, ветвлению. Здесь используются ключевые слова if, then и else. Причем, else является необязательным элементом. Отметим, что части then и else являются альтернативными частями одной конструкции, т.е. в зависимости от условия выполняется только одна часть этой конструкции.

В следующих двух примерах однозначно указано, что части else нет. Так же begin не затеняет сути оператора, а end четко указывает, какой if закончился.
 if a<b then b:=a;

 if a<b then begin
    b:=a;
    c:=b
 end;

В следующих трех примерах однозначно видно, что есть обе части then и else, и хорошо видна их альтернативность. Обрамление последовательности операторов не сильно загромождает смысл всей конструкции.
 if a<b
  then a:=b
  else b:=a;

 if a<b
  then begin
        b:=a;
        c:=a
       end
  else a:=c;

 if a<b
  then begin
        b:=a;
        c:=a
       end
  else begin
        a:=c;
        b:=0
       end;

Запись оператора ветвления, когда if и else записаны с одинаковым отступом,
if
...
else
является неудачной, так как можно понять, что независимо от условия всегда выполняется часть else.

Из этих примеров видно, что ключевые слова then и else вполне могут быть обрамлением последовательности операторов, но будет нужен символ завершения всей конструкции. Нельзя одновременно выиграть в силе и в расстоянии. В языках программирования это могут быть end, end if или fi.
В этом случае также однозначно решается вопрос "К какому if относится вот этот else?". Сейчас else во вложенных условных операторах является потенциальным источником трудноуловимых ошибок.

Т.е. оператор ветвления может выглядеть так:
 if a<b
  then b:=a;
       c:=a
  else a:=c;
       b:=0
 end;


Если нужно иметь более двух альтернатив, то можно так:
 if       a<b then b:=a
  else if a>b then a:=b // в языке не хватает ключевого слова elsif
  else if a>с then a:=с
  // ...
  else             b:=c;

Для case уже есть хорошее предложение. Только зачем для всего лишь одного слова else выделять отдельную строку? Да, хорошо, что break после каждой альтернативы писать не нужно. Можно было бы использовать в качестве обрамления последовательности операторов : и какой-нибудь символ, например, #.
case x of
  csStart,
  csStart1  :j := UpdateValue;
  csBegin   :x := j;
  csTimeOut :begin
               j := x;
               x := UpdateValue;
             end;
  else       j := x+1;
end;
12 май 21, 00:02    [22320699]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Wlr-l
Member

Откуда:
Сообщений: 565
Осталась третья конструкция: повторение.

Известное число повторений:

for j:=1 to N do a[j]:=0;

for j:=1 to N do begin
    a[j]:=j;
    ...
end;

В одном из сообщений (22309969) был приведен пример досрочного выхода из цикла for. Досрочный выход из цикла for я бы запретил на уровне языка. Если сказали, что от 1 до N, то до N и не раньше. Если без раньше никак, то есть две другие возможности.

Неизвестное число повторений. Здесь не обсуждаем, чем while отличается от until.
while i<iMax do a[i]:=i;

i:=1;
while i<iMax do begin
      a[i]:=i;
      b[i]:=2*i;
end;

i:=1;
repeat //Спасибо, что не заставили писать begin end
  a[i]:=i;
  b[i]:=2*i;
until i=iMax;

В языке не хватает оператора повторения с выходом из середины цикла:
loop
 ..
 if .. then break;
 ..
end;


Это избавило бы от такой искусственной конструкции while true do или, что еще хуже while условие do … break… .
12 май 21, 00:06    [22320700]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Wlr-l
Member

Откуда:
Сообщений: 565
Теперь применим написанное выше к некоторым примерам из этого обсуждения.

На странице 2 (22309826) предложили такое упрощение:
  if Key = VK_DELETE then DeleteSomething(FSelRow);
  if Key = VK_RETURN then ReturnSomething(FSelRow);

Key не может быть одновременно VK_DELETE и VK_RETURN, поэтому лучше написать так:
  if       Key = VK_DELETE then DeleteSomething(FSelRow)
   else if Key = VK_RETURN then ReturnSomething(FSelRow);

Но, если не вдаваться в смысл, то тогда так:
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 case FSelRow of
                                   0 :begin
                                      end;
                                   1 :begin
                                      end;
                                   ...
                                   7 :begin
                                       FFileName := c_NotSpecify;
                                       ...
                                      end;
                                end;
        end;
end;


Пример из 22309924
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end

можно записать так
begin
  if () then begin
     while () do begin
           try
           except
          end
     end
  end
end

Конечно, можно говорить о рудиментах структурного программирования, но конструкция
begin
  if not () then exit;
  while () do
  try
  except
  end;
end;

явно неудачная. По сути дела, exit ничем не отличается от goto, что было показано в 22310217. Т.е. ни goto, ни exit сами по себе не плохие, даже эффективнее других по быстродействию. Одно но… их бесконтрольное использование плохо.

Фрагмент из примера 22310137
  if not Fro then begin // если документ открыт не в режиме "Только для чтения"
    if CheckKolZero then begin // если есть позиции с кол=0
       ... 
    end;//if
  end;//if

редуцируется к
  if    not Fro      // если документ открыт не в режиме "Только для чтения"
    and CheckKolZero // и есть позиции с кол=0
    ...
  end;


Все, пора остановиться.
12 май 21, 00:19    [22320704]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Wlr-l
begin не затеняет сути оператора, а end четко указывает, какой if закончился.
+1
12 май 21, 00:29    [22320707]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Wlr-l
Запись оператора ветвления, когда if и else записаны с одинаковым отступом,
if
...
else
является неудачной, так как можно понять, что независимо от условия всегда выполняется часть else.
Тут я не вижу логики. Ничего такого нельзя понять, это абсурд.
12 май 21, 00:31    [22320708]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
Wlr-l
Досрочный выход из цикла for я бы запретил на уровне языка. Если сказали, что от 1 до N, то до N и не раньше.
Это уже маразм.
12 май 21, 00:33    [22320709]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2572
Сорри, ниасилил))
12 май 21, 00:37    [22320710]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 6369
Wlr-l,

if a<b then b:=a;
хорошая компактная запись, но у таких конструкций есть одно плохое свойство: на срабатывание их условия очень тяжело поставить точку останова
if a<b then 
  b:=a;
- здесь и тут:
if a<b then begin
  b:=a;
end;

это гораздо проще

ещё таких же вещей добавил итератор
for s in Strings do
  DoSomething(s);
если поставить точку остановки на DoSomething, то она будет срабатывать и на завершение цикла

эстетика конечно хорошо, читаем мы много, но и отладка тоже немалая часть работы
12 май 21, 09:07    [22320758]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Вот, кстати, только что наткнулся в чужом коде на такой замечательный фрагмент:

procedure ....
begin
  if Condition then
    begin
      ... пятьдесят строк кода ...
    end
  else
    begin
       ... пять строк кода ...
    end;
    with VarName do
    begin
      ... сто строк кода ...
    end;
end;
29 май 21, 14:39    [22328786]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9625
А у меня и выбора нет.
На работе официальное указание, одна точка выхода из процедуры.
И никаких дискуссий :)
29 май 21, 18:03    [22328817]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9625
Ну единственно все стараются их короткими делать.
29 май 21, 18:09    [22328819]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
Дикий Билл
А у меня и выбора нет.
На работе официальное указание, одна точка выхода из процедуры.
И никаких дискуссий :)


это п...ц
29 май 21, 18:51    [22328829]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
JayDi
Member

Откуда: Сызрань, Россия
Сообщений: 4195
defecator
это п...ц

Причем такая фишка тянется из-за доисторических делфей, в которых не было нормального выделения точки выхода. К вопросу о том, как "хорошо" сидеть на делфи 7 и других ископаемых.
29 май 21, 20:07    [22328855]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 2075
JayDi,

несомненно, это единственная причина
29 май 21, 20:42    [22328863]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
JayDi
Member

Откуда: Сызрань, Россия
Сообщений: 4195
Aleksandr Sharahov
JayDi,

несомненно, это единственная причина

Нет, одна из. Причем не от хорошей жизни. Как и многие другие стандарты оформления/написания кода, которые тянутся с давних времен (как в авиации все правила написаны кровью, так и в программировании все правила написаны миллионами пойманных багов).
29 май 21, 20:58    [22328865]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
defecator
Member

Откуда:
Сообщений: 39795
JayDi
Aleksandr Sharahov
JayDi,

несомненно, это единственная причина

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

бла-бла-бла
хаос - он не от Delphi 7, он в мозгах
29 май 21, 21:20    [22328868]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 65951
Блог
Идея единственного выхода из подпрограммы умерла вместе с появлением исключений. В принципе. Можно хоть об стенку расшибиться.

И в целом, прежде чем носить в сердце какие-то идеи, стоит понимать, в какой среде и в каком контексте они рождались. Расскажу, например, одну поучительную для молодёжи историю. Знаете, как в пятидесятых годах делали overloading подпрограмм? Ну начать стоит с того, как делали сами подпрограммы. Был язык Фортран, и там подпрограмма записывалась как

      SUBROUTINE MYNAME(A, B, C)
      ....
      END

а вот для overloading-а там была специальная конструкция, которая называлась ENTRY. Альтернативный вход в подпрограмму. И с ней подпрограмма принимала примерно такой вид:

      SUBROUTINE MYNAME(A, B, C)
      .... какие-то операторы ....
      GOTO 00010
      ENTRY (A, B, C, D)
      .... какие-то операторы ....
      GOTO 00010
      ENTRY (A, B, C, D, E)
      .... какие-то операторы ....
00010 
      .... вот тут, собственно, начиналась основная работа .....
      END

вот такую подпрограмму можно было вызывать с 3, 4 или 5 параметрами. И когда в какой-нибудь старой статье написано про вред многих входов в подпрограмму - надо понимать, что у автора перед глазами стояло именно это, а не то, о чём вы подумали.

Сообщение было отредактировано: 29 май 21, 21:33
29 май 21, 21:34    [22328872]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 852
softwarer
Идея единственного выхода из подпрограммы умерла вместе с появлением исключений
Плюсую
30 май 21, 06:59    [22328918]     Ответить | Цитировать Сообщить модератору
 Re: Флейм про оформление и begin-end  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 6369
Дикий Билл
А у меня и выбора нет.
На работе официальное указание, одна точка выхода из процедуры.
И никаких дискуссий :)
этот момент явно копипастер писал

Сообщение было отредактировано: 31 май 21, 09:38
31 май 21, 09:46    [22329143]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5 6 7 8 9 10 11      [все]
Все форумы / Delphi Ответить