考虑以下函数,该函数根据参数string str
的值为i
赋值。以下哪种情况是最佳做法,如果有的话:
public void myfunction(int i, bool condition)
{
string str = "default";
if(condition && i == 0) { str = "The value is 0"; }
if(condition && i == 100) {str = "The value is 100"; }
}
或
public void myfunction(int i, bool condition)
{
string str;
if(condition && i == 0)
{
str = "The value is 0";
}
else if(condition && i == 100)
{
str = "The value is 100";
}
else
{
str = "default";
}
}
答案 0 :(得分:3)
如何切换/案例陈述。类似......
public String myFunction(int i, boolean condition) {
String str = "default";
if (condition) {
switch (i) {
case 0:
str = "The value is 0";
break;
case 100:
str = "The value is 100";
break;
default:
str = "default";
break;
}
}
return str;
}
答案 1 :(得分:1)
特别是在你的两个例子中,两者都没有客观上好。这是非常主观的。我认为第二个更具可读性。
但是,更好的方法是使用Map
- >创建int
。 String
映射并使用它。
static Map<Integer, String> valueMap = new HashMap<Integer, String>();
static {
valueMap.put(1, "The value is 0");
...
valueMap.put(100, "The value is 100");
}
public void myfunction(int i, bool condition)
{
string str = "default";
if(condition) {
str = valueMap.get(i); // Also do checks if the value is not found etc.
}
}
如果你的值确实类似于“value is i”,那么你应该使用int来构造值。 ("value is " + i
)
答案 2 :(得分:1)
如何使用switch语句?
public String myFunction(int i, boolean condition)
{
String str = "";
if (condition)
{
switch (i)
{
case 0:
str = "The value is 0";
break;
case 100:
str = "The value is 100";
break;
default:
str = "default";
}
}
return str;
}
答案 3 :(得分:0)
就我个人而言,我可以说两者之间没有太大区别,但取决于你的代码的上下文,例如(如果你必须为几个字符串测试那些条件......)但是肯定第二个vesion应该更好,因为如果(condition && i == 100)
,它会避免测试i==0
。
答案 4 :(得分:0)
两种款式都有各自的优点。第一个更短,(可能)更容易阅读,但第二个更容易调试:
if(condition && i == 0)
{
str = "The value is 0"; // You can put breakpoint here
}