Il ciclo for each per iterare – Lezione 25 di Java Avanzato

Un nuovo ciclo: il ciclo for each per i tipi parametrici

Per poter effettuare un’iterazione con le classi parametriche è introdotto un nuovo costrutto. Si tratta del ciclo for each che consente di iterare in automatico su una collezione. Per iterare su una collezione, normalmente si utilizza un iteratore in questo modo:

  Queue<String> coda= new LinkedList<String>();
  // ...
  for(Iterator<String> it = coda.iterator(); it.hasNext();) {
    String tmp = it.next();
    // ...
  }

Data una coda, il ciclo crea un iteratore sulla collezione e per ogni elemento presente nella collezione (hasNext) li estree con il metodo next. Allo stesso modo con un ciclo while, si utilizza un iteratore che scorre la collezione finché trova elementi e li recupera con il metodo next. Con il ciclo for each introdotto dalla versione Java 1.5, verrà tradotto tutto il automatico con l’uso di un indice implicito e senza dover effettuare controlli sui limiti dell’indice.

  for(String tmp : coda){
    //...
  }

Nel secondo campo del ciclo for each, dopo i due punti, si scrivere il nome dell’oggetto della collezione su cui si vuole iterare. Nel primo spazio si scrive il nome di una variabile che ad ogni iterazione conterrà il singolo elemento estratto dalla collezione. Di conseguenze i tipi devono essere compatibili, nel nostro caso la coda contiene oggetti di tipo String quindi nel primo campo dovremo mettere una variabile di tipo String.

Con il ciclo for each si ha un codice molto più sintetico, pratico e più robusto. Il codice è meno suscettibile ad errori dovendo scrivere meno codice, inoltre non si ha accesso né alla struttura dati né all’indice utilizzato. Per questo motivo un ciclo for each non può essere usato per poter effettuare delle operazioni come scrivere nell’i-esimo elemento.

Questo costrutto funziona con array, collezioni e strutture dati che implementano Iterable. Ad esempio con un array di String avremo:

  for(String s : a)

che equivale a scrivere:

  for(int i=0; i< a.lenght; i++){     String s = a[i];   }

Indice Lezione Precedente - Lezione Successiva

Pubblicato in Guide, Java, Programmazione Taggato con: , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*