什么是更好的编码实践?

时间:2011-03-30 06:25:22

标签: c# optimization

什么是更好的编码习惯以及为什么?

string str1 = textBox1.Text;
string str2 = textBox2.Text;
void FunctionName (str1, str2);

或者

void FunctionName(textBox1.Text, textBox2.Text);

7 个答案:

答案 0 :(得分:8)

当您不打算对其执行任何操作时,无需声明单独的变量。所以我说后者更好。

在前一个示例中,您正在进行无法工作,并且会增加代码的复杂性。

现在,如果您计划对这些值进行一些处理,则可以选择使用前一种方法。但是,您应该为他们提供比str1str2更具描述性的名称来传达他们的目的。

答案 1 :(得分:4)

我会说第一个选项更好,如果有人需要对String进行任何操作,然后再将它传递给函数,他会倾向于在函数调用上执行此操作,这会导致嵌套调用随着时间的推移而使得它越来越多不可读,看起来像:

FunctionName(AnotherFunc(textBox1.Text), AnotherAnotherFunc(textBox2.Text));

在中间使用字符串可以更容易地进行更改,而这些更改仍然可读。

答案 2 :(得分:3)

我认为编码标准规则强制执行一种方法而不是另一种方法通常过于严苛。我倾向于使用在每种情况下最易读的方法。甚至可能在同一种方法中有所不同!

在你给出的例子中,我认为第二个选项实际上更具可读性和可理解性 - 它非常清楚地显示了函数调用和两个控件之间的关系。

在@OD的示例中,在传递控制值之前对控制值进行了额外的操作,变得有点难以看到发生了什么,并将“混淆”变量拉出来并以一种方式命名它们解释你想要实现的目标,使代码更具可读性(并自我记录)。

一般来说,我会说:

  1. 首先将所有内容直接放入方法/函数调用
  2. 如果任何传递的参数有太长的call.path.to.get()。to.the()。value,请考虑将其拉出到它自己的变量中
  3. 如果代码行整体变得太长,请考虑将参数分成一行

答案 3 :(得分:2)

就个人而言,我会选择选项2,因为它的代码较少,因此更容易阅读和理解其他开发人员稍后会进入代码。

我认为编译器会优先将第一个优化到第二个(但我不确定是真的)。​​

答案 4 :(得分:2)

从性能的角度来看它将是相同的,因为编译器会优化它,因此无论你选择什么样的练习都无关紧要。

答案 5 :(得分:2)

如果您对用户输入执行某种健全性检查,则需要使用以前的版本。例如,您可以检查string.Empty等的文本框文本。在您的情况下,创建另一个变量没有意义并且它是多余的。

从.NET的角度来看,执行不会改变,因为它将在JIT期间进行优化。

例如,

string str1 = textBox1.Text.Trim();
string str2 = textBox2.Text.Trim();
if(!string.IsNullOrEmpty(str1) && !string.IsNullOrEmpty(str2))
{
    FunctionName (str1, str2);
}

string str1 = textBox1.Text.Trim();
string str2 = textBox2.Text.Trim();
if(ValidateInput(str1) && ValidateInput(str2))
{
    FunctionName (str1, str2);
}

答案 6 :(得分:2)

首先,它对处理速度没有影响。两者都需要相同的时间。 Option2是我选择的,因为它更容易阅读IMO。

在某些情况下,将值放入变量非常有用,只是为了在调试代码时允许在它们上放置断点。它并不真正适用于这个例子,但有些情况下我会因此而选择option1。