Что делает return при использовании внутри оператора if? - PullRequest
16 голосов
/ 12 сентября 2011

Что делает возврат внутри операторов if в следующем коде?

public void startElement(String namespaceURI, String localName,String qName, 
                                         Attributes atts) throws SAXException
{
    depth++;
    if (localName.equals("channel"))
    {
        currentstate = 0;
        return;
    }
    if (localName.equals("image"))
    {
        // record our feed data - you temporarily stored it in the item :)
        _feed.setTitle(_item.getTitle());
        _feed.setPubDate(_item.getPubDate());
    }
    if (localName.equals("item"))
    {
        // create a new item
        _item = new RSSItem();
        return;
    }
    if (localName.equals("title"))
    {
        currentstate = RSS_TITLE;
        return;
    }
    if (localName.equals("description"))
    {
        currentstate = RSS_DESCRIPTION;
        return;
    }
    if (localName.equals("link"))
    {
        currentstate = RSS_LINK;
        return;
    }
    if (localName.equals("category"))
    {
        currentstate = RSS_CATEGORY;
        return;
    }
    if (localName.equals("pubDate"))
    {
        currentstate = RSS_PUBDATE;
        return;
    }
    // if you don't explicitly handle the element, make sure you don't wind 
           // up erroneously storing a newline or other bogus data into one of our 
           // existing elements
    currentstate = 0;
}

Выводит ли он нас из оператора if и переходит ли к следующему утверждению или он выводит нас из метода startElement?

Ответы [ 8 ]

16 голосов
/ 12 сентября 2011

Возвращения в приведенном выше коде выведут вас из метода.

10 голосов
/ 12 сентября 2011

Завершает метод, поэтому код под ним не выполняется.

9 голосов
/ 12 сентября 2011

Выводит ли он нас из оператора if и переходит к следующему выражению или выводит нас из метода startElement?

Он выводит вас из метода .. Возвратоператор прекращает выполнение функции

3 голосов
/ 12 сентября 2011

Да. Возврат здесь выведет управление из метода.

3 голосов
/ 12 сентября 2011

return всегда выводит управление из вызывающего метода.

2 голосов
/ 12 сентября 2011

вернет то, что вы объявили в главе метода (здесь void = nothing = просто завершит метод)

0 голосов
/ 09 января 2015

Возврат завершит поток метода и функционально идентичен использованию более короткой else if цепочки, такой как

/* if (localName.equals("channel")) {
    currentstate = 0; // This can be removed because it's the default below.
} else */ if (localName.equals("image")) {
    // record our feed data - you temporarily stored it in the item :)
    _feed.setTitle(_item.getTitle());
    _feed.setPubDate(_item.getPubDate());
} else if (localName.equals("item")) {
    // create a new item
    _item = new RSSItem();
} else if (localName.equals("title")) {
    currentstate = RSS_TITLE;
} else if (localName.equals("description")) {
    currentstate = RSS_DESCRIPTION;
} else if (localName.equals("link")) {
    currentstate = RSS_LINK;
} else  if (localName.equals("category")) {
    currentstate = RSS_CATEGORY;
} else if (localName.equals("pubDate")) {
    currentstate = RSS_PUBDATE;
} else {
    currentstate = 0;
}
0 голосов
/ 12 сентября 2011

Возвращение здесь, вероятно, используется для того, чтобы «улучшить» производительность метода, чтобы другие сравнения не выполнялись после выполнения необходимого сценария.

Однако не рекомендуется иметь несколько точек возврата в методе.

Как указано в моих комментариях, я бы попробовал другой подход для достижения потока рассматриваемого кода.

...