创建一次性变量是一个好的编程实践吗?

26

我的一个同事重构了这段代码:

private void btnGeneral_Click(object sender, RoutedEventArgs e)
{
    Button button = (Button)e.OriginalSource;
    Type type = this.GetType();
    Assembly assembly = type.Assembly;
    string userControlFullName = String.Format("{0}.{1}", type.Namespace, button.Name);
    UserControl userControl = (UserControl)assembly.CreateInstance(userControlFullName);
}

对于这段代码:

private void btnGeneral_Click(object sender, RoutedEventArgs e)
{
    Button button = (Button)e.OriginalSource;
    Type type = this.GetType();
    Assembly assembly = type.Assembly;
    UserControl userControl = (UserControl)assembly.CreateInstance(String.Format("{0}.{1}", type.Namespace, button.Name));
}

有人说如果一个变量只使用一次,就不需要创建变量。

我的回答是,创建仅使用一次的变量是好的做法,因为:

  • 它作为注释并减少了注释(“userControlFullName”是清晰的)
  • 使代码更容易阅读,即更多的代码“像英语一样阅读”
  • 通过使用清晰的变量名称替换其中的部分,避免了过长的语句
  • 更容易调试,因为您可以将鼠标悬停在变量名称上,在某些情况下,例如PHP编程时,如果没有调试器,则更容易输出这些变量名称以获取其值

反对此方法的论点“代码行数更多”,“存在不必要的变量”是为了让编译器更轻松而提出的,但没有显著的速度或资源节省。

是否有人能想到任何不应创建仅使用一次的变量名称的情况?


2
我会将他的代码重构为你的代码。简洁和清晰是首要的。你的代码更容易理解,这是一个重要的原因。 - Daniel Daranas
1
只是提醒一下:PHP 有调试器...(Zend、xdebug) - Christian Studer
14个回答

1

尝试努力找出反对引入新变量的论据,我会说当你第一次阅读代码时,你不知道变量是否被多次使用。因此,你会立即让眼睛扫过代码,看它是否在更多地方使用。函数越长,你就需要更多时间来查找。

这是我能想到的最好的反对论点! :-)


0

我同意大多数人的观点,代码可读性是关键。

很少有行数骑士能够编写高度可读性和可维护性的代码。

此外,所有代码最终都会被编译成 MSIL,编译器会为你进行很多优化。

在下面的示例中,编译器将自动优化代码:

List<string> someStrings = new List<string>();
for (int i = 0; i < 1000; i++)
{
    string localString = string.Format("prefix{0}", i);
    someStrings.Add(localString);
}

与其:

List<string> someStrings = new List<string>();
string localString = string.Empty;
for (int i = 0; i < 1000; i++)
{
    localString = string.Format("prefix{0}", i);
    someStrings.Add(localString);
}

因此,在许多情况下,实际上没有性能原因不选择它。


0

那是我以前的编码方式。如今我试图尽量减少中间变量的使用。如果这些变量是不可变的,那么使用中间变量完全没有问题。


-1

同意

“使代码更易于阅读,即更多的代码“读起来像英语”

我认为这是最重要的因素,因为在大多数现代托管语言中,性能或功能没有区别。

毕竟,我们都知道代码比写代码更难阅读。

Karl


除非你的母语不是英语... 呵呵。(已经很晚了,我应该关灯睡觉了)。 - Lawrence Dol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接