【问题标题】:functions vs repeated code函数 vs 重复代码
【发布时间】:2011-03-24 05:20:54
【问题描述】:

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

【问题讨论】:

  • PHP 中没有 MACRO 选项吗?
  • 这4行你重复了多少次。
  • @Shaihi:不。PHP 是解释的,而不是编译的。 (尽管有 HiPHoP)
  • 如果您需要在 pdf 中添加或删除行,那么您是否必须删除或粘贴这些行?你不能使用循环吗?
  • 假设您有这 6 行的 165 个副本。然后你重命名checkIfPageBreakNeeded()。然后您执行 sed 来更新这 165 个副本。然后你来 Stackoverflow 寻求帮助,因为这个超级简单的不言自明 sed 不知何故破坏了你的整个程序。

标签: php function code-generation


【解决方案1】:

函数当然是更可取的,尤其是当您必须稍后返回进行更改时。

【讨论】:

    【解决方案2】:

    这应该回答它: http://en.wikipedia.org/wiki/Don%27t_repeat_yourselfhttp://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html

    柯里定律,做一件事,是 体现在几个核心原则上 现代软件开发:

    • 不要重复自己

      如果你有不止一种方式来表达同一件事,在某个时候 两个或三个不同的 陈述很可能会下降 彼此步调不一致。即使 他们没有,你保证 自己维护的头痛 每当发生变化时它们并行 发生。并且会发生变化。别 如果你重复自己很重要 想要灵活和可维护 软件。

    • 只有一次

      每个行为声明都应该出现一次,并且只出现一次 一次。这是主要目标之一, 如果不是主要目标,在重构时 代码。设计目标是消除 重复的行为声明, 通常通过合并它们或替换 多个类似的实现 一个统一的抽象。

    • 单点真相

      重复导致不一致和代码巧妙 坏了,因为你只改变了一些 当你需要改变时重复 他们都是。通常,这也意味着 你还没有仔细考虑 你的代码的组织。任何 当你看到重复的代码时,那是 危险标志。复杂性是一种成本; 不要支付两次。

    【讨论】:

      【解决方案3】:

      与其问自己哪个更高效,不如问自己哪个更易于维护。

      编写函数更易于维护。

      【讨论】:

        【解决方案4】:

        我很好奇,因为它感觉就像 函数会有更大的开销 因为函数只有 4 行长。

        这就是意大利面的由来。

        明确地将其封装成一个函数并调用它。您担心的开销是最糟糕的过早优化。

        DRY - 不要重复自己。

        【讨论】:

          【解决方案5】:

          不用担心开销;担心自己,在未来一年,尝试调试这个。

          综上所述,不要重复自己,做一个小函数。

          【讨论】:

            【解决方案6】:

            让它成为一个函数。如今,函数调用开销非常小。一般来说,你可以通过找到更好的高级算法来节省更多的时间,而不是摆弄这样的低级细节。使用这样的功能,制作和保持正确更容易。如果一个人获得一点速度,而失去他的程序的正确性,对一个人有什么好处呢?

            【讨论】:

              【解决方案7】:

              除了关于更重要的可维护性主题的所有有价值的答案之外;关于开销问题,我想补充一点。

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

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

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

              3. 在这里担心函数调用开销是可怕的过早优化。在这种情况下,真正知道哪个更快的唯一方法是对其进行分析。

              让它发挥作用,让它正确,让它快速。按此顺序。

              【讨论】:

                【解决方案8】:

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

                如果您问我或其他开发人员,我们肯定想要第一个选项。 所以继续这个功能。你今天可能不会维护代码,但是当你这样做时,你会恨自己试图节省那毫秒的时间

                【讨论】:

                  猜你喜欢
                  • 2011-12-28
                  • 2014-10-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-05-09
                  • 2011-06-19
                  • 2013-11-06
                  • 1970-01-01
                  相关资源
                  最近更新 更多