Форум: "Основная";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
ВнизIIF Найти похожие ветки
← →
EternalWonderer (2002-04-11 12:52) [0]Задача: повысить читабельность кода путём применения вместо стандартной конструкции
If a<b
Then a
Else b;
бейсик - подобной функции
IIF(a<b,a,b);
Решается просто:
Function IIF(b: Boolean; sTrue,sFalse: String): String; Overload;
Begin
If b Then Result := sTrue Else Result := sFalse;
End;
Function IIF(b: Boolean; iTrue,iFalse: Integer): Integer; Overload;
Begin
If b Then Result := iTrue Else Result := iFalse;
End;
Но есть проблема:
IIF(MyObject<>Nil,MyObject.MyField,-1)
не пройдёт, потому что обращение к MyObject.MyField будет произведено независимо от того, истинно выражение или ложно.
Вопрос: Можно ли как - нибудь обойти это ограничение?
← →
wicked (2002-04-11 12:57) [1]имхо нельзя...
← →
gek (2002-04-11 13:03) [2]наверное надо проверять и
if MyObject.MyField <> nil
← →
Anatoly Podgoretsky (2002-04-11 13:10) [3]Обращение не произойдет!
Вот тебе реализация IIF
function IIF(Expr,TrueRet,FalseRet:Variant) : Variant;
begin
if Expr then Result := TrueRet else Result := FalseRet;
end;
← →
Игорь Шевченко (2002-04-11 13:12) [4]День добрый,
Нельзя. Попытки обойти это IMHO, ухудшат читабельность кода.
Но я не понимаю, зачем вообще огород городить...
Что касается читабельности - то у VCL очень читабельные коды, несмотря на отсутствие разного рода шаманских прибамбасов :-)
С уважением,
← →
Anatoly Podgoretsky (2002-04-11 13:13) [5]Извиняюсь в твоем варианте произойдет
← →
EternalWonderer (2002-04-11 13:46) [6]Anatoly Podgoretsky © (11.04.02 13:13)
Так ведь и в Вашем варианте произойдёт - при передаче параметра в функцию ...
Игорь Шевченко © (11.04.02 13:12)
Спасибо, обласкали :-). Надо перенимать хороший опыт у других языков. Кроме того, когда пишется длинная и сложная процедура IMHO желательно максимально упрощать код, вынося повторяющиеся фрагменты кода в отдельные функции - иначе никто не разберётся, в том числе автор. Вы поступаете иначе?
← →
EternalWonderer (2002-04-11 13:51) [7]Anatoly Podgoretsky © (11.04.02 13:13)
Секундочку ...
Речь шла о том, чтобы избежать обращение к несуществуюшему объекту при передаче параметров функции IIF. Конечно, если передавать функции ссылки на существующие объекты, всё работает без проблем, как в моём, так и в Вашем варианте.
← →
Игорь Шевченко (2002-04-11 13:52) [8]День добрый, EternalWonderer,
Да не за что :-))
Не стал бы я утверждать, что это хороший опыт. Человек, привыкший читать текст на паскале, будет лишний раз ломать голову, что за новая функция появилась. IMHO, конечно :-)
Я тоже стараюсь выносить повторяющиеся куски кода в отдельные функции, но не до такой же степени :-)
Могу еще раз повторить, что VCL написана достаточно читабельно, без подобных нововведений.
С уважением, Игорь Шевченко
← →
Fantasist (2002-04-12 08:27) [9]А что по-моему в Delphi есть что-то типа С++-шного #define. Нет?
← →
Игорь Шевченко (2002-04-12 09:29) [10]День добрый, Fantasist,
Нету :-)
С уважением,
← →
Anatoly Podgoretsky (2002-04-12 09:47) [11]EternalWonderer (11.04.02 13:46)
Ты не смотри на мой варинт с этой стороны, он просто приведен как вариант IIF и не более
← →
REA (2002-04-12 10:52) [12]Вообще-то в Delphi 6 есть уже такая функция. Но имхо смысла в ней нет.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c