浅谈 ifelse

同事发来他写的文章,此处是链接。讲的是代码中ifelse的缺点,及改进方式。

同事视ifelse为洪水猛兽,在我看来其实不然。ifelse是所有计算机高级语言的基本语法或者说基本词汇,有了基本词汇才能有丰富的表达啊。ifelse的作用是进行语句的判断,从而改变程序流程。从某种意义上讲,ifelse是一种查找过程。找到符合条件的判断语句,然后执行对应的大括号内的代码。

文中提到,除了ifelse以外,还有switchmap(字典),command模式,多态等可以替代ifelse。这些方式可以说都是在查找,找到那个对的代码,然后执行。文中很推崇用高级的编程模式来做,比如command模式,多态等。但不是所有的情况都适合,而且大部分情况是没必要使用这些高级技巧的。

下面就具体罗列下每种情况的优缺点和适用条件。

如果是数量较多,用map很合适,对应的是command模式,优点是查找速度快,易扩展,缺点是空间换时间,需要额外的存储空间,还需要定义多种类。量少时,可以用枚举,优点是清晰明了,缺点是要定义额外的枚举类型。量更少时可以用ifelse或者switch,优点是写起来很符合直觉,写得快,缺点是代码看起来比较多,杂。

具体实施时,就需要编码者根据不同实际情况进行选择了。这个其实是个经验问题。再比如,最近我在练乒乓球,主要练习拧拉,虽然这个技术很厉害,但是不是所有情况都适合,对方搓你的正手底线,你还用拧就不合适了,这个时候直接拉球就好了。

最后,用白居易的一个典故来表达我编码的愿景,真心希望我写的代码都能够老妪能解的。