Oop 编程原则:赋值与条件

Oop 编程原则:赋值与条件,oop,optimization,readability,principles,Oop,Optimization,Readability,Principles,我做了一些研究,但没有找到我想要的答案,所以我想我应该在这里解决这个问题。我想最好用示例来演示它,所以请考虑下面的代码片段: int delta = 0; if (some_condition) delta = 42; x1 = regular_value1 + delta; x2 = regular_value2 + delta; // ... // where delta is used a lot of times // basically - if (some_conditio

我做了一些研究,但没有找到我想要的答案,所以我想我应该在这里解决这个问题。我想最好用示例来演示它,所以请考虑下面的代码片段:

int delta = 0;
if (some_condition)
    delta = 42;

x1 = regular_value1 + delta;
x2 = regular_value2 + delta;
// ...
// where delta is used a lot of times
// basically - if (some_condition == true) => add delta to all variables
// if FALSE - add 0 (thus, effectively not changing anything)

int delta = 42;

if (some_condition)
{
    x1 = regular_value1 + delta;
    x2 = regular_value2 + delta;
    // ...
}
else
{
    x1 = regular_value1;
    x2 = regular_value2;
    // ...
}
例如,一个非常简单的现实场景是:假设我正在创建一个windows窗体,该窗体的左侧可能包含图像,而左侧可能不包含图像。如果没有图像-在左侧创建表单的所有其余控件,如果有图像,则将所有其他控件移到图像的右侧(将增量添加到每个控件的X位置)

我正在编写一个C#XNA游戏(因此性能有点相关,但OOP原则无论如何都不应该被忽略),因此我的问题是——如果“某些条件”在50%的时间内都是真的,那么哪种代码运行得更快?此外,哪个代码块更易于维护/读取

我知道这不是一个大问题,但我只是想养成一种习惯,尽可能编写“最好”的代码。任何意见,甚至个人经验都将不胜感激


谢谢。

后一种可能会稍微快一点,或者它们可能都针对同一件事进行了优化。这没关系,如果你发现它成为一个问题,你可以随时更改它(这个特殊的案例当然不会,这只是一般性的建议)。但我发现,至少前者更容易阅读和维护。如果要更改
常规值1
常规值2
,只需在一个位置进行更改,而不是在两个位置进行更改。这是一个有点主观的问题,但是影响可读性(以及重要的可维护性)的一个因素是有多少代码被重复。在这种情况下,第一个选项会减少维护和读取代码的次数(减少冗余),这将是我首选的方法。这当然是一个微不足道的情况,两者可能确实适用于相同的代码。我建议使用最容易理解的方法——这个决定应该基于比您在这里展示的更多的程序

但第二种解决方案往往更快,尤其是当“delta”变成常数时。如果“some_condition”为false,则不需要进行任何添加,并且optmizer可能会想出一些方法来加速实际分配,因此我认为这是一个性能优势。我认为,如果不影响可维护性,最好以最快的速度编写代码。即使有比这更大的性能差异,实际上你以后也不会回来寻找加速的方法。您不妨现在就编写性能代码,然后忘掉它。随着时间的推移保持这种状态,您的代码将运行得更快,而不会对您造成任何损失

也许有一天评测会指出这段代码是程序中最慢的一点。但最有可能的是,您和其他人会接受这样一个事实,即代码以一定的速度运行,并相应地使用它。事实上,它可以被加速并在新的地方使用——比如在击键之间——而不会打扰用户,这一点永远不会被想到

这里的性能差异很小,而且代码可能永远不会在速度关键的条件下使用,但我确实认为为速度编码是一个好主意。一旦你养成了这个习惯,你就不需要花任何时间了,你知道如果你的代码被修改了,你会做什么,因为它已经被修改过了,并且正在做


(根据我的经验,快速代码和可读代码几乎是一样的。如果人类能够轻松理解代码,那么优化器也可以,而现在优化器是王者。在我必须选择的少数情况下,我会追求清晰而不是速度,除非我知道一切都取决于代码的速度。然后我记录

正如@minitech所指出的,第二种方法可能而且肯定会导致可维护性方面的问题(需要思考的问题:应用程序的生命周期有多长?您编写的代码是否会被他人重用或使用?)考虑到您已经考虑了这些因素,我建议您决定并设置一些应用程序应该符合的性能数字

一旦明确确定了性能要求,您就可以决定采用哪种方法。OOP原则和可读性是每个程序员的梦想,但请记住,一旦您将应用程序交付给客户,您采用哪种方法并不重要,唯一重要的是您的应用程序可以正常运行预期(从功能和性能的角度)

您需要与利益相关者一起评估编写“最佳”代码与“最佳”代码可能导致的实际性能影响之间的关系