2015-01-06 22 views
6

Alcuni giorni fa ho notato che la classe List di Dart ha la proprietà single. Poi, ho letto un documento ufficiale API e ho capito come funziona questa proprietà. Questo significa So che List.single funziona nel modo seguente:Qual è lo scopo principale della proprietà List.single?

print(['a'].single);  // outputs 'a' 
print(['a', 'b'].single) // throws StateError 

Ma io non riesco a trovare alcun caso l'uso pratico della proprietà single. I codici infantili mostrati sopra non hanno alcun senso nella programmazione vera e propria, naturalmente.

Qual è lo scopo della proprietà? Perché questa proprietà genera un'eccezione se un elenco contiene due o più elementi? Perché non è una proprietà booleana che indica se una lista ha solo un singolo elemento? In che modo gli sviluppatori di Dart Language ritengono utile includere List.single nell'API principale?

Se avete qualche conoscenza su questo, lo apprezzerei molto se mi date una mano.

+0

Mmmm ... Testing? https://github.com/dart-lang/bleeding_edge/blob/80988a506bdf74d2e87bf0d7e1211d035c2e5624/dart/tests/corelib/iterable_single_test.dart – JAre

risposta

5

È possibile utilizzare single se si prevede che Iterable contenga solo un elemento. Ecco un esempio del mondo reale: Abbiamo una connessione al database che ha il metodo per eseguire una query SQL. Il metodo restituisce le righe interessate dalla query. Consideriamo ora una query in cui ci si aspetta solo esattamente una riga di essere colpiti:

var row = databaseConnection.query('SELECT * FROM xyz WHERE id=5').single; 

Questo dà un breve tratto di fallire nel caso in cui nessuna o più di una linea sono interessati. Certo, si potrebbe anche scrivere:

var rows = databaseConnection.query('SELECT * FROM xyz WHERE id=5'); 

if (rows.length != 1) { 
    throw new StateError('Something is wrong'); 
} 

var row = rows.first; 

Ma questo è molto più lungo. In alternativa si consiglia di assert.

Come List strumenti Iterable, contiene anche single. Il getter single è utile anche per i flussi, se si prevede esattamente un elemento. Considera lo stesso esempio di

+0

Grazie mille! È molto facile da capire Avevo trascurato che funziona come una scorciatoia per affermare i record estratti. –

Problemi correlati