sabato 1 maggio 2010

Guida Objective-C in Italiano - Parte 9 - Enumerazione Veloce

Enumerare oggetti di una collezione, tramite la caratteristica Enumerazione Veloce; questo sarà l'argomento trattato oggi, in questa nona parte della Guida in Italiano alla programmazione in Objective-C.

Questo post è una traduzione in italiano della Guida all'Objective C, presente sul sito developer.apple.com a questo link. L'Objective C è il linguaggio di programmazione per creare applicazioni per iPhone. Questo articolo può interessare a tutti gli sviluppatori che vogliono imparare le basi di questo linguaggio che è il fondamento per programmare nuove applicazioni per Mac Os X, iPhone ed iPad.



Enumerazione Veloce

L'enumerazione veloce è una caratteristica del linguaggio che ti permette di enumerare in modo sicuro ed efficiente i contenuti di una collezione usando una sintassi efficiente.

La caratteristica for…in

L'enumerazione veloce è una caratteristica del linguaggio che ti permette di enumerare in modo sicuro ed efficiente i contenuti di una collezione usando una sintassi efficiente. La sintassi è definita come segue:
for ( Tipo nuovaVariabile in espressione ) { statements }
o
Tipo nuovaVariabile;

for ( nuovaVariabile in expression ) { statements }

In entrambi i casi, le espressioni raccolgono un oggetto conforme al protocollo NSFastEnumeration. La variabile che itera è impostata a turno ad ogni elemento nell'oggetto restituito, e il codice definito dagli statements è eseguito. La variabile che itera è impostata a nil quando il ciclo finisce esaurendo la sorgente del gruppo di oggetti. Se il ciclo è terminato presto, la variabile che itera è lasciata a puntare all'ultimo elemento dell'iterazione.

Ci sono molti vantaggi dell'uso dell'enumerazione veloce:
  • L'enumerazione è considerevolmente più efficiente rispetto ad usare direttamente NSEnumerator.
  • La sintassi è concisa.
  • L'enumerazione è sicura - l'enumeratore ha una sentinella di mutazione, così che provi a modificare la collezione durante l'enumerazione, verrà emessa un'eccezione.
Dato che la mutazione dell'oggetto durante l'iterazione è vietata, puoi eseguire anche enumerazioni multiple contemporaneamente.

Adottare l'enumerazione veloce

Qualsiasi classe le cui istanze forniscono un accesso ad una collezione di altri oggetti può adottare il protocollo NSFastEnumeration. La collezione di classi Cocoa - NSArray, NSDictionary, e NSSet - adottano questo protocollo, come fà NSEnumerator. Dovrebbe essere ovvio che nei casi di NSArray e NSSet l'enumerazione riguarda i loro contenuti. Per altre classi, la documentazione corrispondente potrebbe chiarire che proprietà è iterata - ad esempio, NSDictionary e la classe NSManageObjectModel del Core Data forniscono supporto per l'enumerazione veloce; NSDictionary numera le sue chiavi, e NSManageObjectModel enumera le sue entità.

Usare l'enumerazione veloce

Il seguente codice d'esempio illustra l'uso dell'enumerazione veloce con oggetti NSArray e NSDictionary.
NSArray *array = [NSArray arrayWithObjects:
     @"One", @"Two", @"Three", @"Four", nil];

 for (NSString *element in array) {
     NSLog(@"element: %@", element);
 }

 NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
     @"quattuor", @"four", @"quinque", @"five", @"sex", @"six", nil];

 NSString *key;
 for (key in dictionary) {
      NSLog(@"English: %@, Latin: %@", key, [dictionary valueForKey:key]);
 }

Puoi anche usare oggetti NSEnumerator con l'enumerazione veloce, come illustrato nel seguente esempio:
NSArray *array = [NSArray arrayWithObjects:
     @"One", @"Two", @"Three", @"Four", nil];

 NSEnumerator *enumerator = [array reverseObjectEnumerator];
 for (NSString *element in enumerator) {
      if ([element isEqualToString:@"Three"]) {
           break;
      }
 }

 NSString *next = [enumerator nextObject];
 // next = "Two"

Per collezioni o enumeratori che hanno un ordine ben definito - come NSArray o istanze di NSEnumerator derivate da un array - l'enumerazione procede in quell'ordine, quindi, per conoscere l'indice dell'elemento della collezione che vi serve, vi basterà contare le iterazioni.
NSArray *array = /* assume this exists */;

 NSUInteger index = 0;

 for (id element in array) {
      NSLog(@"Element at index %u is: %@", index, element); index++;
 }

In altri rispetti, la caratteristica si comporta come un ciclo for standard. Puoi usare break per interrompere l'iterazione; e se vuoi saltare elementi puoi usare uno statement condizionale annidato come mostrato nel seguente esempio:
NSArray *array = /* assumiamo che questo esista */;

 for (id element in array) {
      if (/* qualche test per l'elemento */) {
           // statements che si applicano ai soli elementi che superano il test
      }
 }

Se vuoi saltare il primo elemento e poi processare non più di cinque ulteriori elementi, potresti fare come mostrato in questo esempio:
NSArray *array = /* assumiamo che questo esista */;
NSUInteger index = 0;

 for (id element in array) {
      if (index != 0) {
           NSLog(@"Element at index %u is: %@", index, element);
      }
      if (++index >= 6) {
           break;
      }
 }

Fine Parte 9

Finisce qui il nono articolo di questa Guida dedicato all'Enumerazione Veloce del linguaggio di programmazione Objective-C. Il prossimo post di questa guida, parlerà di come abilitare comportamenti statici; vedremo quindi più in dettaglio come funziona la tipatura statica, e discuteremo di alcune caratteristiche dell'Objective-C come vari modi per sormontare temporaneamente il suo dinamismo.

Segnalatemi eventuali errori, o commentate l'articolo se l'avete trovato utile, anche per incentivarmi a continuare a pubblicare le mie traduzioni. Iscrivetevi ai feed del blog per essere sempre aggiornati automaticamente ogni volta che sono disponibili nuovi contenuti.
Nella barra laterale del blog potete trovare l'elenco di tutti gli articoli di questa guida.

Nessun commento:

Posta un commento

Related Posts with Thumbnails