当前位置:  开发笔记 > 编程语言 > 正文

创建一次使用的变量是一种好习惯吗?

如何解决《创建一次使用的变量是一种好习惯吗?》经验,为你挑选了4个好方法。

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

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编程的情况下,更容易回显这些变量名来获取它们的值

反对这种方式的论据"更多代码行","不必要的变量"是使编译器的生活更容易但没有显着的速度或资源节省的参数.

任何人都可以想到一个不应该创建曾经使用过的变量名的情况吗?



1> Henrik Paul..:

在这种情况下,我是你的意见.可读性是关键.我确信编译器在两种情况下都会产生相同的可执行文件,编译器就像现在一样智能.

但我不会声称"总是使用曾经使用过的变量".例:

String name = "John";
person.setName(name);

是不必要的,因为

person.setName("John");

读得同样好 - 如果不是更好.但是,当然,并非所有案例都是明确的.毕竟,"可读性"是一个主观的术语.



2> Jon Skeet..:

你的所有理由似乎都对我有用.

在某些情况下,您实际上必须避免使用中间变量,您需要单个表达式(例如,对于Java/C#中的成员变量初始化),但为了清晰起见,引入额外变量绝对可以适用.显然不要为每个方法的每个参数这样做,但是适度它可以帮助很多.

调试参数特别强大 - 能够跨越 "准备"方法的参数的行,并直接进入方法本身,在调试器中轻松查看参数也是非常好的.



3> 小智..:

你的同事似乎不一致.

一致的解决方案如下所示:

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



4> Peter Lindho..:

我完全和你在一起.

如果一个方法需要大量的布尔值,我特别使用它

public void OpenDocument(string filename, bool asReadonly, bool copyLocal, bool somethingElse)

对我来说,这更具可读性:

bool asReadonly = true;
bool copyLocal = false;
bool somethingElse = true;

OpenDocument("somefile.txt", asReadonly, copyLocal, somethingElse);

..than:

OpenDocument("somefile.txt", true, false, true);

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有