powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сократить код
34 сообщений из 34, показаны все 2 страниц
Сократить код
    #40048960
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, может кто-нибудь знает можно ли как-то сократить такие макароны:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  if not edtSubject.Visible then
  begin
    if edtObject.Visible then
      edtNum.Left := edtObject.Left + edtObject.Width + 5
    else
      edtNum.Left := edtName.Left + edtName.Width + 5;
  end
  else
    edtNum.Left := edtSubject.Left + edtSubject.Width + 5;
...
Рейтинг: 0 / 0
Сократить код
    #40048964
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26.02.2021 14:10, wsnet пишет:
> Всем привет, может кто-нибудь знает можно ли как-то сократить такие макароны:

begin и end убери
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сократить код
    #40048966
DHDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnet,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var edt: TEdit;
...
	if edtSubject.Visible then edt:=edtSubject
	else if edtObject.Visible then edt:=edtObject
	else edt:=edtName;
	
	edtNum.Left := edt.Left + edt.Width + 5;
...
Рейтинг: 0 / 0
Сократить код
    #40048968
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CurLeft = 0;

If edtSubject.Visible then
  begin
   edtSubject.Left = CurLeft;
   Inc(CurLeft, etdSubject.Width + 5);
  end

If edtObject.Visible then
  begin
   edtObject.Left = CurLeft;
   Inc(CurLeft, etdObject.Width + 5);
  end

If edtName.Visible then
  begin
   edtName.Left = CurLeft;
   Inc(CurLeft, etdName.Width + 5);
  end


Сокращения кода нет, но читаемость повышается. При желании это можно спрятать под капот
функции с сокращением видимого кода:
Код: sql
1.
2.
3.
4.
CurLeft = 0;
SetLeft(edtSubject, CurLeft);
SetLeft(edtObject, CurLeft);
SetLeft(edtName, CurLeft);
...
Рейтинг: 0 / 0
Сократить код
    #40048969
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
edtNum.Left := IfThen(edtSubject.Visible, edtSubject.Left + edtSubject.Width, IfThen(edtObject.Visible, edtObject.Left + edtObject.Width, edtName.Left + edtName.Width)) + 5;


доработанный вариант DHDD :
Код: pascal
1.
2.
var edt: TEdit := TEdit(IfThen(edtSubject.Visible, Cardinal(edtSubject), IfThen(edtObject.Visible, Cardinal(edtObject), Cardinal(edtName))));
edtNum.Left := edt.Left + edt.Width + 5;
...
Рейтинг: 0 / 0
Сократить код
    #40048977
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
Код: pascal
1.
edtNum.Left := IfThen(edtSubject.Visible, edtSubject.Left + edtSubject.Width, IfThen(edtObject.Visible, edtObject.Left + edtObject.Width, edtName.Left + edtName.Width)) + 5;

Да. Можно еще пробелы убрать.
...
Рейтинг: 0 / 0
Сократить код
    #40048979
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function GetNextLeft(AControl: TControl): Integer;
begin
  Result := AControl.Left + AControl.Width + 5;
end;

var
  NextLeft: Integer;
begin
  if not edtSubject.Visible then
  begin
    if edtObject.Visible then
      NextLeft := GetNextLeft(edtObject)
    else
      NextLeft := GetNextLeft(edtName);
  end
  else
    NextLeft := GetNextLeft(edtSubject.Width);
  edtNum.Left := NextLeft;
end;


Или даже так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
function GetVisibleControl(const AControls: array of TControl): TControl;
var
  Li: Integer;
begin
  for Li := 0 to Length(AControls) - 1 do begin
    if AControls[Li].Visible then begin
      Result := AControls[Li];
      Exit;
    end;
  end;
  Result := nil;
end;

var
  LControl: TControl;
begin
  LControl := GetVisibleControl([edtSubject, edtObject, edtName]);
  if LControl = nil then
    raise Exception.Create('Visible control not found');
  edtNum.Left := LControl.Left + LControl.Width + 5;
end;


Если Делфи хотя бы 2006 версии, то функцию GetVisibleControl можно переписать так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
]function GetVisibleControl(const AControls: array of TControl): TControl;
begin
  for Result in AControls do begin
    if Result.Visible the
      Exit;
  end;
  Result := nil;
end;
...
Рейтинг: 0 / 0
Сократить код
    #40048981
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DHDD
wsnet,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var edt: TEdit;
...
	if edtSubject.Visible then edt:=edtSubject
	else if edtObject.Visible then edt:=edtObject
	else edt:=edtName;
	
	edtNum.Left := edt.Left + edt.Width + 5;

Самый норм. вариант. Можно еще edt переименовать в edtLeft для большей очевидности.
...
Рейтинг: 0 / 0
Сократить код
    #40048986
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

классно. Имхо, лучше всех.
...
Рейтинг: 0 / 0
Сократить код
    #40049038
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Логика нарушена.

У тебя могут сработать все 3 условия сразу, а у него только одно из 3-х.
Это не говоря уже о том, что ты меняешь совсем не то(те) значение что топик-стартер.
...
Рейтинг: 0 / 0
Сократить код
    #40049042
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatЛогика нарушена.

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

Мой код делает "dynamic layout".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сократить код
    #40049098
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

а чё эти контролы просто в таблицу не загнать и удалить эту фигню?
...
Рейтинг: 0 / 0
Сократить код
    #40049132
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DHDD
wsnet,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var edt: TEdit;
...
	if edtSubject.Visible then edt:=edtSubject
	else if edtObject.Visible then edt:=edtObject
	else edt:=edtName;
	
	edtNum.Left := edt.Left + edt.Width + 5;


сорри, в синтаксисе delphi не силен, но, может быть, что-то в таком стиле:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var edt: TEdit;
  case (Integer(edtObject.Visible) + 2*Integer(edtSubject.Visible)) of
    0:  edt := edtName;
    1:  edt := edtObject;
  else edt := edtSubject;
  end;
  
  edtNum.Left := edt.Left + edt.Width + 5;
...
Рейтинг: 0 / 0
Сократить код
    #40049136
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
Код: pascal
1.
case (Integer(edtObject.Visible) + 2*Integer(edtSubject.Visible)) of

Очень наглядно и понятно
...
Рейтинг: 0 / 0
Сократить код
    #40049140
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
booby
Код: pascal
1.
case (Integer(edtObject.Visible) + 2*Integer(edtSubject.Visible)) of

Очень наглядно и понятно

2 логических переменных образуют 4 состояния, закодированные в виде 0,1,2,3,

edtObject.VisibleedtSubject.VisibleInteger(edtObject.Visible)Integer(edtSubject.Visible)(Integer(edtObject.Visible) + 2*Integer(edtSubject.Visible)) FalseFalse000TrueFalse101FalseTrue012TrueTrue113
Это наглядно, и понимать здесь особо нечего.
Простое принятие решения на основе значения выражения.
...
Рейтинг: 0 / 0
Сократить код
    #40049141
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,
за
Код: pascal
1.
Integer(x : Boolean)


- огребёшь когда-нибудь.
...
Рейтинг: 0 / 0
Сократить код
    #40049142
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
booby,
за
Код: pascal
1.
Integer(x : Boolean)


- огребёшь когда-нибудь.

я - точно нет: по счастью, дельфи целиком мимо меня прошел.
Ты дальше какашками с учетом этой оговорки кидайся, пожалуйста.
...
Рейтинг: 0 / 0
Сократить код
    #40049144
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
YuRock
пропущено...
Очень наглядно и понятно

2 логических переменных образуют 4 состояния, закодированные в виде 0,1,2,3,

edtObject.VisibleedtSubject.VisibleInteger(edtObject.Visible)Integer(edtSubject.Visible)(Integer(edtObject.Visible) + 2*Integer(edtSubject.Visible)) FalseFalse000TrueFalse101FalseTrue012TrueTrue113

Это наглядно, и понимать здесь особо нечего.
Простое принятие решения на основе значения выражения.За такую "наглядность" надо наказывать, без обид.
Можете воинствующе упорствовать в своём мнении, это ничего не меняет.
...
Рейтинг: 0 / 0
Сократить код
    #40049145
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
...
Можете воинствующе ...


да, себя-то вы и не читаете...

Ну, раз вы знаете, за что надо наказывать, то персонально вас я освобождаю от обязанности следовать моим советам.
...
Рейтинг: 0 / 0
Сократить код
    #40049148
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

...Мой код делает "dynamic layout".


кстати, в этих терминах, по вероятности, прототип кода (с вероятным будущим делением) выглядит как-то так:
Код: 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.
Procedure Show_And_Adjust(iopt :Integer);
  var 
     edt: TEdit;
Begin

  //1) HideAll
  edtSubject.Visible := False;
  edtObject.Visible := False;
  edtName.Visible := False;

  //2) Select showable
  case iopt of
    0:  edt := edtName;
    1:  edt := edtObject;
  else edt := edtSubject;
  end;

  //3) show  
  edt.Visible := True;
   
  //4) adjust right child
  edtNum.Left := edt.Left + edt.Width + 5;

End;



совершенно очевидно, что это безусловно наказуемый подход за недостаточностью ифов.
...
Рейтинг: 0 / 0
Сократить код
    #40049149
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
Всем привет, может кто-нибудь знает можно ли как-то сократить такие макароны:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  if not edtSubject.Visible then
  begin
    if edtObject.Visible then
      edtNum.Left := edtObject.Left + edtObject.Width + 5
    else
      edtNum.Left := edtName.Left + edtName.Width + 5;
  end
  else
    edtNum.Left := edtSubject.Left + edtSubject.Width + 5;



Код: pascal
1.
2.
3.
    edtNum.Left := ( ( edtSubject.Left + edtSubject.Width + 5 ) * Ord( edtSubject.Visible ) ) +
                   ( ( edtObject.Left  + edtObject.Width  + 5 ) * Ord( edtObject.Visible  ) ) +
                   ( ( edtName.Left    + edtName.Width    + 5 ) * Ord( not edtObject.Visible ) );


Вариант вырви глаз :)
...
Рейтинг: 0 / 0
Сократить код
    #40049152
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Загоните в панель + AlignWithMargins
...
Рейтинг: 0 / 0
Сократить код
    #40049204
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747
wsnet,

Загоните в панель + AlignWithMargins

Красивый вариант, но, к сожалению, если играть свойством visible может нарушиться порядок расположения компонентов и все одно придется выставлять .left что бы его восстановить.
...
Рейтинг: 0 / 0
Сократить код
    #40049210
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
предлагаю переписать на ассемблере !
...
Рейтинг: 0 / 0
Сократить код
    #40049290
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wsnet,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function L (AControl: TControl): boolean;
begin
  Result :=  AControl.Visible;
  if  Result then 
    edtNum.Left := AControl.Right + 5;
end;

if not L (edtNum) then 
  if not L (edtObject) then 
    L (edtName);



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

Да запросто. Адекватно расставить свойство Align, а эту хрень просто выкинуть.

booby
сорри, в синтаксисе delphi не силен, но, может быть, что-то в таком стиле:

Зачем? Выгоды-то никакой.

YuRock
Очень наглядно и понятно:

Как тебе сказать... тот, кому это непонятно, программистом не является.
...
Рейтинг: 0 / 0
Сократить код
    #40049296
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swame2
wsnet,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function L (AControl: TControl): boolean;
begin
  Result :=  AControl.Visible;
  if  Result then 
    edtNum.Left := AControl.Right + 5;
end;

if not L (edtNum) then 
  if not L (edtObject) then 
    L (edtName);




Но это для этого конкретного случая, для других может быть что-то другое (дополнительная параметризация).
Для Right пишется хелпер
Индийское кино вновь стало популярным.
...
Рейтинг: 0 / 0
Сократить код
    #40049298
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer

YuRock
Очень наглядно и понятно:

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

Это, конечно, правильно, но это даже не мнение. Программистов в самом начале пути учат булёвой алгебре, битовым операциям и ряду других полезных навыков. Для программистов это примерно то же самое, что для математиков - таблица умножения.
...
Рейтинг: 0 / 0
Сократить код
    #40049301
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Главное что бы потом не выяснилось что где то True/False это 1/0 а где-то -1/0 или, допустим, -1/1.
...
Рейтинг: 0 / 0
Сократить код
    #40049302
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
softwarer,

Главное что бы потом не выяснилось что где то True/False это 1/0 а где-то -1/0 или, допустим, -1/1.
Дело даже не в этом, это понятно.

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

Зачем? Выгоды-то никакой.
...

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

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

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

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

Конечно, я исхожу из того, что "программирую, как все", и то, что удобно для меня, автоматически удобно и для всех других программистов .
Поскольку суждение субъективное, оно имеет право произвольным образом не совпадать с чьим-то другим субъективным мнением.
...
Рейтинг: 0 / 0
Сократить код
    #40049318
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Главное что бы потом не выяснилось что где то True/False это 1/0 а где-то -1/0 или, допустим, -1/1.

При желании подстраховаться от этого можно использовать Ord() вместо приведения типа, суть от этого не меняется. Но ведь это же не Си, где об этом приходилось думать. То, что не меняется как минимум с 1986-го года, по мне, достаточно надёжно :)

YuRock
утверждая на этот раз, что вместо очевидных условий лучше использовать вычисление

И вот пошло обычное враньё.

booby
Для меня именно эта форма минимизирует шанс при первом чтении неверной интерпретации кода в целом или пропуска важной детали.

А зря. Это уже похоже на бюрократа, которому предложение на канцелярите ближе и роднее прямой речи. К тому же, подход плохо масштабируем. Представьте себе, что полей не три, а восемь, и прикиньте, во что выльется в таком случае вариант DHDD, а во что - Ваш.

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

Конечно, "лёгкость чтения" - понятие не очень формализуемое, но всё же отмечу, что суть Вашего подхода - скомбинировать несколько объектов в один битовый вектор только ради того, чтобы по его результату снова выбрать единственный объект. Это не очень похоже на наиболее очевидный и понятный путь, назовём так. В то же время единственное, чего не хватает коду DHDD для оптимальности чтения - это комментария над if-ом "Выберем самый правый из видимых edit-ов".

P.S. На всякий случай отмечу, что в предложенных решениях присутствует один общий недостаток - они не учитывают, что такой фрагмент не единственный. Природа задачи, где перед полем ещё минимум два возможно видимых edit-а, подразумевает, что их тоже надо выравнивать. Как я уже сказал выше, оптимально это сделать без кода, дизайновыми средствами. Я, например, использую для этого свои компоненты layot-а. Но если делать это кодом, то оптимально будет примерно так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure LeftAlign(Controls: array of TControl);
var
  Control: TControl;
  Caret: integer;
begin
  Caret := 5;
  for Control in Controls do
    if Control.Visible then
    begin
      Control.Left := Caret;
      Inc(Caret, Control.Width + 5);
    end;
end;

  ...
  LeftAlign([edName, edObject, edSubject, ... последующие поля ...]);
  ...
...
Рейтинг: 0 / 0
Сократить код
    #40049332
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
...
суть Вашего подхода - скомбинировать несколько объектов в один битовый вектор только ради того, чтобы по его результату снова выбрать единственный объект.

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

softwarer

В то же время единственное, чего не хватает коду DHDD для оптимальности чтения - это комментария над if-ом "Выберем самый правый из видимых edit-ов".

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

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

Главное , что сделал DHDD - разделил их на независимые фрагменты, годные к немедленному превращению в цепочку параметризованных функций.

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


softwarer

...такой фрагмент не единственный. Природа задачи, где перед полем ещё минимум два возможно видимых edit-а, подразумевает, что их тоже надо выравнивать.

Вот именно - природа задачи .
И тот, кто формирует список таких котролов, чтобы потом натравить на него простой цикл выравнивания (не содержащий ифов),
вполне может ориентироваться прямо на текущий код состояния автомата визуального состояния.
Форма case statement отлично обслужит и эту потребность.

И дело не в том, что case "вообще лучше", чем if, а, имхо, в том, что case отшелушивает конкретику мозговыносящих комбинаций конкретной версии визуального интерфейса, оставляя при этом возможность дальнейшего абстрагирования и замены себя впоследствии на "более подходящий объект"
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сократить код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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