三次法则 (程序设计)

✍ dations ◷ 2025-10-21 14:56:08 #计算机编程,经验法则

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

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

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

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

相关

  • 6s2 4f14 5d12, 8, 18, 32, 9, 2蒸气压3, 2, 1 (弱第一:523.5 kJ·mol−1 第二:1340 kJ·mol−1 第三:2022.3 kJ·mol主条目:镥的同位素镥(Lutetium,台湾称镏,旧译作鏴)是一种化
  • 哈洛德·英尼斯哈洛德·亚当斯·英尼斯(英语:Harold Adams Innis,1894年11月5日-1952年11月8日),加拿大多伦多大学政治经济学教授,投身媒体、传播理论和加拿大经济史研究工作。
  • 蛋白激酶A蛋白激酶A(英语:Protein kinase A,简称为PKA)在细胞生物学中是指其活性取决于细胞环腺苷酸(cAMP)水平的一家族酶类。蛋白激酶A也被称为环腺苷酸依赖性蛋白激酶(EC 2.7.11.11)。蛋白
  • 日韩合并条约日韩合并条约(日语:韓國併合ニ関スル條約,韩语:한일 병합 조약 / 韓日倂合條約),是由大韩帝国总理李完用与大日本帝国代表寺内正毅于1910年8月22日签订的条约,将韩国的主权割与日本
  • 黔中黔中郡,中国古代的郡。战国楚置。辖境约当今湖南省西部和贵州省东部,后地入秦。治所在临沅县(今湖南常德市);一说治沅陵县(今湖南沅陵县西南)。辖境扩大,有今湖南省沅江、澧水流域,湖
  • 抗原呈现交叉呈递是特定抗原呈现细胞吞噬并利用MHC I呈现外来抗原给细胞毒性T细胞的能力。交叉致敏,是交叉呈递后的结果,其描述的是透过交成呈递而使初始T细胞(英语:Naive T cell)变成活
  • 俄法战争 法兰西帝国 西班牙王国(英语:Kingdom of Spain under Joseph Bonaparte)俄法战争,又称拿破仑征俄战争,是指俄罗斯帝国和拿破仑治下的法兰西第一帝国在1812年爆发的一场战争,是拿
  • 格劳龙格劳龙(Glaurung)是托尔金(J. R. R. Tolkien)奇幻小说中土大陆的首个及最巨大的喷火巨龙。他亦是著名的欺诈者(the Deceiver)及贪婪之虫(Worm of Greed)。虽然格劳龙并非最大的一条
  • 倒奶杀牛事件倒奶杀牛事件是指中国奶农因供需失衡,而将过剩的牛奶产量倾倒,以及将多余的乳牛屠宰的事件。2014年至2015年初,因奶源过剩、消费低迷,而导致在山东、河北、内蒙古、黑龙江、广东
  • 江户川乱步江户川乱步(1894年10月21日-1965年7月28日),本名平井太郎,生于日本三重县名张町,是活跃于大正至昭和间的推理小说家。1923年,在《新青年》上发表《两分铜币》获得高度评价后,开始了