Edw*_*uay 22 variables refactoring coding-style
我的一位同事重构了这段代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
这段代码:
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));
}
Run Code Online (Sandbox Code Playgroud)
如果它只使用一次,你就不需要创建一个变量.
我的回答是,制作曾经使用过的变量是很好的做法,因为它:
反对这种方式的论据"更多代码行","不必要的变量"是使编译器的生活更容易但没有显着的速度或资源节省的参数.
任何人都可以想到一个不应该创建曾经使用过的变量名的情况吗?
Hen*_*aul 30
在这种情况下,我是你的意见.可读性是关键.我确信编译器在两种情况下都会产生相同的可执行文件,编译器就像现在一样智能.
但我不会声称"总是使用曾经使用过的变量".例:
String name = "John";
person.setName(name);
Run Code Online (Sandbox Code Playgroud)
是不必要的,因为
person.setName("John");
Run Code Online (Sandbox Code Playgroud)
读得同样好 - 如果不是更好.但是,当然,并非所有案例都是明确的.毕竟,"可读性"是一个主观的术语.
Jon*_*eet 22
你的所有理由似乎都对我有用.
在某些情况下,您实际上必须避免使用中间变量,您需要单个表达式(例如,对于Java/C#中的成员变量初始化),但为了清晰起见,引入额外变量绝对可以适用.显然不要为每个方法的每个参数都这样做,但是适度它可以帮助很多.
调试参数特别强大 - 能够跨越 "准备"方法的参数的行,并直接进入方法本身,在调试器中轻松查看参数也是非常好的.
小智 18
你的同事似乎不一致.
一致的解决方案如下所示:
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));
}
Run Code Online (Sandbox Code Playgroud)
我完全和你在一起.
如果一个方法需要大量的布尔值,我特别使用它
public void OpenDocument(string filename, bool asReadonly, bool copyLocal, bool somethingElse)
Run Code Online (Sandbox Code Playgroud)
对我来说,这更具可读性:
bool asReadonly = true;
bool copyLocal = false;
bool somethingElse = true;
OpenDocument("somefile.txt", asReadonly, copyLocal, somethingElse);
Run Code Online (Sandbox Code Playgroud)
..than:
OpenDocument("somefile.txt", true, false, true);
Run Code Online (Sandbox Code Playgroud)
由于我使用的编程语言通常不会告诉我异常堆栈跟踪中什么为空,因此我通常尝试使用变量,以便每行不能有超过一个项目为空。实际上,我发现这是我想在一行中放置多少条语句的最重要的限制因素。
如果您从生产日志中得到此语句中的空指针异常,那么您真的有麻烦了:
getCustomer().getOrders().iterator().next().getItems().iterator().next().getProduct().getName()
尽管我同意您的想法,但添加额外的变量可能会在方法中引入额外的概念,并且该概念可能并不总是与方法的总体目标相关。因此,过多添加变量也会增加方法的复杂性并降低易读性。请注意此处“excess”的用法。