powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Флейм про оформление и begin-end
25 сообщений из 261, страница 4 из 11
Флейм про оформление и 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
25 сообщений из 261, страница 4 из 11
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Флейм про оформление и begin-end
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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