以下是一些假设的代码示例:
if (e.KeyCode == Keys.Enter)
{
if (this.CurrentElement == null) {
return false;}
if (this.CurrentElement == this.MasterElement) {
return false;}
if (!Validator.Exist (this.CurrentElement)) {
return false;}
if (!Identifier.IsPictureElement (this.CurrentElement)) {
return false;}
this.FlattenObjects(this.CurrentElement);
}
VS
if (e.KeyCode == Keys.Enter)
{
if (this.CurrentElement != null) {
if (this.CurrentElement != this.MasterElement) {
if (Validator.Exist (this.CurrentElement)) {
if (Identifier.IsPictureElement (this.CurrentElement)) {
this.FlattenObjects(this.CurrentElement);}}}}}}
}
您认为哪一个在可读性,维护等方面更好?
第二个例子也可以通过不同的括号使用来进行不同的格式化。
答案 0 :(得分:14)
早期回报更具可读性。
每当你在一个方法中获得超过四到五个级别的嵌套时,就该重构该方法了。
具有if
子句的单个||
有时可以更具可读性:
if (this.CurrentElement == null
|| this.CurrentElement == this.MasterElement
|| !Validator.Exist(this.CurrentElement)
|| !Identifier.IsPictureElement(this.CurrentElement))
return false;
答案 1 :(得分:4)
第一个例子在各方面都更好。它更简单,更易于阅读。有人说每个功能都应该有一个回归点;这个例子清楚地表明了那些人为什么是错的。
PS我个人会删除所有那些多余的花括号:
if (this.CurrentElement == null) return false;
等。这使它更简单,甚至更容易阅读。
答案 2 :(得分:1)
我想我会这样写:
if (this.CurrentElement == null OR this.CurrentElement == this.MasterElement OR ...) return false;
答案 3 :(得分:1)
我会说第一个更好的可读性和维护性。但是,我可能会写这样的东西。
if (e.KeyCode == Keys.Enter) {
if(this.CurrentElement == null ||
this.CurrentElement == this.MasterElement ||
!validator.exists(this.CurrentElement) ||
!identifier.isPictureElement(this.CurrentElement))
{
return false;
{
else
{
this.flattenObjects(this.CurrentElement);
}
}
答案 4 :(得分:1)
鉴于在第二个例子中,“false”是所有路径的返回,但是它是隐式的而不是声明为什么不只是使所有返回隐式为false并且只测试一个唯一的条件?
这可能会违反某人的风格指南,但从逻辑上来说这是最简洁的。
if( e.KeyCode == Keys.Enter
&& this.CurrentElement != null
&& this.CurrentElement != this.MasterElement
&& Validator.Exist (this.CurrentElement)
&& Identifier.IsPictureElement (this.CurrentElement))
this.FlattenObjects(this.CurrentElement);