内心任务不好吗?

Ade*_*ros 10 java coding-style

我们与同事讨论内部任务,例如:

return result = myObject.doSomething();
Run Code Online (Sandbox Code Playgroud)

要么

if ( null == (point = field.getPoint()) )
Run Code Online (Sandbox Code Playgroud)

这些是可以接受的,还是应该用以下内容代替?为什么?

int result = myObject.doSomething();
return result;
Run Code Online (Sandbox Code Playgroud)

要么

Point point = field.getPoint();
if ( null == point)
Run Code Online (Sandbox Code Playgroud)

Mat*_*tzi 20

内部任务更难阅读,更容易错过.在复杂的情况下,它甚至可能被遗漏,并可能导致错误.

例如.如果条件评估阻止为变量赋值,则这将是一个很难找到的错误:

if (i == 2 && null == (point = field.getPoint())) ...
Run Code Online (Sandbox Code Playgroud)

如果i == 2为false,则稍后的点变量将不具有值.

  • &&和|| 是短路评估,这意味着如果i!= 2,则不会评估point = field.getPoint() (2认同)

Jes*_*run 8

if ( null == (point = field.getPoint()) )

优点:

  • 少一行代码

缺点:

  • 不太可读.
  • 不限制point语句及其代码块的范围.
  • 据我所知,不提供任何性能改进
  • 可能并不总是被执行(当它前面的条件评估为false时.

缺点超过专业4/1,所以我会避免它.


Edg*_*dge 6

这主要与代码的可读性有关.避免使用内部赋值来使代码可读,因为内部赋值不会得到任何改进


Akh*_*khi 5

功能 Not Necessarily. 性可读性 Definitely Yes


fed*_*usy 5

他们应该避免.减少每行标识符/操作的数量将提高可读性并提高内部代码质量.这是一个关于这个主题的有趣研究:http://dl.acm.org/citation.cfm?id = 1390647

如此底线,分裂

return result = myObject.doSomething();
Run Code Online (Sandbox Code Playgroud)

result = myObject.doSomething();
return result;
Run Code Online (Sandbox Code Playgroud)

将使其他人更容易理解和使用您的代码.与此同时,如果在整个代码库中分散了几个内部任务,只要它们在其上下文中易于理解,那么它就不会是世界末日.