Статья: Как сократить код торгового эксперта, попутно упростив себе жизнь и уменьшив число возможных ошибок - страница 2

 
... И вообще, все эти iif'ы & Co. от лукавого (сугубое ИМХО). Пишите условия явно, и чорт с ним, сколько там будет скобок. Считайте по отступам, и будет вам щастья вагон.
З.Ы. Не знаете и ведаете, и даже духом не чуете, что такое, например, писать на ЛИСПе под ДОСом. Ясное дело, "поколение пепси".
 
А мне кажется, очень разумная статья. Я и сам недолюбливаю код с функциями более 50 строк длиной, и у меня частенько бывают функции с телом из одной строки. Иначе появляются шедевры (например, ZigZag), в полном алгоритме которых разбираются несколько человек в трейд-инете (зато с отступами там все нормально)... Ну а что касается iif(), то, конечно, именно такая реализация годится именно для одного эксперта (все зависит от типов возвращаемых данных).

alexjou, на LISP не писал, но Turbo Prolog под DOS все же преподавал в курсе ИИ, и даже курсовики были такие, чтобы что-нибудь такое сделать на этом языке. Мозги там явно надо как-то иначе вывернуть, но гимнастика для серого вещества полезная...
 
Mathemat:
Ну а что касается iif(), то, конечно, именно такая реализация годится именно для одного эксперта (все зависит от типов возвращаемых данных).

Не соглашусь. Здесь как раз в реализации функции iif() намеренно используется тип double. Благодаря правилам приведения типов в MQL4, это позволяет функции корректно работать со всеми типами кроме строковых: double, int, datetime (который по сути является типом int), color (тоже int) и bool (однако использовать функцию с типом bool бессмысленно). Т.е. диапазон применения функции очень широк и годится для более чем одного эксперта. К сожалению, для строковых значений приходится писать и использовать отдельную функцию с другим названием, например string iifStr( bool, string, string ):

string iifStr( bool condition, string ifTrue, string ifFalse )
{
    if( condition ) return( ifTrue );
 
    return( ifFalse );
}