在德尔福有条件运算符吗?还是有过吗?

前端之家收集整理的这篇文章主要介绍了在德尔福有条件运算符吗?还是有过吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我把我的手放在德尔福太久了,我猜;在过去的几年里,我经常使用Java和PHP。现在,当我回到做一点Delphi工作时,我意识到我真的错过了Java和PHP支持的条件运算符。

在你的Delphi程序中有多少个地方可以找到这样的行?

var s : string;
begin
  ...<here the string result is manipulated>...

  if combo.Text='' then
      s := 'null'
    else
      s := QuotedStr(combo.Text);

  result := result + s;
end;

其中一个简单

result := result + (combo.text='')?'null':quotedStr(combo.text);

就足够了。我喜欢这是,它不仅缩短代码,这种方式我也避免宣告一些帮助s:字符串变量。

为什么条件运算符不是Delphi的一部分,他们是否会被支持?我注意到有相当多的语言扩展为2009版本的Delphi(泛型),所以为什么不添加这个功能

解决方法

这样的操作符不是当前Delphi版本的一部分,因为它不是以前版本的一部分,并且需求不足以证明添加它的成本。 (您会发现说明适用于您希望在许多产品中使用的许多功能。)

Delphi在Math和StrUtils单元中提供了一组IfThen函数,但是它们具有评估它们的值参数的不幸属性,因此这样的代码将失败:

Foo := IfThen(Obj = nil,'<none>',Obj.Name);

要真正做到这一点,需要编译器的帮助。在Delphi社区中,我感觉到一个普遍的不喜欢的C风格的语法使用问号和冒号。我看过使用这样的语法的提议:

Foo := if Obj = nil then
         '<none>'
       else
         Obj.Name;

使条件运算符如此吸引人的部分是它们让你写简洁的代码,但是Delphi的写出一切东西的风格使得上述没有吸引力,即使放在一条线上。

它不需要是一个运算符的形式。 Delphi Prism提供了一个编译器魔法函数Iif,它只评估它的两个值参数之一:

Foo := Iif(Obj = nil,Obj.Name);

你问为什么这样的功能不会与所有其他语言功能添加在Delphi 2009中添加。我认为这是你的原因。有很多其他语言的变化,已经需要微妙的处理;开发人员不需要更多的负担。功能不是免费的。

你问德尔福是否会有这样的功能。我不是Embarcadero的规划会议的秘密,我不得不派我的水晶球去修理,所以我不能肯定地说,但我预测,如果它会有这样的功能,它会以形式的Delphi Prism的Iif函数。这个想法显示在接近the discussion in Quality Central结束,并且反对,作为一个新的保留字,它将破坏向后兼容性已经定义了相同名称函数的其他人的代码。这不是一个有效的对象,但是,因为它不需要是一个保留字。它可以是一个标识符,就像Writeln和Exit,它可以有资格在其他单位重新定义,即使来自系统单元的一个被特别处理。

猜你在找的Delphi相关文章