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


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