函数与重复代码

时间:2010-08-02 13:22:48

标签: php function code-generation

我正在编写一些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();

8 个答案:

答案 0 :(得分:16)

这应该回答: http://en.wikipedia.org/wiki/Don%27t_repeat_yourselfhttp://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)

除了关于更为重要的可维护性主题的所有有价值的答案之外;我想在开销问题上添加一些内容。

我不明白为什么你担心四行函数会有更大的开销。

  1. 在编译语言中,如果合适,一个好的编译器可能无论如何都可以内联它。

  2. 在解释型语言(如PHP)中,解释器必须在每次遇到运行时时解析所有重复的代码。对我而言,这表明重复可能比函数调用带来更大的开销。

  3. 担心函数调用开销是可怕的过早优化。在这样的事情上,真正了解哪个更快的唯一方法就是对其进行分析。

  4. 让它发挥作用,使其正确,快速完成。按此顺序。

答案 7 :(得分:0)

开销实际上非常小,不会对您的应用程序造成很大的影响。 你宁愿这些小开销,但有一个更容易维护的程序,或者你想保存仅仅毫秒,但需要花费数小时来纠正重复的小变化。

如果你问我或其他开发者,我们肯定想要第一个选择。 继续这个功能吧。你可能今天没有维护代码,但是当你这样做时,你会讨厌自己尝试保存这个毫秒