我知道基本的if语句结构,但这让我很困惑
public void setHandleName(String handle){
if(handle.length() < 10){
return;
}
handleName = handle;
}当handle.length()大于10时,它返回值,当handle.length()小于10时,不是应该返回这个值吗?
为什么这个if语句正好相反呢?
if(false){ //do stuff; }其中if语句应该在
if(true){ //do stuff; }对不起,我的解释很含糊,英语不是我的母语。任何帮助都将不胜感激!谢谢!
发布于 2016-04-19 17:06:34
当handle.length()大于10时,它返回该值
不,它没有。它从不返回任何值,该方法是void类型的。如果名称至少有10个字符长(如果名称小于10个字符,则不设置名称),则会设置 handleName实例字段。
,当handle.length()小于10时,不是应该返回该值吗?
不,if清楚地说“如果句柄的长度小于10,返回”,这是在它设置handleName之前。return会立即离开函数,绕过可能会出现的任何代码。
为什么这个if语句正好相反呢? 如果(假){//做事情;}
因为在这种情况下,逻辑位于if块中;在您的第一个示例中,在if块之后return才是早期的(绕过函数的其余部分)。也就是说,您的第一个例子是:
if (!condition) {
return;
}
doSomething();但你的第二个例子是
if (condition) {
doSomething();
}下面是您的第一个示例的注释版本:
public void setHandleName(String handle){ // Accept a `handle` string parameter
if(handle.length() < 10){ // If the length of `handle` is less
// than 10, enter the block
return; // Leave this method immediately, without
// doing anything else
} // This is the end of the conditional bit
handleName = handle; // Set `handleName` to `handle`
}因此,如果我们进入if块,我们将返回,永远不会到达handleName = handle;线,因此我们永远不会设置它。如果我们不进入if块,就不会提前返回,所以我们确实设置了它。
我们可以(也可能应该)重写setHandleName,以使用后面示例中的结构:
public void setHandleName(String handle){ // Accept a `handle` string parameter
if(handle.length() >= 10){ // If `handle`'s length is 10 or higher
handleName = handle; // Set `handleName` to `handle`
} // This is the end of the conditional bit
}发布于 2016-04-19 17:06:05
它不返回任何东西(正如void返回类型所指示的那样)。将-- handleName的值设置为handle,但只有当handle.length()大于或等于10时,如果handle.length()小于10,则只需从方法中提取return,而不做任何其他操作。
发布于 2016-04-19 17:06:39
这是否使代码的实际操作更加清晰?
public void setHandleName(String handle){
if(handle.length() >= 10){
handleName = handle;
}
// otherwise handleName is not set, and the method exits
// nothing is returned because the method is 'void'
}请注意,if(false){ //do stuff; }将永远不会“做事情”
https://stackoverflow.com/questions/36724910
复制相似问题