Вниз
Скачать: CL | DM;

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

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.007 c
3-1235917104
Den
2009-03-01 17:18
2010.03.07
TreeView и база данных


2-1260321681
cosinus
2009-12-09 04:21
2010.03.07
Как из видеофайла получить кодек, которым он сжат?


15-1261435653
Piter
2009-12-22 01:47
2010.03.07
Отпуск с точки зрения ТК РФ


15-1260997140
Кто б сомневался
2009-12-16 23:59
2010.03.07
Web при помощи Delphi


15-1261322445
oxffff
2009-12-20 18:20
2010.03.07
Сломать палец на ноге на ровном месте не проблема.




   Наверх