我正在编写一些PHP代码来使用FPDF库创建PDF。我基本上使用相同的4行代码来打印文档的每一行。我想知道哪个更有效率,一遍又一遍地重复这4行,还是会让它成为一个更好的功能?我很好奇,因为感觉函数会有更大的开销,因为函数只有4行长。
我质疑的代码如下:
$pdf->checkIfPageBreakNeeded($lineheight * 2, true);
$text = ' label';
$pdf->MultiCell(0, $lineheight, $text, 1, 'L', 1);
$text = $valueFromForm;
$pdf->MultiCell(0, $lineheight, $text, 1, 'L');
$pdf->Ln();
答案 0 :(得分:16)
这应该回答: http://en.wikipedia.org/wiki/Don%27t_repeat_yourself 和 http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html
Curly's Law,Do One Thing,是 反映在几个核心原则 现代软件开发:
不要重复自己
如果你有多种表达同样的方法,在某些时候 两三个不同 陈述很可能会下降 与对方不协调。即使 他们没有,你保证 你自己头疼的维持 只要有变化,它们就会并行 发生。并且会发生变化。别 如果你重复自己很重要 想要灵活和可维护 软件
一次只能
每一个行为声明都应该只发生一次 一旦。这是主要目标之一, 如果不是主要目标,重构时 码。设计目标是消除 重复的行为声明, 通常通过合并或替换它们 多个类似的实现 统一抽象。
单点真相
重复导致不一致和代码巧妙 坏了,因为你改变了一些 需要改变时重复 他们都是。通常,它也意味着 你没有经过深思熟虑 你的代码的组织。任何 你看到重复代码的时间,那是一个 危险的迹象。复杂性是一种成本; 不要付两次钱。
答案 1 :(得分:12)
不要问自己哪个更有效率,而应该问自己哪个更易于维护。
编写函数更易于维护。
答案 2 :(得分:11)
我很好奇,因为感觉就像是 功能会有更大的开销 因为这个功能只会是4 线条很长。
这是意大利面条的来源。
将它封装到一个函数中并调用它。你担心的开销是最糟糕的过早优化。
干 - 不要重复自己。
答案 3 :(得分:4)
使其成为一种功能。如今,函数调用开销非常小。一般来说,通过寻找更好的高级算法,而不是摆弄这种低级细节,你将能够节省更多的时间。使用这样的功能,使远更容易制作并保持正确。一个人如果能获得一点速度,并失去他的计划的正确性,它将获得什么利润呢?
答案 4 :(得分:2)
功能当然更可取,特别是如果您必须稍后再进行更改。
答案 5 :(得分:2)
不要担心开销;担心自己,未来一年,试图调试这个。
鉴于上述情况,不要重复自己并做一个微小的功能。
答案 6 :(得分:1)
除了关于更为重要的可维护性主题的所有有价值的答案之外;我想在开销问题上添加一些内容。
我不明白为什么你担心四行函数会有更大的开销。
在编译语言中,如果合适,一个好的编译器可能无论如何都可以内联它。
在解释型语言(如PHP)中,解释器必须在每次遇到运行时时解析所有重复的代码。对我而言,这表明重复可能比函数调用带来更大的开销。
担心函数调用开销是可怕的过早优化。在这样的事情上,真正了解哪个更快的唯一方法就是对其进行分析。
让它发挥作用,使其正确,快速完成。按此顺序。
答案 7 :(得分:0)
开销实际上非常小,不会对您的应用程序造成很大的影响。 你宁愿这些小开销,但有一个更容易维护的程序,或者你想保存仅仅毫秒,但需要花费数小时来纠正重复的小变化。
如果你问我或其他开发者,我们肯定想要第一个选择。 继续这个功能吧。你可能今天没有维护代码,但是当你这样做时,你会讨厌自己尝试保存这个毫秒