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.