262_既然有了if为什么还要用when

完整的emacs and lisp的学习集合整理如下:

https://github.com/GreyZhang/g_lisp

    继续lisp的学习,今天看的知识点是common lisp。既然已经有了if,为什么还要用when?

    先做一个小测试:

262_既然有了if为什么还要用when

    上面涉及到的元素有一个let,这个是引入变量的一种方式。除了这个以外,还有一个let*,这两个之间的差异之前也已经做过了小结。

    两个代码块其实逻辑一样,只是引入的变量a的初始值不同。如果变量大于5,那么返回变量值,否则的话返回nil。测试的结果自然也是符合我们预期的。那么,接下来做另一个测试,使用if进行相应的逻辑实现。

262_既然有了if为什么还要用when

    看上去,两种方式完全等同。那么既然已经有了if,为什么我们还需要when?其实,有一种场景下两种结构的逻辑控制是有差异的。做一个测试如下:

262_既然有了if为什么还要用when

    从上面的结果看,其实,如果使用when的时候剩下的一堆内容都将会是执行内容,而最后的执行结果作为返回值。而使用if的时候,第一条代码会是执行内容,同时执行结果作为返回值。若有多余的,将会被认为是else的内容。

    事实上,如果使用了if,通常来说的话我们还会考虑应该还有一个else。因此,如果合理的使用when的话,能够让代码的可读性有很大的提升,不需要做太多的判断就很容易知道接下来代码的可能运行情况。

完整的emacs and lisp的学习集合整理如下:

https://github.com/GreyZhang/g_lisp