编程好习惯之理清数据的可变性
遇到的问题
部分人编程入门的语言是数据是可变的,把数据/变量理解为一个容器,里面的内容可以修改。
当遇到数据是不可变的语言或者不可变的操作时,总仍以可变的方式去理解,就会遇到下面类似的问题:
复制代码
上面是把 concat
当做 push
来用了。
还有就是用法不够 idiom
,如下:
复制代码
上面是把 map
当做 forEach
来用了。
idiom
的用法如下:
复制代码
分析
以上错误常见于初学者中,虽然多犯几次就掌握来,但有不是比例的人会犯同一类错误,说明设计上在这块的考虑还不够。
其中原因之一是:这些用法容易混淆。
如:list.concat
和 list.push
,此处的 concat
其实充当了一个函数的角色,而不是面向对象中的类方法。具体来说就是面向对象的方法调用容易让人有个误区:对象的所有方法调用都会修改对象内的数据,像 list.concat
就被理解成 list
的数据被修改了,list.map
也类似。
有的语言不提供这样的使用方式,而是把 concat
map
用自由函数的方式提供,就会避免理解错误,如下:
复制代码
另外一个可以避免犯错的方法是:多看方法的函数签名,尤其注意返回值。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/b3dd5d485844b69d2894df3a5】。文章转载请联系作者。
评论