Erlang OTP in action读书笔记之第二章

看过第一章,继续第二章,由于有了Erlang的基础知识,这里就简略的翻一遍,作为完整的补充,不过,几位有经验的作者还是讲了不少我原来没留意过的地方,也值得记录一下,这里就只列出来我原来没注意过的觉得还不错的地方,就不做对于基础部分的详细罗列了。

比较实用的有一个是CTRL+G这个功能,可以通常通过两个节点来互相连接控制,比如一个是实际的运行系统的结点,通过这个功能可以达到远程连接控制的目的,不过我在Ubuntu上自带的Erlang上总是出错,普通的Erlang代码上好像没问题,现在想想估计是Ubuntu自带的Erlang省略了一些基本的功能的原因。正常的Erlang代码应该没问题的,因为毕竟公司的Erlang只是对标准Erlang做了几个很小的修改,就可以有那个功能了。

binary要学会使用,很好用,也很有实际的用处,atom注意的就是永远不会garbage回收,所以,注意点使用,别无限创造出来很关键。tuple的元素访问是constant时间的,所以,用tuple会比list访问的时候有效率,所以array库是用tuple来模拟实现的,其实内部多种集合类的数据结构都是用tuple底层实现的,当然了,常用的是record不过本质上是一样的就对了。

list注意连接的顺序,涉及内存构造,小的在左边,千万别++的连个巨大无比的,很慢。一个小的debug的技巧就是前边加个0省得就成了字符串了。

相等,分为严格相等的,和一般相等,不过,重点在于,有经验的人很少用相等,都去用pattern matching了。

函数,不仅名字,还有arity才决定了一个函数,原先不太留意这个概念,写一个抽取函数的函数的时候,只拿名字做参数,结果到后来恍然发现,arity也得参数丢进去,才又把接口通通从get_fun(FunName) 变成了get_fun({FunName, Arity})的形式,第一次的时候是有点忽略了。另外符号的比如++也是函数实现,跟Haskell有点相似的感觉。

shell的编译不同于普通的erlc的编译,很慢很慢,所以不要用shell里的作为时间方面的测量,好像犯过这个毛病,只怪那时候不太知道,所以,测量的话,可以丢入一个module当中,再去做同样的工作就可以了。

变量的命名,也不是越长越好,这点应该后续加以注意,可以参考比如代码大全,里边特意提到变量命名了,也应该参考公司大牛的代码,包括Erlang本身标准库,都是命名,简短清晰很关键,别老像我似的,每次的名字好几个单词长,注意一下。

list的匹配,可以前边几个值单独列出来,就挨个匹配了,简单的例子比如common test匹配_SUITE结尾名字,就那么用的。

确定前边排除了true的时候,后边只有false的时候,也应该显式的标记出来false便于清晰,也便于日后修改的,更明显,而且,不是true的话,防止漏网过去,早出错,早crash便于调试也。

higher order function涉及丢过来的函数不同,就能达到不同的效果,经典的对比可以比较比如strategy pattern就在head first design pattern第一章讲的,无非在OO里就是复合个对象进来达到变化,functional里直接想做什么,就把那个操作作为函数传入,就能够相应的变化了,十分方便,也是更OO的区别和联系的地方了。

预处理的所做,包括了几件事情,比如EUnit就是在预处理的时候插入了需要export的函数,还是有点意思的,可以带上p选项的编译,还能看到预处理之后的结果,更能实际的感受到,毕竟具体的生成出来的代码,比抽象的概念好的多。

process的dictionay简单概括就是不要用,要用后续的可以用ETS存储,不到20个可以list超过20个就ETS划算了,所以ETS也是应该常用的一个实用的工具。

函数的参数不同,形成了不同的函数,这样,简单的参数可以做前端,后边套入复杂的函数,加入一些默认的参数,这个是OTP里常用的技巧,也能帮助达到尾递归的目的,这里对尾递归还是做了相当详细的解释,可以好好看看。当然了,对于企业来说,还是清晰快速,最重要的是能工作就好,毕竟值得优化的地方,少之又少,而且优化一处,可能胜过别处很多小的优化,当然尾递归很重要,别把系统内存耗光才是主要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值