2011-09-12 29 views
13

Trả về bên trong câu lệnh if trong mã sau là gì?Trả lại tiền khi được sử dụng trong câu lệnh 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; 
} 

Có phải đưa chúng tôi ra khỏi câu lệnh if và chuyển sang câu lệnh tiếp theo hoặc đưa chúng tôi ra khỏi phương thức startElement?

+1

Có vẻ như tất cả các câu trả lời ở đây được đăng tại cùng một thời gian và nội dung giống nhau! – medopal

Trả lời

14

Lợi nhuận trong mã ở trên sẽ đưa bạn ra khỏi phương pháp.

+3

Tôi cũng lưu ý rằng nó thực hiện điều này tại dòng nơi trả về được thực thi. Không ai trong số mã dưới dòng được thực hiện – bittersweetryan

8

Nó kết thúc phương thức để mã bên dưới nó, không được thực hiện.

7

Chúng tôi có đưa ra tuyên bố nếu không và chuyển sang tuyên bố tiếp theo hoặc chúng tôi đưa chúng tôi ra khỏi phương thức startElement?

Nó sẽ đưa bạn ra khỏi phương pháp .. Lệnh return kết thúc việc thực hiện một chức năng

2

nó sẽ trở lại những gì bạn đã tuyên bố vào đầu phương pháp (ở đây khoảng trống = không có gì = nó sẽ chỉ kết thúc phương pháp)

2

trả về luôn kiểm soát phương thức gọi điện.

0

Trả lại ở đây có thể được sử dụng để "cải thiện" hiệu suất của phương pháp, để các so sánh khác không được thực hiện, khi kịch bản cần thiết được thực hiện.

Tuy nhiên, thực tiễn không tốt là có nhiều điểm trả về trong một phương thức.

Như đã nêu trong các nhận xét của tôi, tôi sẽ thử một cách tiếp cận khác để đạt được luồng của mã được đề cập.

+1

-1 Ai nói rằng nó không phải là thực hành tốt để có nhiều điểm trở lại? Đó là tốt (miễn là không có * quá * nhiều) – Bohemian

+1

Có rất nhiều cuộc tranh luận trên internet liên quan đến nhiều điểm xuất cảnh trong một chức năng. Tuy nhiên trong kinh nghiệm nhỏ của tôi, tôi đã có rất nhiều vấn đề gỡ lỗi phương pháp với báo cáo trở lại nằm rải rác trên dòng chảy của nó. Trong trường hợp này, các câu lệnh trả về là 7 và xác định luồng của phương thức. – Romeo

+0

Thực ra, bạn đúng ... có * là * quá nhiều lợi nhuận. Nếu bạn chỉnh sửa câu trả lời của mình, tôi sẽ xóa bỏ phiếu giảm giá của mình (tôi không thể xóa nó trừ khi bạn chỉnh sửa bài đăng của mình - chỉ cần thêm một điểm dừng hoặc một thứ gì đó, mọi thay đổi sẽ cho phép tôi xóa nó, nhưng tôi bị khóa cho đến khi bạn) – Bohemian

2

Có. Sự trở lại ở đây sẽ kiểm soát ra khỏi phương pháp.

0

Sự trở lại sẽ kết thúc dòng chảy của phương pháp, và có chức năng giống hệt nhau để sử dụng một else if chuỗi ngắn hơn như

/* 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; 
} 
Các vấn đề liên quan