I comandi per l'inizializzazione delle variabili sono mai usati come espressioni?

0

In C, il comando assignment restituisce anche il valore assegnato, quindi è anche un'espressione.

Allo stesso modo, l'inizializzazione, che avviene quando si definisce una variabile, assegna anche un valore alla variabile appena creata. Nei linguaggi di programmazione, un comando per l'inizializzazione restituisce sempre un valore, quindi può essere usato come espressione?

In sostanza, sto cercando di scoprire se l'inizializzazione è vista come un caso speciale di assegnazione.

Grazie.

    
posta Tim 26.09.2016 - 21:27
fonte

3 risposte

3

Nel tipico linguaggio imperativo, una dichiarazione di variabile è un'istruzione, non un'espressione, e quindi non restituisce un valore. Ma questo non è il caso per tutte le lingue. Ad esempio in Python, un'inizializzazione è la stessa di un'assegnazione e restituisce il valore assegnato.

    
risposta data 26.09.2016 - 22:09
fonte
2

Ci sono così tante lingue che ci sono un paio di lingue in cui le dichiarazioni sono espressioni.

Ad esempio Perl. Le variabili con scope lessicale sono dichiarate con my , ad es. %codice%. Questo valuta un valore L che può essere assegnato o utilizzato in altro modo. Un esempio importante è l'utilizzo consigliato della funzione my $var . Richiede tre argomenti open . L'argomento filehandle è una variabile a cui verrà assegnato l'oggetto filehandle, il resto è qualsiasi espressione stringa:

open(my $fh, '<', 'example.txt') or die $!;

Le funzioni open(FILEHANDLE, MODE, FILENAME) restituiscono successo / fallimento, non il filehandle. Per "restituire" il filehandle, quindi utilizza out-parameters / call-by-reference.

L'operatore di livello di espressione open è probabilmente dovuto alla progettazione del bytecode Perl: esiste un'istruzione separata per l'assegnazione e la dichiarazione (ha senso, poiché molte assegnazioni non sono inizializzazioni variabili) e tutte le istruzioni (anche le istruzioni! ) deve valutare un certo valore. La restrizione di my a un livello di istruzione sarebbe stata quindi artificiale.

In C ++, la sintassi consente esplicitamente dichiarazioni in modo condizionale. È utile verificare che il puntatore che si desidera utilizzare sia non null:

if (Thing* something = get_something()) {
  do_stuff_with(*something);
}

Sia Rust che Swift hanno una sintassi my simile per semplificare la corrispondenza dei pattern, sebbene in questo caso il valore dell'assegnazione non venga utilizzato.

In generale, le lingue imperative preferiscono limitare le dichiarazioni alle dichiarazioni, poiché ciò rende il codice più ovvio per gli esseri umani. Dove è stata dichiarata una variabile? Qual è lo scopo di una variabile? È più facile rispondere quando sai dove guardare.

    
risposta data 26.09.2016 - 23:36
fonte
1

Ok, in genere una dichiarazione di variabile che ha un inizializzatore non produce un valore come un'espressione di assegnazione regolare.

Questo perché nella maggior parte delle lingue, una dichiarazione di variabile è un'istruzione, non un'espressione.

    
risposta data 26.09.2016 - 22:09
fonte

Leggi altre domande sui tag