三次法则 (程序设计)

✍ dations ◷ 2025-07-27 12:04:46 #计算机编程,经验法则

三次法则(rule of three)是代码重构的一条经验法则,涉及到当代码片段出现重复时,如何决定是否用一个新的子程序替代之的标准。三次法则的要求是,允许按需直接复制粘贴代码一次,但如果相同的代码片段重复出现三次以上的时候,将其提取出来做成一个子程序就势在必行。马丁·福勒在《重构》一书中介绍了三次法则,并认为这一法则是Don Roberts所提出。

在编程中,由于会提高代码维护的难度,直接复制代码段的习惯并不好;具体来说,当有代码片段需要变更时,代码维护者就必须找出程序中所有与之相同的代码片段,并都进行修改,但这一过程易出差错,而且也常会带来许多麻烦。相对的,如果代码只在一个地方出现,修改起来就容易多了。

这一法则在代码量(即行数)较少(甚至只有一行)的时候还有另一种形式的应用,例如:如果你想调用一个函数,并在调用失败的时候再尝试调用一次,那使用两处调用亦可;但若你想在放弃尝试前至少尝试5次(注意,这里的5符合>=3的要求),那就应该将其写成循环形式,使代码中只有一个调用位置(英语:Call site)。

诚如Charles Petzold(英语:Charles Petzold)所言,

相关

  • 宏(英语:Macro),是一种批量处理的称谓。计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换
  • 734年晋国曲沃之乱开始,前745年晋昭侯把曲沃(在今中国山西省曲沃县)封给其叔成师。前739年晋大臣潘父弑杀了晋昭侯,迎立曲沃桓叔。晋人发兵攻桓叔,桓叔退回曲沃。晋人共立昭侯子公子平
  • 介子列表介子由一个夸克和一个反夸克组成的不稳定亚原子粒子的列表。它们是强子的一种。强子的另一个成员是重子,由三个夸克组成的亚原子粒子。介子和重子的主要区别在于介子具有整数
  • 凸集在点集拓扑学与欧几里得空间中,凸集(Convex set)是一个点集合,其中每两点之间的直线点都落在该点集合中。在度量几何中,琴生不等式(Jensen's inequality)为凸集给出一个最健全的解
  • 中山优马中山优马(1994年1月13日-)出生于日本大阪府,是艺人经纪公司杰尼斯事务所所属的歌手暨演员,血型A型,魔羯座。姐姐是NMB48前成员的山田菜菜。妹妹是NMB48成员的山田寿々。粗体字为主
  • 万代万代(日语:バンダイ  */?)是日本大型玩具供应商之一,成立于1950年,创业者为山科直治。主要以生产高达系列作品、圣战士Dunbine等Sunrise系列动画的角色模型闻名。万代(BANDAI)创
  • 九龙河 (富群河)九龙河,位于中国广西壮族自治区贺州市昭平县境内,是富群河右岸支流,发源于昭平县北陀镇猫儿顶,中上游有白鸽、山秀、观音、盐洞、木皮、平恩、西蒙、大赦、良佑溪九条冲溪,俗称“
  • 奈杰尔·霍桑奈杰尔·霍桑爵士,CBE(1929年4月5日-2001年12月26日)英国演员,因其在二十世纪八十年代的BBC政治喜剧《是,大臣》及其续集《是,首相》中出演政务次官汉弗莱· 阿普比爵士闻名。奈杰
  • 海顿天象馆海顿天象馆是一个公众的天象馆,它是位于纽约的美国自然史博物馆地球和太空的玫瑰中心的一部分。目前的馆长是天文物理学家奈尔·德葛拉司·泰森。从2000年2月,天象馆已经成为
  • 弗雷德·韦斯特弗雷德·韦斯特(英语:Fred West,1941年9月29日-1995年1月1日)是一名英国连环杀手,于英国格罗斯郡犯下至少12起谋杀案件。至少有八件谋杀案是为满足韦斯特夫妇的性满足而犯下,手法有