Erlang代码重构指北——基于自动重构工具Tidier的工作方式

本文介绍了Erlang代码重构工具Tidier的工作方式,包括将过时函数替换、消除apply调用、将匿名函数转换为普通函数等。通过列表解析简化代码、消除冗余,提升代码可读性和效率。虽然Tidier已无法使用,但这些重构原则仍具有指导意义。
摘要由CSDN通过智能技术生成

0. 简介


Tidies是一款重构Erlang代码的软件,不过现在官网已经打不开,而且软件本身没有开源,所以并不能用了。在网上找到一篇介绍tidies工作方式的论文,从中能整理出一些重构Erlang代码的方法,在此记录如下。

原文链接:https://users.ece.cmu.edu/~aavgerin/papers/PPDP09.pdf

相关的PPT:https://www.erlang-factory.com/upload/presentations/121/KostisSagonas-ErlangFactoryLondon2009-CleaningupErlangcodeisadirtyjobbutsomebodysgottadoit.pdf

简单来说,就是重构时留意几个原则:

  1. 将过时的函数替换掉。
  2. 避免使用过于复杂、难以理解的匿名函数。
  3. 善用列表解析,特别是出现lists:map/2和lists:filter/2的场合。
  4. 在返回布尔值的判断时,善用模式匹配。

现将论文中一些使用tidier重构的例子摘录如下,以作参考。当然直接阅读原文是最好的。

1. 简单的重构


1.1. Modernizing guards and calls to old-fashioned functions(将过时函数替换为新函数)

The modernizing function name refactoring modernizes the guard names and takes care of such function renaming
issues.

替换bif函数:

atom/1 → is_aotm/1
binary/1 → is_binary
integer/1 → is_integer/1

替换常用的库函数:

dict:list_to_dict/1 → dict:from_list/1
unix:cmd/1 → os:cmd/1

Tidiers可以自动而高效的帮助开发人员完成代码的替换。

1.2 Turning apply calls to remote calls

消去apply,能显著提升代码的可阅读性和可理解性。

apply(M,F,[A1,A2]) → M:F(A1,A2)

1.3 Turning funs into functions(将匿名funs抽出做单独的函数functions)

This transformation is known as lambda lifting in functional languages and is a special case to what is known as the extract method refactoring in the object-oriented refactoring lingo.

简单来说,在逻辑复杂的时候不要使用匿名函数,会让代码变得难以阅读(特别是结合lists模块的方法的时候)。

使用以上三种重构方式的实践如下,不是很难,看下就行:

2.Record transformations(记录转换)


在卫语句中,像是is_record/2或者is_record/3这种写法是多余的,除了确实要分辨传入变量的类型的情况,应在参数中直接匹配相应的record结构。

例如对Erlang/OTP R13B lib/ssl/src/ssl prim.erl:121代码执行重构:

process(St, Pid) when is_record(St, st),St#st.status =:= open
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值