2010-07-29 14 views
6

In alcune lingue, se una funzione restituisce un array, al contrario di memorizzare la matrice in una variabile poi recuperato un unico elemento, in questo modo:Esiste un nome per questa sintassi getSomeValues ​​() [0]?

var someValues = getSomeValues(); 
var firstElement = someValues[0]; 

È possibile utilizzare la notazione indice di matrice immediatamente dopo la chiamata di funzione per recuperare l'elemento dell'array restituito invece, in questo modo:

var firstElement = getSomeValues()[0]; 

cosa è questo costrutto o sintassi noti come? Ha un nome speciale?

+1

E '[Array Dereferenziare] (http://wiki.php.net/rfc/functionarraydereferencing) e un duplicato di [elemento dell'array Accesso da chiamata di funzione in PHP] (http: // StackOverflow. it/questions/2282051/access-array-element-da-function-call-in-php) – Gordon

+1

@Gordon: a pensarci bene, non penso che sia davvero un duplicato dal momento che sto chiedendo come si chiama quella domanda sta chiedendo perché non funziona in PHP. Ma vabbè, almeno ora so come si chiama. – BoltClock

+0

@BoltClock true, ma ottieni la risposta alla tua leggendo l'altra domanda, quindi mentre semanticamente non è un duplicato, contiene abbastanza informazioni per rispondere alle tue. – Gordon

risposta

3

È possibile utilizzare la notazione indice di matrice direttamente sulla chiamata di funzione per recuperare l'elemento

var firstElement = getSomeValues()[0]; 

Quello che state facendo sta accedendo l'elemento indicizzato dell'array/raccolta restituita dalla funzione. Non stai accedendo direttamente a un indice in una funzione.

Chiamerei questo "concatenare" un indicizzatore al valore restituito.

+0

Sì, volevo dire questo. Avrei dovuto essere più chiaro nella mia domanda. – BoltClock

+0

@BoltClock - Quindi se sto capendo correttamente la mia risposta non è quello che stai cercando? – ChaosPandion

+0

@ChaosPandion: Non sarei sicuro di me stesso da quando lo sto chiedendo, ma se capisci che è così, così sia. – BoltClock

1

Eh .. Pericoloso ... ??

Se non ci sono elementi nell'array restituito.

È una cattiva abitudine entrare in contatto con gli array, javascript a parte come commento.

Diverso da quello che l'idea è conosciuto come 'metodo di concatenamento'

+0

Prego elaborare. – ChaosPandion

+2

Ok, ma per essere chiari questo non sarebbe pericoloso in un linguaggio come JavaScript. A meno che, naturalmente, non si provi a invocare il valore di ritorno 'non definito 'come funzione. – ChaosPandion

1

credo che non ha alcun nome speciale. Stai solo accedendo al primo elemento di un array restituito. In molte lingue non c'è nulla di speciale in una funzione che restituisce un array.

Nel tuo caso, sei non applicare [] (indicizzazione) Operatore a una funzione chiamata. Invece, lo si applica all'array restituito. Con la precedenza, sembra così.

var firstElement = (getSomeValues())[0]; 

Quindi non c'è niente di speciale.


Tuttavia, c'è un altro modello di ottenere il primo elemento, in relazione alla programmazione funzionale. Ad esempio:

($first_value, @rest_of_list) = getSomeValues(); # Perl 
let first::rest = getSomeValues() in ...   (* OCaml *) 

Questo salva il primo valore di un elenco (tecnicamente, non di un array) in $first_value, e il resto sono memorizzati nella variabile matrice. Quella variabile di matrice può essere omessa e quindi si ottiene solo il primo valore.

($first_value) = getSomeValues();  # Perl 
let first::_ = getSomeValues() in ... (* OCaml *) 

Il concetto più generico, di cui quello mostrato sopra è solo un caso particolare, è pattern matching (more on pattern matching). In alcuni linguaggi funzionali (nessuno dei precedenti, ma in Haskell, ad esempio) è diverso: in realtà calcola solo il primo elemento e non fa valutare il resto dell'elenco.

Tuttavia, non c'è nulla che possa qualificarsi come corrispondenza del modello nel codice procedurale che hai mostrato.

+0

Grazie per la spiegazione approfondita, * e * l'esempio di programmazione funzionale. +1 – BoltClock

+0

'sequence.First()' sarebbe la chiamata .NET equivalente? – ChaosPandion

2

Array dereferenziazione

Problemi correlati