退出=意大利面条代码?

Jim*_*Jim 6 vb.net coding-style

我一直被教导要从函数中退出并编写不会跳到那里的代码,是下面的错误代码还是有更好的方法来编写for循环而不需要"退出"?

dim dt as datatable = FillDataTableFunction()
dim bWrite as boolean = false
for each row as datarow in dt.rows
  if row.item("somecolumn") <> string.empty then 
    bWrite = true
    exit for
  end if 
next

if bWrite then 
  'do stuff
end if
Run Code Online (Sandbox Code Playgroud)

我想我只是认为这将通过for循环减少不必要的迭代但是由于某种原因它似乎是一个糟糕的编码实践.

pax*_*blo 20

"我一直被教导" - 在生活中的某些时刻,人们开始学习而不是被教导:-)

不要把任何东西当作福音(即使是来自我 - 如果你不同意,请自己动手).查看指南,了解它们存在的原因.

您被告知多个退出点不好的原因是因为它们经常导致难以遵循的代码.换句话说,一个充满return陈述的400行函数很难根据其行为进行分析.

您的小代码片段不会受此影响.我遵循的准则是:如果您可以在编辑器中的单个屏幕上看到控制流,那就没问题了.而且,由于12行将适用于我在过去二十年中使用过的任何编辑器,因此您的代码非常易读.

事实上,我已经看到了"永远不会使用多个退出点"的人的代码,这些代码的可读性远远低于违反规则所产生的代码.它通常涉及多条件while语句,因此它们必须在多行中分解,并且仍然很难分析.

旨在提高可读性.如果指南有帮助,请使用它们.如果没有,把它们扔出窗外.

  • +1是一个真正明智的答案.(哎呀,如果可以,我会给这个+10) (2认同)

ath*_*spk 8

您所谓的"意大利面条代码"是使用过去大量使用的旧关键字"goto".(例如:Assembly,GwBasic等).

使用中断来退出循环结构和决策结构是非常自然的.