2011-09-12 9 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

はここに同じ時間と同じ内容で掲載されたすべての答えのように思えるように短いelse ifチェーンを使用して機能的に同一であるだろう! – medopal

答えて

14

上記のコードの返品は、あなたをこの方法から脱退させます。

+3

私はリターンが実行される行でこれを行うことにも注意したいと思います。行の下のコードは実行されません – bittersweetryan

8

このメソッドを終了するので、その下のコードは実行されません。

7

ifステートメントから私たちを取り除き、次の ステートメントに進みますか、それともstartElementメソッドから私たちを取り去りますか?

ここは、ボイド=何もそれだけで終了します=しない(return文が関数

2

の実行を終了し、それはあなたがメソッドの頭の中で宣言したものを返します ..方法のあなたを取りますメソッド)

2

戻り値は常に呼び出しメソッドを制御しません。

0

ここでの戻り値は、必要なシナリオが実行されると、他の比較が実行されないように、メソッドのパフォーマンスを「向上させる」ために使用される可能性があります。

ただし、メソッド内に複数のリターンポイントを持つことはお勧めできません。

私のコメントで述べたように、私は問題のコードの流れを達成するために別のアプローチを試みます。

+1

-1複数のリターンポイントを持つのは良い方法ではないと言う人はいますか?それはうまくいっている(限り、*あまりにも多くない) – Bohemian

+1

関数内の複数の出口点に関するインターネット上での議論がたくさんある。しかし私の小規模な経験では、多くの問題をデバッグする方法がありました。この場合、return文は7であり、メソッドのフローを定義します。 – Romeo

+0

実際には、あなたが正しいです... *返品が多すぎます。あなたの答えを編集すると、私は自分のdownvoteを削除します(あなたがあなたの投稿を編集しない限り、私はそれを削除することはできません - ちょうど完全な停止や何かを追加します。変更すれば削除できますが、 ) – Bohemian

2

はい。ここでの復帰は、メソッドからコントロールを取り除きます。

0

リターンは方法のフローを終了し、

/* 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; 
} 
関連する問題