常量之所想
关于常量定义,仔细发掘一下还是有不少异常情况需要注意,涉及范围包括基本类型及枚举。
先抛些砖,比较容易想到的点有:
使用常量的场景:魔数,错误码
使用枚举的场景:有限值集合/业务建模用
技术功能上要注意的:整型常量声明确定类型大小,浮点型用精度比较大大小
继续扩展一下:
把常量扩展到函数就是纯函数,或常量修饰的函数。在架构上分层后,可以把有副作用的函数限定到特定的层,其它层尤其是业务逻辑所在的核心领域,可以全由纯函数实现。
把常量扩展到变量就是不可变变量。不少语言的变量默认已经是不可变,剩余的语言也建议用常量修饰,除非确定需要可变变量,这样可以在语法上做一定的保证,减少非真实意图修改的 Bug。
关于如何写出纯函数,说白了就是多练习,看能不能抽取出纯函数,然后看看剩余的代码做什么用,如果就剩模板代码了,迟早会被优化掉。
说长远一点,如果框架升级,更换架构,你的纯函数还能用。说好听点就是技术架构和业务架构解耦。
枚举和零值:
当枚举的原型值为整型时,避免从 0 开始,改为从 1 开始。可以减少和外部系统交互时零值定义不一致导致的 Bug。
枚举和 sum type:
函数的输入输出都尽量用 sum type,即可枚举,有限个数。
举个例子,C 语言函数返回喜欢用 int,0 表示成功,负数表示失败,其实返回值是有限个的,就适合改为枚举。
与通用的 int/string 相比,sum type 大大提高了代码到可阅读性和可维护性。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/d3f241b3942fdcd8d5d9471d3】。文章转载请联系作者。
评论