2011-09-12 106 views
13

if語句在下面的代碼中做了什麼?在if語句中使用return時會做什麼?

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方法?

+1

好像這裏被張貼在同一時間和同一內容的所有的答案! – medopal

回答

14

上述代碼中的退貨將帶您離開方法。

+3

我還會注意到它在執行返回的行上執行此操作。該行下的代碼沒有執行 – bittersweetryan

8

它完成該方法,以便它下面的代碼不執行。

7

它是否將我們從if語句中移出,並繼續執行下一個 語句,或者將我們帶出startElement方法?

它需要你的方法的.. return語句終止函數

2

就會返回你宣佈什麼方法頭(此處空白=沒有=它只會結束的執行方法)

2

return總是將控制權從調用方法中取出。

0

此處的返回可能用於「改善」方法的性能,以便在執行所需方案時不執行其他比較。

但是,在方法中使用多個返回點並不是一個好習慣。

正如我的評論所述,我會嘗試一種不同的方法來實現有問題的代碼流。

+1

-1誰說有多個返回點是不好的做法?沒關係(只要沒有*太多*) – Bohemian

+1

互聯網上有很多關於函數中多個退出點的爭論。然而,在我的小經驗中,我用調試方法解決了很多問題,使用分佈在流程中的返回語句。在這種情況下,返回語句是7並定義了方法的流程。 – Romeo

+0

其實,你是對的......那裏*有太多的回報。如果你編輯你的答案,我會刪除我的downvote(我不能刪除它,除非你編輯你的文章 - 只是添加一個句號或什麼,任何改變都會讓我刪除它,但我被鎖定,直到你做) – Bohemian

2

是的。這裏的回報將無法控制方法。

0

的迴歸將方法的流程,並且在功能上等同於使用較短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; 
}