首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中频代码结构

中频代码结构
EN

Stack Overflow用户
提问于 2016-04-19 17:03:12
回答 3查看 72关注 0票数 0

我知道基本的if语句结构,但这让我很困惑

代码语言:javascript
复制
public void setHandleName(String handle){
    if(handle.length() < 10){
        return;
    }

    handleName = handle;
}

当handle.length()大于10时,它返回值,当handle.length()小于10时,不是应该返回这个值吗?

为什么这个if语句正好相反呢?

代码语言:javascript
复制
if(false){ //do stuff; }

其中if语句应该在

代码语言:javascript
复制
if(true){ //do stuff; }

对不起,我的解释很含糊,英语不是我的母语。任何帮助都将不胜感激!谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-19 17:06:34

当handle.length()大于10时,它返回该值

不,它没有。它从不返回任何值,该方法是void类型的。如果名称至少有10个字符长(如果名称小于10个字符,则不设置名称),则会设置 handleName实例字段。

,当handle.length()小于10时,不是应该返回该值吗?

不,if清楚地说“如果句柄的长度小于10,返回”,这是在它设置handleName之前。return会立即离开函数,绕过可能会出现的任何代码。

为什么这个if语句正好相反呢? 如果(假){//做事情;}

因为在这种情况下,逻辑位于if块中;在您的第一个示例中,在if块之后return才是早期的(绕过函数的其余部分)。也就是说,您的第一个例子是:

代码语言:javascript
复制
if (!condition) {
    return;
}
doSomething();

但你的第二个例子是

代码语言:javascript
复制
if (condition) {
    doSomething();
}

下面是您的第一个示例的注释版本:

代码语言:javascript
复制
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,以使用后面示例中的结构:

代码语言:javascript
复制
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
}
票数 4
EN

Stack Overflow用户

发布于 2016-04-19 17:06:05

它不返回任何东西(正如void返回类型所指示的那样)。-- handleName的值设置为handle,但只有当handle.length()大于或等于10时,如果handle.length()小于10,则只需从方法中提取return,而不做任何其他操作。

票数 0
EN

Stack Overflow用户

发布于 2016-04-19 17:06:39

这是否使代码的实际操作更加清晰?

代码语言:javascript
复制
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; }将永远不会“做事情”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36724910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档