便便代码人生

关注技术, 偶尔动动手

[唉]Delphi怎么没有三目运算符(也叫三元运算符)

Posted by bianbian on 2008-01-13 08:22


本文Tags: ,

虽然自己写了一个iif函数,还是有问题的:

  1. function iif(const bool: Boolean; const ifSucc, ifFail: Variant): Variant;
  2. begin
  3.   if bool then
  4.     Result := ifSucc
  5.   else
  6.     Result := ifFail;
  7. end;

问题是传进的参数事先是已经被计算出值了,就会导致问题:

1)重复计算。比如:如果bool为真,输出txt,否则在之前加几个空格再输出txt
iif(bool, txt, ' ' + txt);
如果bool为真,按三目运算的规则,' ' + txt 是不会执行到的。不过这里做参数,只能重复计算,效率比if else 低

2)避免不了某些会导致异常的代码
原因还是因为参数会事先计算。比如:如果是目录,输出0,否则输出文件最后修改时间:
iif(Isdir(PathFileName), 0, FileDateToDateTime(FileAge(PathFileName)));
如果PathFileName是目录,FileAge()函数会抛出异常。
按三目运算规则,异常的代码是不应该被执行到的;但这里作参数,一旦是个目录每次必定抛异常,还得改成if else

还没想到好的解决办法,难道用Callbak函数回调?太夸张了点。。。。汗。。。。。

标签: ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

Posted in Delphi, Technology | No Comments »