实践中的总结一:卫语句

2024/04/03 总结 实践 共 1012 字,约 3 分钟

前言

新开一个系列,总结一下实践的一些领悟,注重于代码单元的最佳实践。

一般来说,同一段逻辑,同时会有不同的实现方式。不同实现的设计有不同的侧重,在一些方面表现优秀的设计,在另一些方面就可能不会那么优秀,而我们需要根据情况进行取舍。

这个系列会介绍一些我认为更加高效的编码方式,比起其他实现方式,我更喜欢这些方式。这是一些我已经进行了取舍的实践,我认为他们更加优秀。

准则

  • 重视可读性 高于效率
  • 重视可修改与简洁 高于完备与优秀的设计

卫语句(卫述语句)

一句话总结:函数中,可以返回的情况下尽早返回,以达到减少嵌套条件表达式的目的。

卫语句是一种有效的减少嵌套,减轻心智负担的代码组织方式,可以多加使用。

简介

卫语句是一种编程技巧,它将复杂的条件表达式拆分成多个条件表达式,减少嵌套,如果条件语句极其复杂,就应该将条件语句拆解开,然后逐个检查,并在条件为真时立刻从函数中返回,这样的单独检查通常被称之为“卫语句”(guard clauses)。卫语句的效果就是将原来需要仔细阅读代码、细心整理逻辑的条件判断整理成一眼能看透的逻辑关系。

总而言之,函数中,可以返回的情况下尽量提早返回,以达到减少嵌套条件表达式的目的,增强可读性。

报错

错误处理是卫语句的一个关键点。

GO,Rust 等将 把错误作为函数返回值返回 为规范的语言,更为重视卫语句,为了将错误提前返回,不进行额外无用的逻辑。

而对于 Java 的关于卫语句处理错误的实践很简单:尽早抛出异常。

例子

private boolean judge(Req req){
	if(req.a){
		if(req.b){
			...
			return true;
		}
		return false;
	}
	if(req.c){
		...
		return true;
	}
	return false;
}

这样的逻辑可能复核直觉易写,但不易于读与后续的变更。

private boolean judge(Req req){
	if(req.c){
		...
		return true;
	}
	if(req.a){
		...
		return false;
	}
	if(req.b){
		...
		return true;
	}
	return false;
}

这样就易读多了,同时,下面的条件天然在上面条件的 else 中,心智负担小,将 a,b,c 三个条件简化为了四种情况,同时,每一行不需要记忆其他额外的问题。

总结

总而言之,减少嵌套深度,卫语句是一种有效的方式,可以多加使用。

文档信息

Search

    Table of Contents