Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Вниз

ленивые вычисления   Найти похожие ветки 

 
RWolf ©   (2010-01-05 17:40) [0]

Допустим, нужно вывести в лог строчку, если установлен флаг отладки.
Конструкция вида if DebugFlag then WriteLog(s) загромождает исходники, поэтому пишем процедуру
procedure Debug(const s:string);
begin
 if DebugFlag then WriteLog(s)
end;

Всё бы хорошо, но теперь s вычисляется всегда, независимо от значения DebugFlag — лишняя загрузка CPU.
Есть ли простая в плане читаемости синтаксическая конструкция вроде вышеупомянутого вызова процедуры Debug, чтобы передаваемая в неё строка вычислялась в зависимости от условия?
скажем, в Си можно было бы просто определить макрос
#define DEBUG(...) if (DebugFlag) printf(__VA_ARGS__)


 
Jeer ©   (2010-01-05 17:49) [1]

Т.е. посмотреть/почитать о {$IFDEF whoiswho}.. {$ELSE}.. {$ENDIF} не судьба ?


 
RWolf ©   (2010-01-05 17:50) [2]

Jeer ©   (05.01.10 17:49) [1]
речь не об условной компиляции, нужен именно runtime.


 
Jeer ©   (2010-01-05 18:11) [3]

1. Если говорить о варианте дебаг/боевой - чем мешает IFDEF ?
2. Не вижу проблем в:
if gDebug then MyDebugLog(s);

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


 
grammar-nazi   (2010-01-05 18:14) [4]

> RWolf ©   (05.01.10 17:50) [2]
> речь не об условной компиляции, нужен именно runtime.

как это согласовывается с

> RWolf ©   (05.01.10 17:40)  
> скажем, в Си можно было бы просто определить макрос
> #define DEBUG(...) if (DebugFlag) printf(__VA_ARGS__)
?


 
Демо ©   (2010-01-05 18:15) [5]


> Всё бы хорошо, но теперь s вычисляется всегда,


Что значит "вычисляется"?
В функцию передаётся ссылка - и всё.
Какая тут лишняя загрузка процессора?


 
grammar-nazi   (2010-01-05 18:19) [6]

> Демо ©   (05.01.10 18:15) [5]
> Что значит "вычисляется"?
> В функцию передаётся ссылка - и всё.
> Какая тут лишняя загрузка процессора?

вот то, на что указывает ссылка, передаваемая в функцию, и вычисляется.


 
Кука съела ник   (2010-01-05 18:26) [7]


> Какая тут лишняя загрузка процессора?


DebugLog (Format("%s%s%s%s", ["aaa"+foo, "bbb"+bar,"ccc"+bazz,"ddd"+blinch])


 
Демо ©   (2010-01-05 18:28) [8]


> вот то, на что указывает ссылка, передаваемая в функцию,
>  и вычисляется.


Ну раз в рантайм, только конструкция if DefDebug then...


 
RWolf ©   (2010-01-05 18:59) [9]


> grammar-nazi   (05.01.10 18:14) [4]

> как это согласовывается с
> #define DEBUG(...) if (DebugFlag) printf(__VA_ARGS__)


макрос DEBUG("x=%d\n", x) развернётся в if (DebugFlag) printf("x=%d\n", x)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
2-1262618923
Делфией
2010-01-04 18:28
2010.03.07
Не могу придумать как распознать в каком контроле вызван Аction


10-1164100105
yaJohn
2006-11-21 12:08
2010.03.07
Получить бинарные данные из внешнего OLE сервера


2-1262284745
Zimmin
2009-12-31 21:39
2010.03.07
Как упростить ввод повторяющихся записей? ADO+Access


15-1261271160
Игорь Шевченко
2009-12-20 04:06
2010.03.07
К вопросу о локализации среды


6-1212825133
Андрей
2008-06-07 11:52
2010.03.07
Отправка информации по сокетам





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский