class 中变量范围的最佳实践是什么
What is the best practice for the scope of variables in a class
我的老师源码公开了,看到这个我一头雾水:
从静态变量实例化的新局部变量,然后在一个方法中使用该变量并作为参数传递给另一个方法,然后将其新值设置为副本所基于的同一个静态变量。由于静态变量的范围在整个 class 中都可以访问,为什么不直接从 class 中的每个方法访问静态变量?
为什么这样做:
public class Calculator {
private JTextField displayText;
public void actionPerformed(ActionEvent e) {
String input = displayText.getText();
if (something == right) {
for (int i = 0; i < 10; i++) {
enterNumber(input);
}
}
}
public void enterNumber(String input) {
displayText.setText(input);
}
}
如果你可以:
public class Calculator {
private JTextField displayText;
public void actionPerformed(ActionEvent e) {
if (something == right) {
for (int i = 0; i < 10; i++) {
enterNumber();
}
}
}
public void enterNumber() {
String localVar = "Kitten";
displayText.setText(localVar);
}
}
在这个确切的例子中你是对的,在你的输入数字方法中有一个参数是没有意义的。
但是当你开始处理更复杂的程序时,你会开始注意到你最终会一遍又一遍地使用相同的功能,在这些功能中你可以有一个带参数的方法,这样你就可以执行相同的操作略有变化。
如果你有一个带参数的方法,其他人也更容易阅读,因为你所要做的就是说 "ok i call the method and send it blank, it sets the value to whatever i sent it.",而不是说 "ok i call the method, now lets see what the method does."
如果您的代码有效,那么它就不是糟糕的代码。但如果它有效并且易于阅读,那么它就是很好的代码。
我的老师源码公开了,看到这个我一头雾水:
从静态变量实例化的新局部变量,然后在一个方法中使用该变量并作为参数传递给另一个方法,然后将其新值设置为副本所基于的同一个静态变量。由于静态变量的范围在整个 class 中都可以访问,为什么不直接从 class 中的每个方法访问静态变量?
为什么这样做:
public class Calculator {
private JTextField displayText;
public void actionPerformed(ActionEvent e) {
String input = displayText.getText();
if (something == right) {
for (int i = 0; i < 10; i++) {
enterNumber(input);
}
}
}
public void enterNumber(String input) {
displayText.setText(input);
}
}
如果你可以:
public class Calculator {
private JTextField displayText;
public void actionPerformed(ActionEvent e) {
if (something == right) {
for (int i = 0; i < 10; i++) {
enterNumber();
}
}
}
public void enterNumber() {
String localVar = "Kitten";
displayText.setText(localVar);
}
}
在这个确切的例子中你是对的,在你的输入数字方法中有一个参数是没有意义的。
但是当你开始处理更复杂的程序时,你会开始注意到你最终会一遍又一遍地使用相同的功能,在这些功能中你可以有一个带参数的方法,这样你就可以执行相同的操作略有变化。
如果你有一个带参数的方法,其他人也更容易阅读,因为你所要做的就是说 "ok i call the method and send it blank, it sets the value to whatever i sent it.",而不是说 "ok i call the method, now lets see what the method does."
如果您的代码有效,那么它就不是糟糕的代码。但如果它有效并且易于阅读,那么它就是很好的代码。