powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Флейм про оформление и begin-end
261 сообщений из 261, показаны все 11 страниц
Флейм про оформление и begin-end
    #40062737
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
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'ы?!
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062740
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
дебаркадеро так ставит.
а в исходниках VCL встречается всякое и симметричные begin .. end , и асимметричные.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062742
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
дебаркадеро так ставит.
Не замечал за ними такого. Вгде они так делают?
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062755
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
Да. Если строка короткая. А если длинная пишу так

Код: pascal
1.
2.
3.
4.
if
  Condition1 and
  Condition2
then begin

Тогда каждый end соответствует конкретному оператору
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062769
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
Мне удобно, всегда так делаю. Не вижу смысла в лесенках типа
end
else
begin
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062771
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Если строка короткая. А если длинная пишу так

Код: pascal
1.
2.
3.
4.
if
  Condition1 and
  Condition2
then begin

+2 тоже
только вот так
Код: pascal
1.
2.
3.
if Condition1 and
   Condition2
then begin
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062772
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_Vasilisk_
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
Да. Если строка короткая. А если длинная пишу так

Код: pascal
1.
2.
3.
4.
if
  Condition1 and
  Condition2
then begin


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


а я для сложных условий пишу вот так
Код: pascal
1.
2.
3.
4.
5.
if
  Condition1 
  and
  Condition2
then begin



тогда and/or не теряется в конце, условие сразу видно, чего с чем
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062800
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, непривычно тяжело читать...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062829
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator> тогда and/or не теряется в конце

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

Отступы делаешь, кстати?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062834
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Гаджимурадов Рустам
defecator> тогда and/or не теряется в конце

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

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


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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
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

...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062848
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator> конечно делаю !

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

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

итп
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062855
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
Код: pascal
1.
ProbkaExists := RecogProbka

...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062866
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
Код: pascal
1.
2.
                 { увеличить счетчик пробок }
                 IncrementBottlesCounter ;


А почему не ProbkaCounter?)
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062868
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Fr0sT-Brutal
defecator
Код: pascal
1.
2.
                 { увеличить счетчик пробок }
                 IncrementBottlesCounter ;



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

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

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

хороший заказной проект был из Казахстана, 2010-й год, тонны денег принёс
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062900
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Тебе реально так удобно расставлять begin'ы?!
Мне - очень. Смысл терять строку на begin? Экран не резиновый, читабельность ухудшается (из-за отступов, так сразу видно, чей end).
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062934
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С некоторых пор я отказался от комментариев вида {} в пользу комментариев вида //
Минус фигурных скобок в том что если камент многострочный и закомментировать одну из скобок - то действие оставшейся распространяется совсем не туда куда нужно. Это ограничивает использование комментирования блока операторов в целях отладки.

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

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

Код: pascal
1.
2.
3.
4.
  if SPR(9, id, sname) then begin
    EditSagc.Text := sname;
    Fsagc_id      := id;
  end;//if


Код: pascal
1.
2.
3.
4.
5.
6.
    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



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062955
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010
читабельность ухудшается
Ну не знаю... по мне - как раз наоборот.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062957
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартный форматтер в среде согласен со мной))
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062963
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Минус фигурных скобок в том что если камент многострочный и закомментировать одну из скобок - то действие оставшейся распространяется совсем не туда куда нужно. Это ограничивает использование комментирования блока операторов в целях отладки.

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

"Комментирование в целях отладки" - довольно кривая практика, но если уж решил этим путём - попробуй как-нибудь использовать для этого (* такие комментарии *), тебя ждёт сюрприз.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062964
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Так же, для удобства, после end пишу от чего этот begin.

И ещё венгерскую нотацию надо бы вспомнить. Дабы собрать все древние глупости в одном флаконе. Кстати, это "удобство" ярко иллюстрирует проблемы от неправильного позиционирования begin-а.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062965
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraks
Так же, для удобства, после end пишу от чего этот begin.

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

Вот так топик о Мак-адресе скатился в спор о стилях))
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062967
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Египетские скобки в паскале, это капец...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062991
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Минус фигурных скобок в том что если камент
fraks> многострочный и закомментировать одну из скобок -
fraks> то действие оставшейся распространяется совсем
fraks> не туда куда нужно. Это ограничивает использование
fraks> комментирования блока операторов в целях отладки.

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

Код: pascal
1.
2.
3.
4.
{
строка;
строка;
}



а так

Код: pascal
1.
2.
3.
4.
{
строка;
строка;
{}



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


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

Только если длинные блоки (что уже плохо).
Отступы должны помогать, тем более щас IDE умеют
подсвечивать блоки (вот раньше проблема была, да).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062993
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16.04.2021 11:44, Гаджимурадов Рустам пишет:
> Отступы должны помогать, тем более щас IDE умеют
> подсвечивать блоки (вот раньше проблема была, да).
>

CnPack отлично подсвечивает и на старых версияx IDE.
а писать "от чего конец" - маразм.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062998
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
а писать "от чего конец" - маразм.
Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40062999
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
16.04.2021 11:59, _Vasilisk_ пишет:
> Когда в конце процедуры образовывается лесенка из 4-5 end, то не такой и маразм

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

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

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

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

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

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

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

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

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

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

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


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




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

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

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

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

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


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

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

  TSelRow1 = class(TSelRow)
    ...


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


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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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



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

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


А вообще - смелее выделять блоки кода в методы, даже если они вызываются лишь из одной точки. Колбаса не нужна.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063127
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Это для скольки штук простыней?

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

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

Да.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063128
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end



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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
begin
  if not () then exit;
  while () do
  try
  except
  end;
end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063131
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Гаджимурадов Рустам
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end



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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
begin
  if not () then exit;
  while () do
  try
  except
  end;
end;

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

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

softwarer> if not () then exit;

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

А это


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


неравносильно предыдущему куску кода
(особенно если except заменить на finally).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063137
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ> А вообще - смелее выделять блоки кода в методы

Ты хоть смайлики ставь, а-то не всегда очевидно, когда ты троллишь. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063143
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
...
...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
begin
  if not () then exit;
  while () do
  try
  except
  end;
end;


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

В структурно родственных языках практикуют такого рода форму для любителей раннего выхода:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
for var i := 1 to 1 do
begin
  if not () then break;
  while () do
  try
  except
  end;
end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063147
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby> exit вроде обязывает, нет?

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

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

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

теперь я ЯННП

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

Ладно, не обращай внимания, я случайно забрёл.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063152
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Код: pascal
1.
2.
3.
4.
if then
  while do
    try
    end

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

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

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

Если это расчётный оператор (а не вызов функции
с 12ю параметрами), то лучше его просто разбить
на 2-3 с переприсваиваниями.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063160
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby> обсуждать вроде предлагалось расстановку скобок составного оператора...

Обсуждалось много чего, просто рассуждения
про break vs exit - совсем не тема данного топика.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063177
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Если это расчётный оператор (а не вызов функции
Ну вот из реального кода
Код: pascal
1.
2.
3.
4.
5.
6.
  if not TimeFromIsNull then begin
    LStr := LStr + Format(
      ', Value: %s',
      [FormatDateTime('yyyy-mm-ss hh:nn:ss.zzz', AUtil.ISCTimeStampToDateTime(Self.TimeFrom))]
    );
  end;

или
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    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';
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063180
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> Ну вот из реального кода

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

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

Тут составной оператор тоже не нужен, ИМХО,
достаточно отступов, которые ты итак сделал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063191
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Гаджимурадов Рустам
ъъъъъ
пропущено...
От таких мест нужно избавляться.

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

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




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


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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  if not () then Exit ;

    while () do
    begin
      try
      except
      end
    end

end
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063192
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
_Vasilisk_
Гаджимурадов Рустам
Если это расчётный оператор (а не вызов функции
Ну вот из реального кода
Код: pascal
1.
2.
3.
4.
5.
6.
  if not TimeFromIsNull then begin
    LStr := LStr + Format(
      ', Value: %s',
      [FormatDateTime('yyyy-mm-ss hh:nn:ss.zzz', AUtil.ISCTimeStampToDateTime(Self.TimeFrom))]
    );
  end;


или
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    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
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063196
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator> всё, что не надо, проверить ДО

Это победа, да, 3 end-a вместо четырёх.
Потом другом в коде выкинуть With и
написать вместо блока переменную, да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063197
delphinotes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я ещё в некоторых случаях стал точку с запятой в отдельную строку выносить. И в вызываемый метод, когда параметров много - каждый параметр на отдельной строке. Пример:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  if Condition then
    SomethingMethodWithManyParams(
      // in:
      FirstParam,
      NextParam,
      ..
      // out:
      LastParam
    )
  else
    OtherMethodWithFewParams(P1, P2, P3)
  ;



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

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

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

Ну как ты от них избавишься?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end


Что тут выкинуть?
Зачем выкидывать? Тут как раз все нормально: процедура выполняет одну задачу. Зачем ее искусственно рвать на куски? Нет, если память как у золотой рыбки или код не форматирован, то смысл есть, но в реальности-то зачем?
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063228
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот поэтому скобочки из С++ рулят.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063248
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
didgik
Вот поэтому скобочки из С++ рулят.


чем это они рулят ?
ровно то же самое и будет
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063253
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
ъъъъъ
Код: pascal
1.
2.
3.
4.
if then
  while do
    try
    end


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

Да ладно. С "этим" питон живет, и ни жу-жу. И в рейтинге, в отличии от.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063256
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
didgik
Вот поэтому скобочки из С++ рулят.


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

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

Код: pascal
1.
2.
3.
4.
 if x then
  XXX; // Ахтунг!
 else
  YYY; 
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063266
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Соответственно, кол-во строк не имеет смысла.

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

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

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

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

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

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

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

Код: pascal
1.
2.
3.
if {условие}
  then a := true
  else a := false



пишут

Код: pascal
1.
2.
3.
4.
if {условие} then
begin
  i := 1;
end;



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

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

Код: pascal
1.
2.
3.
4.
begin
  if not () then exit;
  ...
end;


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

Если такие убегания встречаются внутри, да еще неоднократно - это не есть хорошо.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063268
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ъъъъъ
defecator
пропущено...


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

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

Код: pascal
1.
2.
3.
4.
 if x then
  XXX; // Ахтунг!
 else
  YYY; 



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


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

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


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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  // проверим есть ли в документе записи с кол-вом 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




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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  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
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063273
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще бывает что для компактности кода if с блоками растягиваю в одной строке

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 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 / 0
Флейм про оформление и begin-end
    #40063278
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
ъъъъъ
пропущено...
От таких мест нужно избавляться.

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

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




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


Код: pascal
1.
2.
3.
4.
5.
begin
  if not () then
    Exit;

  while 
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063279
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сбоянил я смачно, да! :)
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063281
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010
Гаджимурадов Рустам

Ну как ты от них избавишься?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end



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

Для улучшения читабельности. Только для этого, и это очень важно.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063282
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Гаджимурадов Рустам


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

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


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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  // проверим есть ли в документе записи с кол-вом 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.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063284
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Еще бывает что для компактности кода if с блоками растягиваю в одной строке

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 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 везде, кроме первой строки.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063285
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> У меня D7, там нету подсветки.

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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
begin
  if not () then exit;
  while () do
  try
  except
  end;
end;


Код: pascal
1.
  if not () then exit;

А если там дальше ещё код после этого блока?
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063294
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
ъъъъъ
пропущено...

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

Код: pascal
1.
2.
3.
4.
 if x then
  XXX; // Ахтунг!
 else
  YYY; 




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

Вот именно. Есть ";" перед else - ахтунг.
Нет "end" в конце модуля - ахтунг. Ладно, end в конце .dpr имеет свой begin. А в модуле-то он накуа?
Нет "." в конце модуля - ахтунг.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063295
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
А если там дальше ещё код после этого блока?

Второй раз за сегодняшнее утро пишу: именно поэтому я не ленюсь расставлять в примерах комментарии типа { ... длинный кусок кода ... }
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063296
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Это обычный говнокод. Первые 3 ифа выкидываются на с помощью Exit.
Чем вам лесенка плоха? Логику видно, отлаживаться удобно...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063297
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Это еще хуже, нужен else if везде, кроме первой строки.

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

Скорее там нужен вопрос "а если этих гудсов не шесть, а сто двадцать шесть, так и будешь код масштабировать?"
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063299
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
А в модуле-то он накуа?

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

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

Бигин там есть. А в модуле - нет.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063302
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Бигин там есть. А в модуле - нет.

В модуле тоже есть.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063303
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
ъъъъъ
Бигин там есть. А в модуле - нет.

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

Ахтунг сплошной.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063304
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
fraks
Еще бывает что для компактности кода if с блоками растягиваю в одной строке

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 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 тут не нужен нигде.
Каждая строка отвечает за свою настройку, независимо от других.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063305
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
YuRock
Это еще хуже, нужен else if везде, кроме первой строки.

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

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

Там речь про выделение товаров цветом на основании вхождения товара в определенный список товаров.
Магическая цифра 6 - это ориентировочное количество цветов которые обычный человек достаточно безошибочно может различить по цвету. Цветов немного, даже меньше шести.
В данном случае используется 2 одинаковых цвета. Ранее было 5 настроек.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063306
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
fraks> У меня D7, там нету подсветки.

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


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

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

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

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

Тут наверное было что-то умное, но я не понял.
Если не лень - распиши.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063307
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
fraks
пропущено...


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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  // проверим есть ли в документе записи с кол-вом 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 тут совсем не в тему.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063310
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Я уже стар мозгами. Если я как-то обошелся без лишних
fraks> неведомых мне свистоперделок - значит оно мне и не нужно.

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

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

Это форум без тега SRC скушал пробелы.
Я имел в виду привычку выравнивать пробелами
простыню присвоения переменных, полей и т.п. -
так читать удобнее. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063311
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey> Ты ещё спроси накуа он в декларации
Kazantsev Alexey> классов или записей, бегина-то тоже нет...

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

Это был бы такой же шаг в прошлое с его end if, end loop итп., как и "комментарии что завершает этот end".
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063314
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Я конечно тоже использую такой метод "испуганного программирования", но исключительно когда эта строка - первая и единственная такого рода в процедуре.

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

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

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

Кстати, задай себе простой вопрос: используешь ли ты raise в середине процедур? Если да - значит кривишь душой, ибо это точно такое же убегание, только более масштабное. Если нет.... ну да, ну да, настоящие мастера исключений не используют. Только коды ошибок, только хардкор.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063315
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraks
Я уже стар мозгами.
Если я как-то обошелся без лишних неведомых мне свистоперделок - значит оно мне и не нужно.

Не, надо пробовать.
Я вот CNPack терпеть не могу: попробовал. Долго не пользовался GExperts, тоже пробовал ибо. Сейчас я Gexperts использую, т.к. в нем есть годный автоформаттер. Но всё остальное смело бы выкинул... хи, идея, вычистить Gexperts. :)
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063316
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам

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

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


А, это да, это обязательно.
Все что можно выровнять - обязательно выровняю. Во многих случаях это сразу показывает где ошибка.
К сожалению, некоторые языки не позволяют такого. При написании bat-файлов очень не хватает такой возможности, выровнять при присвоении переменным по знаку =.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063317
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fraks
Я конечно тоже использую такой метод "испуганного программирования", но исключительно когда эта строка - первая и единственная такого рода в процедуре.

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


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

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

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


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

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


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

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


Хм... для меня raise это примерно как транзакция. Где оно нужно - там оно нужно и это не вопрос красоты.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063318
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraks
При написании bat-файлов очень не хватает такой возможности, выровнять при присвоении переменным по знаку =.

Используй PowerShell.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063322
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
fraks
Я уже стар мозгами.
Если я как-то обошелся без лишних неведомых мне свистоперделок - значит оно мне и не нужно.

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

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

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

Форматтер не использую.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063323
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
fraks
При написании bat-файлов очень не хватает такой возможности, выровнять при присвоении переменным по знаку =.

Используй PowerShell.

PowerShell прикольная штука, но это нужно дополнительно изучать, и плюс там проблемка с запуском скрипта.
Если все по феншую то скрипт должен иметь подпись чтобы запускаться.
Или нужно полностью отключить защиту от запуска.
Отключить что-то меня стремает, а подписывать - какая-то очень непростая песня, решил что пока обойдусь.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063326
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraks
ъъъъъ
пропущено...

Используй PowerShell.

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

Ага, а bat - файлы неподписанные не стремает...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063327
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Категорически не согласен.

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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  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 процедуры. То есть конструкции

Первая
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure X;
begin
  ....
  if условие then
  begin
    ...
  end;
end;

вторая
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure X;
label exit:
begin
  ....
  if not условие then goto exit;
  ...
  exit:
end;

и третья
Код: pascal
1.
2.
3.
4.
5.
6.
procedure X;
begin
  ....
  if not условие then exit;
  ...
end;



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

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

Это же верно и для других конструкций, в том числе exit.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063328
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
fraks
softwarer
пропущено...

Код: pascal
1.
2.
3.
4.
begin
  if not () then exit;
  ...
end;



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


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

Сразу отсёк на входе в подпрограмму то, что не соответствует условиям,
и пишешь только функциональный код
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063330
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010
YuRock
Это обычный говнокод. Первые 3 ифа выкидываются на с помощью Exit.
Чем вам лесенка плоха? Логику видно, отлаживаться удобно...
Никакого видно и удобно там нет, есть именно лишняя лесенка.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063331
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
а я очень сильно люблю именно этот метод. позволяет избавиться от излишней вложенности условий. Сразу отсёк на входе в подпрограмму то, что не соответствует условиям, и пишешь только функциональный код

Любовь к этому методу появляется у тех, кто достаточно повозился со сложными и запутанными условиями, задолбался править вызванные ими баги и начал ценить упрощение и даваемые им блага.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063332
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
YuRock
Это еще хуже, нужен else if везде, кроме первой строки.

С чего бы там был нужен else if? Думаешь, два товара слететь не могут?
Если так - то да. Но это еще хуже, значит нужен массив и цикл.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063333
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
YuRock
пропущено...
Это еще хуже, нужен else if везде, кроме первой строки.


Else тут не нужен нигде.
Каждая строка отвечает за свою настройку, независимо от других.
Я понял уже. Значит, нужен цикл по контролам, используя свойство Tag.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063334
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Приведенный мной код - это только часть процедуры
Это вторая проблема (если не первая)
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063335
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению весь код Delphi без использования Exit и с лишними begin/end
DelphiМогло бы быть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TCustomForm.SetWindowMenu(Value: TMenuItem);
begin
  if FWindowMenu <> Value then
  begin
    FWindowMenu := Value;
    if Value <> nil then Value.FreeNotification(Self);
    RefreshMDIMenu;
  end;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TCustomForm.SetWindowMenu(Value: TMenuItem);
begin
  if FWindowMenu = Value then Exit;
  FWindowMenu := Value;
  if Value <> nil then Value.FreeNotification(Self);
  RefreshMDIMenu;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition <> Value then
  begin
    FPosition := Value;
    if not (csDesigning in ComponentState) then RecreateWnd;
  end;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition = Value then Exit;
  FPosition := Value;
  if not (csDesigning in ComponentState) then RecreateWnd;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TCustomForm.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if FCanvas <> nil then
  begin
    FCanvas.Brush.Color := Color;
    Perform(CM_BORDERCHANGED, 0, 0);
  end;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TCustomForm.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if FCanvas = nil then Exit;
  FCanvas.Brush.Color := Color;
  Perform(CM_BORDERCHANGED, 0, 0);
end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063336
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Значит, нужен цикл по контролам, используя свойство Tag.

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

Код: pascal
1.
2.
3.
4.
5.
6.
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);


Это если не задаваться вопросом о том, что для "шести одинаковых по сути фрагментов" следует использовать решения, поддерживающие множественность.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063337
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

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

Но надо быть аккуратным в использовании.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063339
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
fraks
пропущено...
Else тут не нужен нигде.
Каждая строка отвечает за свою настройку, независимо от других.
Я понял уже. Значит, нужен цикл по контролам, используя свойство Tag.


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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
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% :)
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063341
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
К сожалению весь код Delphi без использования Exit и с лишними begin/end

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

P.S. Впрочем, сейчас заглянул в исходники конца 80-х - в части случаев уместные exit я использовал и тогда.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063342
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
defecator
а я очень сильно люблю именно этот метод. позволяет избавиться от излишней вложенности условий. Сразу отсёк на входе в подпрограмму то, что не соответствует условиям, и пишешь только функциональный код

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

Именно.
Все эти простые варианты просты пока не наступит пора их переделать.
При переделке вся эта простота оборачивается необходимостью переписать всю логику по новой, но уже на нормальных условиях, без бегства.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063345
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
fraks
пропущено...

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

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

Ну да, есть такое двоемыслие :)
У нас еще довольно много машинок под WnXP где этого PowerShell нету.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063347
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

сказочник
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063349
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
YuRock
Значит, нужен цикл по контролам, используя свойство Tag.

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

Код: pascal
1.
2.
3.
4.
5.
6.
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);


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


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

Множественность вообще и множественность по сильно ограниченному множеству - не всегда есть смысл связываться с множеством.
Здесь одна только попытка перебрать контролы убъет весь смысл.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063350
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
softwarer
пропущено...

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

Код: pascal
1.
2.
3.
4.
5.
6.
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%.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063351
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
не всегда есть смысл связываться с множеством

Наличие

Код: plaintext
1.
2.
3.
4.
5.
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...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063352
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fraks
не всегда есть смысл связываться с множеством

Наличие

Код: plaintext
1.
2.
3.
4.
5.
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 элементов невозможно принципиально, я уже писАл, это цветА.
Перебрать контролы в виде множества - отдельная заморочка.
В данном случае проще делать именно так, поименные переменные в конфиге.
Я единственный разработчик этого продукта.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063353
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
В данном месте 50 элементов невозможно принципиально, я уже писАл, это цветА

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

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

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

У нас на работе есть питонист, самостоятельно переучившийся из 1С-ника.
Он любитель хардкодить частные случаи, из чего проистекает то что любой код у него в единственном экземпляре.
Одинаковых баз у нас штук 10, но справочники в каждой - свои.
Бэкапов не любит, системы контроля версий не использует вообще.
Вот это - проблема.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063355
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fraks
В данном месте 50 элементов невозможно принципиально, я уже писАл, это цветА

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

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

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

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

Я не в ответе за чужие ошибки в будущем.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063357
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Я не в ответе за чужие ошибки в будущем.

Не в ответе. Но код, который уберегает от ошибок, качественнее, чем код, который к ним подталкивает.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063359
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> Это был бы такой же шаг в прошлое с его end if, end loop итп.

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

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

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

Если приведешь пример кода, может быть я бы понял о чем речь. Пока что мне видится что любой перевод в N-мерность только усложнит и увеличит количество кода, и приведет к необходимости контролировать это самое N (границы).
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063362
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Всему надо знать меру, необязательно от EndClass-a прыгать на EndIf и EndLoop. :)

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

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

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

Вот, кстати, чего мне действительно не хватает, так это возможности объявить в interface секции только часть класса, а кучу технических деталей убрать в implementation. Что-то вроде partial классов в .net.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063364
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Если приведешь пример кода, может быть я бы понял о чем речь.

Имхо, в тот момент, когда ты писал эти строки в CFG, стоило остановиться и сделать их, например, массивом.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063369
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fraks
Если приведешь пример кода, может быть я бы понял о чем речь.

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 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 / 0
Флейм про оформление и begin-end
    #40063374
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
И как потом к ним обращаться?

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 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;


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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 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;


Неужели без меня было сложно ответить на этот вопрос?
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063377
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fraks
И как потом к ним обращаться?

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 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;


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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  // обработаем ситуацию когда набор товаров выбранный для выделения - пропал. Скинем в 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;


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

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

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

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

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

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

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

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

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

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

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

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

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

Код: pascal
1.
ResetCodes([Item_GoodMark1, Item_GoodMark2, Item_GoodMark3, Item_GoodMark4, Item_GoodMark5, Item_GoodMark6]);


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

Ты сам не первый час бьёшь себя пяткой в грудь о том, что их шесть, ровно шесть и никогда не будет иначе. Так какой тебе контроль нужен? Придумываешь "аргументы" без всякой логики, лишь бы звучали "весомо".
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063395
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fraks
Я думал что массив должен принести какую-то пользу, а принес один вред.

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

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

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

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

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

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

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
  
  ...
  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;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063401
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
если в правой части ещё и пустой строкой отделить,
то правая часть будет просто замечательной
а левая часть - УГ
DimaBr
К сожалению весь код Delphi без использования Exit и с лишними begin/end
DelphiМогло бы быть
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TCustomForm.SetWindowMenu(Value: TMenuItem);
begin
  if FWindowMenu <> Value then
  begin
    FWindowMenu := Value;
    if Value <> nil then Value.FreeNotification(Self);
    RefreshMDIMenu;
  end;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TCustomForm.SetWindowMenu(Value: TMenuItem);
begin
  if FWindowMenu = Value then Exit;

  FWindowMenu := Value;
  if Value <> nil then Value.FreeNotification(Self);
  RefreshMDIMenu;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition <> Value then
  begin
    FPosition := Value;
    if not (csDesigning in ComponentState) then RecreateWnd;
  end;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TCustomForm.SetPosition(Value: TPosition);
begin
  if FPosition = Value then Exit;

  FPosition := Value;
  if not (csDesigning in ComponentState) then RecreateWnd;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TCustomForm.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if FCanvas <> nil then
  begin
    FCanvas.Brush.Color := Color;
    Perform(CM_BORDERCHANGED, 0, 0);
  end;
end;

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TCustomForm.CMColorChanged(var Message: TMessage);
begin
  inherited;
  if FCanvas = nil then Exit;

  FCanvas.Brush.Color := Color;
  Perform(CM_BORDERCHANGED, 0, 0);
end;

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

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

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

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

Я был бы согласен с этим утверждением при условии, что с инструментом работают достаточно компетентные люди, которые не творят совсем уж глупостей. Но в ситуации, когда фича, с одной стороны, не даёт заметных преимуществ при грамотном использовании, а с другой - "заставь дурака богу молиться"... Лучше не давать фичи, главным и единственным результатом которой будут новые тонны говнокода.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063460
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Иногда удобно всё вместе, без разделения на декларацию и реализацию.
В любом случае, лучше иметь возможность, чем не иметь её (в т.ч. ту, о
которой говоришь ты).
+1
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063464
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
softwarer
defecator
если в правой части ещё и пустой строкой отделить, то правая часть будет просто замечательной

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


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

https://www.microsoft.com/ru-ru/download/details.aspx?id=16818
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063483
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
ты что, экономишь строки ?

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

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

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

Нет, эту возможность нужно запретить международной конвенцией, как антигуманную. За кодовой лапшой напрочь теряется интерфейс типа. Чтобы просто понять что делает класс, нужно втыкать, втыкать и втыкать во всё это безумие.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063502
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
Гаджимурадов Рустам
Иногда удобно всё вместе, без разделения на декларацию и реализацию.
В любом случае, лучше иметь возможность, чем не иметь её

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

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

"Пусть расцветают сто цветов" - (с).
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063503
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример, кричащий: класс, реализующий интерфейс. Бессмысленное копирование из интерфейса декларации методов. Класс, возможно, расширяет интерфейс лишь одним-двумя методами. А ты поди отличи эти методы от всего мусора, подтянутого из интерфейса.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063508
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Должна быть возможность сделать разумно для разработчика.

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

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

Отличить одно от другого, это уже потом, после того, как понял, что оно вообще делает. Давно взял за правило заключать реализацию интерфейсов в регионы.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063509
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
Благими намерениями... Будь такая возможность, короткими методами ограничиваться никто не будет (особенно, если точить некогда - пилить надо).

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

Когда-то создатель паскалей посчитали программистов несмышлеными идиотами, писающими под себя, и понаставили всюду квадратных колес и бессмысленных ограничений.
И в итоге, паскаль скатился до уровня ЯП для маргиналов.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063511
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
И в итоге, паскаль скатился до уровня ЯП для маргиналов.

Единственная причина того, что он скатился в эту позицию - то, что он хорошо получился у Борланда. Если бы Борланд вместо него написал крутой и замечательный Turbo C, весь мир бы сейчас работал на Visual Pascal.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063512
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
А если тебя заботят проблемы сопровождения чужого кода, то - "кто на что учился", и вообще, это проблема административная, а не техническая.

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

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

И в итоге появился сишарп. Fixed.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063517
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fraks
Я бы еще понял если бы у меня контролы в виде массива были

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

Код: pascal
1.
ResetCodes([Item_GoodMark1, Item_GoodMark2, Item_GoodMark3, Item_GoodMark4, Item_GoodMark5, Item_GoodMark6]);


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


при этом она все равно остается неуклюжей.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063518
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
fraks
под WnXP где этого PowerShell нету.

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

Это дополнительный софт, он исходно не установлен.
Если можно написать нужное на cmd и в системе ничего не трогать - это нормально.
Так же иногда использую финт - если на cmd выходит слишком заморочно, по каким-то причинам, то просто пишу консольную микроулилитку на delphi и вызываю ее из cmd.
Никакого лишнего тяжелого софта, все подконтрольно.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063519
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
fraks
У меня первым пунктом идет понимание что любое действие должно приносить пользу.

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

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

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

Я постоянно работаю с массивами переменного размера. Я давно отказался от попыток работать с DataSet, вместо которого у меня самодельный компонент представляющий из себя, по сути, динамический массив рекордов. Если природа данных имеет неопределенное количество элементов - то использую именно его, но при этом и интерфейсно, это отображается либо в гриде либо в крайнем случае в списке. И сохраняется такое в конфиг соответственно, циклом. В рассматриваемом моем примере интерфейсная часть - несколько именованных пунктов меню, поэтому, с учетом что количество этих элементов ограничено как и по смыслу так и чисто физически - нет смысла делать гигантские меню - применять тут массив смысла никакого нет.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063540
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Для меня такая строка нечитаема, не видно ни сколько в ней элементов, ни как они пронумерованы, ни какие там разделители.

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

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

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

У меня так же.
rgreat
Между процедурами - 3 пустых строки.
А вот это я ненавижу, одной строки достаточно, и так все видно.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063547
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks

Я бы записывал эту строку так:
Код: pascal
1.
2.
3.
4.
5.
6.
ResetCodes([ Item_GoodMark1, 
             Item_GoodMark2, 
             Item_GoodMark3, 
             Item_GoodMark4, 
             Item_GoodMark5, 
             Item_GoodMark6 ]);



при этом она все равно остается неуклюжей.
Вот, как надо:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ResetCodes(
  [
    Item_GoodMark1, 
    Item_GoodMark2, 
    Item_GoodMark3, 
    Item_GoodMark4, 
    Item_GoodMark5, 
    Item_GoodMark6
  ]
);
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063569
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> Я был бы согласен с этим утверждением при условии,
softwarer> что с инструментом работают достаточно компетентные
softwarer> люди, которые не творят совсем уж глупостей.

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

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

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


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

Я помню, что ты сторонник чистой декларации, да.
Автофолдинг спасёт нежелающих втыкать. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063570
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock> rgreat > Между процедурами - 3 пустых строки.
> А вот это я ненавижу, одной строки достаточно, и так все видно.


Это дело вкуса. Многие предваряют заголовок процедуры
// **** строкой комментария *** -
этого вполне достаточно, наглядно и пр.
Хорошее решение для всяких Лиспов и пр. скриптов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063577
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё встречаются такие варианты
Код: pascal
1.
2.
3.
Begin

End;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063578
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Я и сам часто придерживаюсь подобного мнения, но можно ведь добавить запрет (опцию) этого на уровне проекта или директивы компилятора.

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

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

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

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

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

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

Вот с этим согласен. Хорошая практика, близкая к обязательной. Хотя сволочное IDE здесь изрядно портит жизнь, поскольку просто обожает при автодополнении лепить новую процедуру между заголовком старой и относящимся к нему комментарием.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063579
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
А ещё встречаются такие варианты
Код: pascal
1.
2.
3.
Begin

End;


Это стиль восьмидесятых. Я тоже так писал года наверное до 87-го. Современный вариант удобнее, но и тот вполне адекватен. По сути это замена цветового выделения ключевых слов, и когда она появилась - от такого написания ушли.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063584
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Автофолдинг спасёт нежелающих втыкать. :)

Для автофолдинга нужна IDE. Я просматриваю чужой код (не только дельфийский, но и жабу и шарпы и плюсы), обычно, в far или mc. Вот, например, читать код оксидженовской rtl, которая написана в таком стиле, это ад, блин.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063592
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам

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

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

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

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

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

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

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

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

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

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

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

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

Это ты, видимо, про какой-то баг времён ХЕ2/ХЕ3 говоришь,
в старых версиях этого не наблюдалось, IIRC (насчёт новых -
не знаю, исправили или нет).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063597
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey> Для автофолдинга нужна IDE. Я просматриваю чужой код

Мы всё-таки про Delphi говорим и теоретизируем...
Даже в твоём случае - тот же NPP умеет фолдинг
(и автофолдинг сделать не рокет-саенс).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063603
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Мы всё-таки про Delphi говорим и теоретизируем...

Delphi 10.4.2 фолдит регионы:

Шёл 2021 год...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063604
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Единственная причина того, что он скатился в эту позицию - то, что он хорошо получился у Борланда. Если бы Борланд вместо него написал крутой и замечательный Turbo C, весь мир бы сейчас работал на Visual Pascal.
Не С, Бейсик. MS и Borland договорились прекратить развитие Quick Pascal и Turbo Basic соответственно.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063608
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey> Delphi 10.4.2 фолдит регионы:

О да, я с этим ещё в ХЕ3 натерпелся.
Само ужасное - что "это" может как
портить код, так и вылетать с AV.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063629
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

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

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

Малоприятная штука, если ты написал/изменил
пару десятков строк и не успел сохраниться -
сиди потом и вспоминай, где остановился...
Правда, старая ДОСовская привычка чуть-что
нажимать Ctrl+S по 5 раз в минуту спасает... :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063687
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Вот, как надо:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ResetCodes(
  [
    Item_GoodMark1, 
    Item_GoodMark2, 
    Item_GoodMark3, 
    Item_GoodMark4, 
    Item_GoodMark5, 
    Item_GoodMark6
  ]
);

Так строчек жалко :)
Так я только запросы пишу.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40063735
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
+ к пустым строкам для логического разделения
- к реализации в декларации - когда плюсы в универе проходили, поначалу нравилось, но это были лабораторки. На большом проекте размазывание только вносит сумятицу. На дельфях есть прямой read/write пропертей из внутренних полей, и хватит.
+ к "испуганному стилю" (крутое название :))
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40064011
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40064016
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Борланда уже сто лет как нет никакого. Что вы всё ковыряете засохшее.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40064033
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ъъъъъ
Борланда уже сто лет как нет никакого. Что вы всё ковыряете засохшее.

ну так ты же дельфи ковыряешь, а оно тоже засохшее
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40064034
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
ну так ты же дельфи ковыряешь, а оно тоже засохшее
Не все сидят на Дельфи 7.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40064122
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator
ъъъъъ
Борланда уже сто лет как нет никакого. Что вы всё ковыряете засохшее.

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

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

В частности:
Statements
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// CORRECT
  if A < B then 
  begin
    DoSomething; 
    DoSomethingElse;
  end 
  else 
  begin
    DoThis;
    DoThat;
  end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067375
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
Опубликовали обновлённое руководство по стилевому оформлению кода Delphi .

В частности:
Statements
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// CORRECT
  if A < B then 
  begin
    DoSomething; 
    DoSomethingElse;
  end 
  else 
  begin
    DoThis;
    DoThat;
  end;


Ужасно. Логические блоки через три сторки. Ужасно-ужасно.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067377
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
  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;



Еще оттуда. Это что, шутка, или серьезно? Не хочу матюкаться и обзываться, так что ничего не скажу.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067393
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Еще оттуда. Это что, шутка, или серьезно? Не хочу матюкаться и обзываться, так что ничего не скажу.

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

Ну и когда однострочники идут вперемешку с блоками, то их тоже на отдельную строчку, да.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067399
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Ну я бы блок else .. end на один уровень с case поставил, а в остальном что не так?
Читается не очень.
Во-первых, field-префиксы, равно как и прочие, лучше со строчной буквы писать.
Во вторых, когда одно- и много-строчные case-ы идут подряд, лучше пустые строки вставлять, иначе при беглом просмотре запросто можно пропустить что-то.
Ну и case-else я бы отступом делал, но это уже на любителя.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067413
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
YuRock
Еще оттуда. Это что, шутка, или серьезно? Не хочу матюкаться и обзываться, так что ничего не скажу.

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

Ну и когда однострочники идут вперемешку с блоками, то их тоже на отдельную строчку, да.
Кроме этого, адо begin после двоеточия, а end - на уровень с меткой.
Зачем нужен этот дополнительный уровень с begin end? И так ведь лесенка case.
Необъяснимое уродство.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067415
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Зачем нужен этот дополнительный уровень с begin end?

Дополнительный уровень с begin/end удобен либо когда некоторые case-метки слишком длинны, либо когда в некоторых блоках достаточно большие (в смысле количества строк) и длинные (в смысле длины одной строки в символах) действия. Тогда такое форматирование по мне предпочтительно, иначе важные части логики оказываются "слишком справа".
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067430
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все дружно забывают, что это ТОЛЬКО рекомендации. Давайте тогда обсудим, имеет ли право на жизнь конструкция типа:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 if ()  then
   BEGIN
      bla-bla
      if () then
         begin
               ....
         end
     else
        begin
                ....
        end
   END
ELSE
   ......

Я про микс заглавных и строчных, если что....
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067433
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
И все дружно забывают, что это ТОЛЬКО рекомендации. Давайте тогда обсудим, имеет ли право на жизнь конструкция типа:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 if ()  then
   BEGIN
      bla-bla
      if () then
         begin
               ....
         end
     else
        begin
                ....
        end
   END
ELSE
   ......


Я про микс заглавных и строчных, если что....
Кроме этого микса, еще и похоже на те кейсы из рекомендаций.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067437
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Во всяком случае - более наглядно с отступами, как по мне...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067443
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А мне нравиЦа!)) Сами практически так пишем
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067447
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
А мне нравиЦа!)) Сами практически так пишем

За что вам отдельное cпасибо. Читать легко и приятно.
* А то, экономщики строчек, как наведут "красоту компактности", так и выискивай потом по диагоналям - к какому там begin относится этот end,
или ещё хужей позаботятся - намусорят комментариями "end; // for if | for for | for do"..
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067463
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ma1tus
* А то, экономщики строчек, как наведут "красоту компактности", так и выискивай потом по диагоналям - к какому там begin относится этот end

А подсветка синтаксиса на что? Правильный end же сам подсветится.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067467
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zedxxx
ma1tus
* А то, экономщики строчек, как наведут "красоту компактности", так и выискивай потом по диагоналям - к какому там begin относится этот end

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

Ага, особенно когда тебе надо быстро посмотреть кусок кода без запуска среды, например на GitHub'e.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067470
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster> Давайте тогда обсудим, имеет ли право на жизнь конструкция типа:

Давайте обсудим.
1. Не имеет.
2. Где ты её увидел?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067488
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067512
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+1
Всё красиво. Но case c begin глаз режет. Имхо, так лучше
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  case x of
    csStart:
    begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut:
    begin
      j := x;
      x := UpdateValue;
    end;    
  end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067519
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
И все дружно забывают, что это ТОЛЬКО рекомендации
Перед тем, как сходить в туалет рекомендуется снять трусы. Но это всего лишь рекомендация. Никто никого не заставляет))
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067539
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Fr0sT-Brutal
пропущено...

Я так и пишу)
+1
Всё красиво. Но case c begin глаз режет. Имхо, так лучше
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  case x of
    csStart:
    begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut:
    begin
      j := x;
      x := UpdateValue;
    end;    
  end;

А еще лучше - так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  case x of
    csStart: begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;    
  end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067545
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Вообще идеально. В смысле идеальный фарш. Сиди и одупляйся - где метки, где код, и к какому begin относится вот этот конкретный end.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067557
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
А еще лучше - так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  case x of
    csStart: begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;    
  end;

Не не не не не!!! (с) Зохан
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067559
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
А еще лучше - так:

Раз здесь соревнование троллей, то я, пожалуй, скажу, что лучше записать этот case в одну строку.
Хотя нет. Лучше в две.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067561
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как вам это:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
case x of
  csStart  : begin
               j := UpdateValue;
             end;
  csBegin  : x := j;
  csTimeOut: begin
               j := x;
               x := UpdateValue;
             end;
else
   j := x+1;
end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067562
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  case x of
    csStart: begin
      j := UpdateValue;
    end;

    csBegin: begin  
      x := j;
    end;

    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;    
  end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067566
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barmaley57
Fr0sT-Brutal
пропущено...

Я так и пишу)
+1
Всё красиво. Но case c begin глаз режет. Имхо, так лучше
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  case x of
    csStart:
    begin
      j := UpdateValue;
    end;
    csBegin: x := j;
    csTimeOut:
    begin
      j := x;
      x := UpdateValue;
    end;    
  end;


В варианте рекомендации лучше видны разные варианты case, тут их выискивать в тексте нужно, а там сразу видны.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067568
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980
А как вам это:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
case x of
  csStart  : begin
               j := UpdateValue;
             end;
  csBegin  : x := j;
  csTimeOut: begin
               j := x;
               x := UpdateValue;
             end;
else
   j := x+1;
end;

Самый читабельный вариант, ИМХО. И для одного оператора я бы не делал бегин/энд.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067569
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980
А как вам это:

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

Код: pascal
1.
2.
case x of
  csFirst, csSecond, csThird..csFouth, csFifth: ...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067573
Близнец1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Один из лучших вариантов. Разве что else я делаю тоже с отступом. Но как я уже говорил, этот вариант неудачен в случае

Код: pascal
1.
2.
case x of
  csFirst, csSecond, csThird..csFouth, csFifth: ...



Можно ведь так, что-бы далеко не убегало:
Код: pascal
1.
2.
3.
4.
5.
    case x of
       csFirst,
       csSecond,
       csThird,
       csFifth  : ...
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067574
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980
Можно ведь так, что-бы далеко не убегало:

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

Код: pascal
1.
2.
3.
case x of
  csFirst, csSecond, csThird..csFouth, csFifth:
    ...


значительно лучше.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067596
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
YuRock,

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  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;



Идеально. Никакой лапши, как в вариантах выше.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067598
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980
А как вам это:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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 нет двух пробелов, ну да ладно, и так всё видно.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067599
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zedxxx
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  case x of
    csStart: begin
      j := UpdateValue;
    end;

    csBegin: begin  
      x := j;
    end;

    csTimeOut: begin
      j := x;
      x := UpdateValue;
    end;    
  end;

Нормально. Хотя и две пустые строки - на любителя, но вполне, и намного лучше, чем begin с новой строки и с нового уровня.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067600
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Близнец1980
softwarer
Один из лучших вариантов. Разве что else я делаю тоже с отступом. Но как я уже говорил, этот вариант неудачен в случае

Код: pascal
1.
2.
case x of
  csFirst, csSecond, csThird..csFouth, csFifth: ...




Можно ведь так, что-бы далеко не убегало:
Код: pascal
1.
2.
3.
4.
5.
    case x of
       csFirst,
       csSecond,
       csThird,
       csFifth  : ...

+++
Я так всегда делаю.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067624
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня всегда begin с новой строки. Кроме случаев, когда короткие блоки в одну строчку
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067627
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
У меня всегда begin с новой строки.
Не всегда. В паскале достаточно конструкций, где нет begin, но есть end. Типа class, case, record, try...
Они, наверно, портят твой код, ведь такие блоки начинается не после доп. строки begin, а сразу. Или ты в таких случаях пустую строку добавляешь для единообразия с комментарием //begin?
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067635
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Типа class, case, record, try...
Они, наверно, портят твой код, ведь такие блоки начинается не после доп. строки begin, а сразу. Или ты в таких случаях пустую строку добавляешь для единообразия с комментарием //begin?

Там само ключевое слово вместо begin.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067639
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockFr0sT-Brutal> У меня всегда begin с новой строки.
Не всегда. В паскале достаточно конструкций, где нет begin, но есть end.

А - Логика. Почему А? Потому что Альтернативная.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067648
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
YuRock
Типа class, case, record, try...
Они, наверно, портят твой код, ведь такие блоки начинается не после доп. строки begin, а сразу. Или ты в таких случаях пустую строку добавляешь для единообразия с комментарием //begin?

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

А на самом деле всё просто - все блоки заканчиваются end (и тут есть исключение - repeat until, ну ладно), и не надо видеть, где там begin, чтобы всё было наглядно. То, что end - это конец блока - видно всегда и всем, при нормальном структурировании без лишних уровней в виде лапши.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067650
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
YuRockFr0sT-Brutal> У меня всегда begin с новой строки.
Не всегда. В паскале достаточно конструкций, где нет begin, но есть end.

А - Логика. Почему А? Потому что Альтернативная.Ну да, я живу в такой реальности: мне кажется, что запутаться в двух уровнях структурирования сложнее, чем в трёх уровнях.
Кто живёт в другой реальности - пожалуйста, я ж не против.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067705
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
То, что end - это конец блока - видно всегда и всем, при нормальном структурировании без лишних уровней в виде лапши.

Когда кейз структурирован как лапша выше - не видно где начинается конретный блок. Потому что перед ним может идти несколько однострочников без end.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067707
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
YuRock
То, что end - это конец блока - видно всегда и всем, при нормальном структурировании без лишних уровней в виде лапши.

Когда кейз структурирован как лапша выше - не видно где начинается конретный блок. Потому что перед ним может идти несколько однострочников без end.
Всегда видно, если есть отступ в два пробела.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067741
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock> Ну да, я живу в такой реальности

Перечитай ещё раз внимательно, что и на что ты отвечал.
Но да, проще продолжать упорствовать и вещать про уровни.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067751
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откровенно говоря волосы на голове шевелились, когда читал этот топик. Есть же стандарт форматирования делфи-кода (что от самой эмбаркадеры, что от каких-нибудь jvcl -- разница минимальна). Но народ все-равно упорно отказывается его соблюдать, и каждый придумывает свой собственный стиль. Зачем?
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067752
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JayDi,

если было бы всё так просто. В так называемом стандарте форматирования кода от самой эмбы нет ни слова об использовании допустим тех же {$REGION} или той же XML-документации. Хотя сама же Эмба в новых модулях их использует, причем одни модули оформлены в одном стиле, в других в другом и т.д.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067754
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JayDi
каждый придумывает свой собственный стиль. Зачем?

Потому что это вкусовщина.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067755
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот пример требования из 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 быть не должно принципиально
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067756
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JayDi> Зачем?

1. Стандартов может быть (и есть) больше одного.
2. Стандарт оформления - это, как правило, рекомендация, а не догма.
3. Кому-то какой-то стандарт может не нравиться/быть неудобным.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067757
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> 1. Стандартов может быть (и есть) больше одного.

1.1. Стандарт (даже одного авторства) может меняться со временем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067763
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Устаревшее требование, сейчас как раз никаких добавлений вида bk быть не должно принципиально

Добавлений не должно быть при $SCOPEDENUMS ON, не?..
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067774
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JayDi
Откровенно говоря волосы на голове шевелились, когда читал этот топик. Есть же стандарт форматирования делфи-кода (что от самой эмбаркадеры, что от каких-нибудь jvcl -- разница минимальна). Но народ все-равно упорно отказывается его соблюдать, и каждый придумывает свой собственный стиль. Зачем?
Я на паскале начинал так писать, как сейчас пишу, когда даже не знал еще, что такое интернет.
А когда узнал - у меня еще его не было много-много лет.
О каких таких стандартах тогда могла речь идти? Я придумал свои, и меня они устраивают полностью.
А сейчас кто-то там что-то придумал, и я должен ломать привычки, которые нарабатывал десятилетиями?
Это риторический вопрос.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067805
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
А сейчас кто-то там что-то придумал, и я должен ломать привычки, которые нарабатывал десятилетиями?
Это риторический вопрос.

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

К сожалению, инфраструктура делфи-разработки долгое время игнорировала подобные требования, в результате получили то, что получили (каждый делает так, как ему нравится). Настройки и форматирование кода появилось относительно недавно; про умное форматирование при написании/вставки, видимо, можно забыть. Делаю ставку на то, что во всём виноват кривой код инсайт, который не позволял долгое время хоть что-то сделать при работе с кодом.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067807
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
JayDi
YuRock
А сейчас кто-то там что-то придумал, и я должен ломать привычки, которые нарабатывал десятилетиями?
Это риторический вопрос.

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


в другой будет другой стиль
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067812
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
в другой будет другой стиль

В 95% случаев это будет стиль, созданный на основе официального (ака из интернетов по запросу "delphi оформление кода").
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067813
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
JayDi
defecator
в другой будет другой стиль

В 95% случаев это будет стиль, созданный на основе официального (ака из интернетов по запросу "delphi оформление кода").

как раз таки вовсе нет
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067817
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JayDi
defecator
в другой будет другой стиль

В 95% случаев это будет стиль, созданный на основе официального (ака из интернетов по запросу "delphi оформление кода").
В моей организации стандартом является мой стиль.
Хотя в некоторые куски я не лезу, там бывает другой, но если мне приходится рефакторить - переделываю под свой, иначе ничего не вижу в этих конченых end else begin в три строки.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40067833
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
А когда узнал - у меня еще его не было много-много лет.
О каких таких стандартах тогда могла речь идти? Я придумал свои, и меня они устраивают полностью.
А сейчас кто-то там что-то придумал, и я должен ломать привычки, которые нарабатывал десятилетиями?
Работа в команде требует выработки code rules
defecator
JayDi
пропущено...
В 95% случаев это будет стиль, созданный на основе официального (ака из интернетов по запросу "delphi оформление кода").

как раз таки вовсе нет
В большинстве крупных вендоров все же ближе к Ембаркадеровскому
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40068253
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock, white_nigger
я думаю если компания хочет платить за такие глупости, то почему бы и нет
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069492
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это обсуждение перенесло меня в 80 годы прошлого столетия. Тогда очень много спорили у кого программа более структурная. Учитывая интерес к этой теме я решил немного написать. Постараюсь сделать это небольшими сообщениями.

Настоящие программисты меряются длиной своих программ в строчках.
Поэтому для таких ключевых слов, которые слабо влияют на функциональные возможности программы: uses, const, var, begin выделяют отдельную строку. Возможно, это осталось с тех времен, когда программистов оценивали по количеству строк их программ.

Из трех конструкций, необходимых и достаточных, для реализации любой программы, сначала рассмотрим линейную последовательность операторов. Очевидной записью последовательности операторов является O1; O2; ...; Оn. Но эту последовательность операторов решили назвать "блоком операторов" и обрамить её специальными словами: begin O1; O2; ...; Оn end. Точка с запятой разделяют операторы, а не завершают их. Конструкция O1;; O2 равносильна O1, пустой оператор, O2. Это позволяет добиться эффекта завершения команды символом ; (как исключение, К; else запрещена).

Теперь возник вопрос "как удобно расставлять begin'ы?!", который я свел бы к вопросу "Как расставить begin'ы, чтобы нагляднее отразить структуру программы?". А этот вопрос, в свою очередь, приводит к структурному программированию, основной смысл которого заключается в уменьшении вероятности появления ошибок программиста в разрабатываемых им программах.
Как только ОП доходит до реализации метода оно заканчивается и начинается СП.

В некоторых ЯП слово begin заменили на скобку { и преподали это как преимущество одного языка перед другим.

Но есть и языки, в которых обрамление последовательности операторов убрали совсем. В результате вопрос "Как расставить begin'ы?" стал бессмысленным.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069493
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь перейдем к второй конструкции, ветвлению. Здесь используются ключевые слова if, then и else. Причем, else является необязательным элементом. Отметим, что части then и else являются альтернативными частями одной конструкции, т.е. в зависимости от условия выполняется только одна часть этой конструкции.

В следующих двух примерах однозначно указано, что части else нет. Так же begin не затеняет сути оператора, а end четко указывает, какой if закончился.
Код: pascal
1.
2.
3.
4.
5.
6.
 if a<b then b:=a;

 if a<b then begin
    b:=a;
    c:=b
 end;


В следующих трех примерах однозначно видно, что есть обе части then и else, и хорошо видна их альтернативность. Обрамление последовательности операторов не сильно загромождает смысл всей конструкции.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 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 во вложенных условных операторах является потенциальным источником трудноуловимых ошибок.

Т.е. оператор ветвления может выглядеть так:
Код: pascal
1.
2.
3.
4.
5.
6.
 if a<b
  then b:=a;
       c:=a
  else a:=c;
       b:=0
 end;



Если нужно иметь более двух альтернатив, то можно так:
Код: pascal
1.
2.
3.
4.
5.
 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 после каждой альтернативы писать не нужно. Можно было бы использовать в качестве обрамления последовательности операторов : и какой-нибудь символ, например, #.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
case x of
  csStart,
  csStart1  :j := UpdateValue;
  csBegin   :x := j;
  csTimeOut :begin
               j := x;
               x := UpdateValue;
             end;
  else       j := x+1;
end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069494
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Осталась третья конструкция: повторение.

Известное число повторений:

Код: pascal
1.
2.
3.
4.
5.
6.
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.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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;


В языке не хватает оператора повторения с выходом из середины цикла:
Код: pascal
1.
2.
3.
4.
5.
loop
 ..
 if .. then break;
 ..
end;



Это избавило бы от такой искусственной конструкции while true do или, что еще хуже while условие do … break… .
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069498
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь применим написанное выше к некоторым примерам из этого обсуждения.

На странице 2 ( 22309826 ) предложили такое упрощение:
Код: pascal
1.
2.
  if Key = VK_DELETE then DeleteSomething(FSelRow);
  if Key = VK_RETURN then ReturnSomething(FSelRow);


Key не может быть одновременно VK_DELETE и VK_RETURN, поэтому лучше написать так:
Код: pascal
1.
2.
  if       Key = VK_DELETE then DeleteSomething(FSelRow)
   else if Key = VK_RETURN then ReturnSomething(FSelRow);


Но, если не вдаваться в смысл, то тогда так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
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
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  if () then
  begin
    while () do
    begin
      try
      except
      end
    end
  end
end


можно записать так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
begin
  if () then begin
     while () do begin
           try
           except
          end
     end
  end
end


Конечно, можно говорить о рудиментах структурного программирования, но конструкция
Код: pascal
1.
2.
3.
4.
5.
6.
7.
begin
  if not () then exit;
  while () do
  try
  except
  end;
end;


явно неудачная. По сути дела, exit ничем не отличается от goto, что было показано в 22310217 . Т.е. ни goto, ни exit сами по себе не плохие, даже эффективнее других по быстродействию. Одно но… их бесконтрольное использование плохо.

Фрагмент из примера 22310137
Код: pascal
1.
2.
3.
4.
5.
  if not Fro then begin // если документ открыт не в режиме "Только для чтения"
    if CheckKolZero then begin // если есть позиции с кол=0
       ... 
    end;//if
  end;//if


редуцируется к
Код: pascal
1.
2.
3.
4.
  if    not Fro      // если документ открыт не в режиме "Только для чтения"
    and CheckKolZero // и есть позиции с кол=0
    ...
  end;



Все, пора остановиться.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069500
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
begin не затеняет сути оператора, а end четко указывает, какой if закончился.
+1
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069501
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
Запись оператора ветвления, когда if и else записаны с одинаковым отступом,
if
...
else
является неудачной, так как можно понять, что независимо от условия всегда выполняется часть else.
Тут я не вижу логики. Ничего такого нельзя понять, это абсурд.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069502
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
Досрочный выход из цикла for я бы запретил на уровне языка. Если сказали, что от 1 до N, то до N и не раньше.
Это уже маразм.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069503
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, ниасилил))
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40069530
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l,

Код: pascal
1.
if a<b then b:=a;

хорошая компактная запись, но у таких конструкций есть одно плохое свойство: на срабатывание их условия очень тяжело поставить точку останова
Код: pascal
1.
2.
if a<b then 
  b:=a;

- здесь и тут:
Код: pascal
1.
2.
3.
if a<b then begin
  b:=a;
end;


это гораздо проще

ещё таких же вещей добавил итератор
Код: pascal
1.
2.
for s in Strings do
  DoSomething(s);

если поставить точку остановки на DoSomething, то она будет срабатывать и на завершение цикла

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

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure ....
begin
  if Condition then
    begin
      ... пятьдесят строк кода ...
    end
  else
    begin
       ... пять строк кода ...
    end;
    with VarName do
    begin
      ... сто строк кода ...
    end;
end;
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074056
Фотография Дикий Билл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у меня и выбора нет.
На работе официальное указание, одна точка выхода из процедуры.
И никаких дискуссий :)
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074058
Фотография Дикий Билл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну единственно все стараются их короткими делать.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074065
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дикий Билл
А у меня и выбора нет.
На работе официальное указание, одна точка выхода из процедуры.
И никаких дискуссий :)


это п...ц
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074086
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
это п...ц

Причем такая фишка тянется из-за доисторических делфей, в которых не было нормального выделения точки выхода. К вопросу о том, как "хорошо" сидеть на делфи 7 и других ископаемых.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074092
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JayDi,

несомненно, это единственная причина
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074094
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
JayDi,

несомненно, это единственная причина

Нет, одна из. Причем не от хорошей жизни. Как и многие другие стандарты оформления/написания кода, которые тянутся с давних времен (как в авиации все правила написаны кровью, так и в программировании все правила написаны миллионами пойманных багов).
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074097
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
JayDi
Aleksandr Sharahov
JayDi,

несомненно, это единственная причина

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

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

И в целом, прежде чем носить в сердце какие-то идеи, стоит понимать, в какой среде и в каком контексте они рождались. Расскажу, например, одну поучительную для молодёжи историю. Знаете, как в пятидесятых годах делали overloading подпрограмм? Ну начать стоит с того, как делали сами подпрограммы. Был язык Фортран, и там подпрограмма записывалась как

Код: sql
1.
2.
3.
      SUBROUTINE MYNAME(A, B, C)
      ....
      END


а вот для overloading-а там была специальная конструкция, которая называлась ENTRY. Альтернативный вход в подпрограмму. И с ней подпрограмма принимала примерно такой вид:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
      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 параметрами. И когда в какой-нибудь старой статье написано про вред многих входов в подпрограмму - надо понимать, что у автора перед глазами стояло именно это, а не то, о чём вы подумали.
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074134
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Идея единственного выхода из подпрограммы умерла вместе с появлением исключений
Плюсую
...
Рейтинг: 0 / 0
Флейм про оформление и begin-end
    #40074279
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дикий Билл
А у меня и выбора нет.
На работе официальное указание, одна точка выхода из процедуры.
И никаких дискуссий :)
этот момент явно копипастер писал
...
Рейтинг: 0 / 0
261 сообщений из 261, показаны все 11 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Флейм про оформление и begin-end
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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