你怎么写一个无操作声明?

Jør*_*eit 2 delphi coding-style no-op

在Delphi中编写无操作语句的最佳方法是什么?

拿这个代码:

if a=b then
  SomeOldStatement
else
  AnotherStatement;
Run Code Online (Sandbox Code Playgroud)

并说你暂时想要退出SomeOldStatement.

你会选择这个解决方案吗?

if a=b then
  //SomeOldStatement
else
  AnotherStatement;
Run Code Online (Sandbox Code Playgroud)

就个人而言,我不喜欢空白then部分,并希望在那里有一些可编辑的东西 ......

if a=b then
  NoOp
  //SomeOldStatement
else
  AnotherStatement;
Run Code Online (Sandbox Code Playgroud)

lke*_*ler 14

不知道为什么你根本不需要任何东西(例如我对"其他"感到满意).

但如果你想在那里编译一些东西,我会这样做:

if a=b then
  begin end
  //SomeOldStatement
else
  AnotherStatement;
Run Code Online (Sandbox Code Playgroud)

一个空的开始块是我在Delphi中知道的最好的noop.它不会产生汇编代码,因此不会产生任何开销.

  • 我非常喜欢在空的开始/结束块中注释`// DO NOTHING`作为注释.它使代码干净利落地读取. (3认同)

小智 12

if a=b then 
  SomeOldStatement 
else 
  AnotherStatement; 
Run Code Online (Sandbox Code Playgroud)

应该写成

if a=b then
begin
  SomeOldStatement;
end 
else
begin
  AnotherStatement; 
end;
Run Code Online (Sandbox Code Playgroud)

现在,你可以注释掉SomeOldStatement; 正是你所经历的效果,调试器更准确地遵循代码的流程,你可以避免像代码中的奇怪的副作用

if a=b then
  if b=c then
    statement1
  else
    if c=d then
      statement2;
  else
   statement2
else 
  statement3;
Run Code Online (Sandbox Code Playgroud)

搞砸你的缩进,弄错分号,记录出测试线和神圣的废话,事情变得很难看.

严肃地说,试着弄清楚我刚才写的代码是否有效,没有编译器传递.

现在,猜猜这会发生什么:

if a=b then
if b=c then
statement1
else
if c=d then
statement2;
// else
statement2
else 
statement3;
Run Code Online (Sandbox Code Playgroud)

也:

if a=b then
  statement1;
  statement2;
Run Code Online (Sandbox Code Playgroud)

你经常会做一些奇怪的事情,甚至是陌生的事情

if a=b then
//  statement1;
statement2;
Run Code Online (Sandbox Code Playgroud)

严肃 - 只要养成总是在你的所有逻辑中开始结束的习惯 - 它使你的代码更易于遵循,避免副作用,避免心理解析错误,代码解析错误和注释掉副作用.

另外,空的开始/结束与您的无操作相同.

  • +1单/复合语句的区别是可怕的,这是解决方法 (2认同)

JRL*_*JRL 6

在Delphi 2005及后续版本中,您可以定义一个NoOp空过程并将其标记为inline.

这样,除非您在编译器选项{$INLINE OFF}中将代码内联控件定义或设置为Off,否则不会生成代码.

procedure NoOp; inline;
begin
  // do nothing
end;
Run Code Online (Sandbox Code Playgroud)

结果代码非常干净:

if a=b then
  NoOp //SomeOldStatement
else
  AnotherStatement;
Run Code Online (Sandbox Code Playgroud)