Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-80923
K@tusha
2002-04-11 13:33
2002.04.25
Перевеси цветную палитру в черно-белую


1-80908
Ivan Kohut
2002-04-14 21:12
2002.04.25
Проблема с TFileStream


7-81087
Ura
2002-01-23 12:46
2002.04.25
Определение принтера в системе (Повтор)


1-80902
Кулюкин Олег
2002-04-15 09:12
2002.04.25
ручная отрисовка ListView, проблемма при изменении ширины столбца


6-81013
Созонов Евгений
2002-02-14 10:17
2002.04.25
Получение информации (кто ? че делал ? время доступа ?) о доступе на свой комп.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский