相关疑难解决方法(0)

Delphi中有条件运算符,或者有没有?

我想,我把手远离德尔福太久了.在过去的几年里,我一直忙于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;
Run Code Online (Sandbox Code Playgroud)

哪里很简单

result := result + (combo.text='')?'null':quotedStr(combo.text);
Run Code Online (Sandbox Code Playgroud)

就够了 我喜欢这个,它不仅缩短了代码,这样我也避免声明一些辅助s:string变量.

为什么条件运算符不是Delphi的一部分 - 它们是否会得到支持?我注意到2009版Delphi(泛型)有很多语言扩展,为什么不添加这个功能呢?

delphi language-features delphi-2009 conditional-operator

32
推荐指数
4
解决办法
1万
查看次数

是否可以将语句转换为表达式?

在C中,您可以在一行中分配两个变量

b = a = sqrt(10);
Run Code Online (Sandbox Code Playgroud)

在德尔福

b := a := Sqrt(10);
Run Code Online (Sandbox Code Playgroud)

不被允许.

有了Delphi中讨论IfThen三元运算符?:的"替代" - 相当于C#的三元运算符?总之,IfThen似乎并非绝对必要.

所以也许还有这样的东西:

function AssignAndReturn(var LHS: Integer; RHS: Integer): Integer;
begin
  LHS := RHS;
  Result := RHS;
end;

(...)

var
  a, b: Integer;
begin
  b := AssignAndReturn(a, Round(Sqrt(10)));
Run Code Online (Sandbox Code Playgroud)

我不是想"让一切看起来像C".我刚才注意到,有时再次在同一行中"重用"赋值的右侧会很好.(参见Lazarus/Free Pascal:如何改进while循环的编码风格(避免使用无限循环),例如,每次传递都会重新分配布尔表达式.)

delphi pascal freepascal lazarus turbo-pascal

1
推荐指数
1
解决办法
1156
查看次数