2011-09-12 6 views
13

¿Qué hace el retorno dentro de las instrucciones if en el siguiente código?¿Qué devuelve hacer cuando se utiliza dentro de una instrucción 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; 
} 

Qué nos saca de la sentencia if y procede al siguiente estado de cuenta o que nos lleve a cabo el método de startElement?

+1

parece que todas las respuestas que aquí se coloquen en la misma hora y mismo contenido! – medopal

Respuesta

14

Las devoluciones en el código anterior lo sacarán del método.

+3

También me gustaría señalar que lo hace en la línea donde se ejecuta la devolución. Ninguno del código debajo de la línea se ejecuta – bittersweetryan

8

Termina el método por lo que el código que se encuentra debajo no se ejecuta.

7

¿Nos saca de la instrucción if y pasa a la siguiente declaración o nos saca del método startElement?

Te saca del método .. La sentencia return finaliza la ejecución de una función

2

devolverá lo que declaró en la cabeza método (aquí nula = = nada se acaba de poner fin a la método)

2

return siempre toma el control del método de llamada.

0

El resultado aquí probablemente se usa para "mejorar" el rendimiento del método, de modo que no se ejecuten otras comparaciones, una vez que se realiza el escenario necesario.

Sin embargo, no es una buena práctica tener múltiples puntos de retorno en un método.

Como dije en mis comentarios, probaría un enfoque diferente para lograr el flujo del código en cuestión.

+1

-1 ¿Quién dice que no es una buena práctica tener múltiples puntos de retorno? Está bien (siempre que no haya * demasiado * muchos) – Bohemian

+1

Hay muchos debates en internet sobre múltiples puntos de salida en una función. Sin embargo, en mi pequeña experiencia, tuve muchos problemas para depurar el método con declaraciones de retorno dispersas en su flujo. En este caso, las declaraciones de devolución son 7 y definen el flujo del método. – Romeo

+0

En realidad, tienes razón ... hay * demasiadas devoluciones. Si editas tu respuesta, eliminaré mi voto negativo (no puedo eliminarlo a menos que edites tu publicación; simplemente agregas un punto o algo así; cualquier cambio me permitirá eliminarlo, pero estoy bloqueado hasta que lo hagas).) – Bohemian

2

Sí. El retorno aquí tomará el control fuera del método.

0

El retorno terminará el flujo del método, y es funcionalmente idéntico a utilizar una más corta else if cadena como

/* 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; 
} 
Cuestiones relacionadas