L'operatore di assegnazione è scritto correttamente in Pascal. operatore di assegnazione. Operatori di input, output, assegnamento

Tipo di lezione:

  • educativo. Agli studenti viene presentato un nuovo operatore di linguaggio Pascal;
  • ripetizione del tema Memoria interiore computer";
  • rafforzare le conoscenze acquisite.

Argomento della lezione:“Programmazione in Pascal. operatore di assegnazione.

Obiettivi:

  • Introdurre il concetto di "Operatore di Assegnazione".
  • Distinguere operazioni valide per numeri interi e numeri reali.
  • Comporre e valutare correttamente le espressioni utilizzando l'operatore di assegnazione.
  • Scrivere programmi per compiti semplici.

Durata della lezione: 1 ora e 30 minuti.

DURANTE LE CLASSI

Prima lezione

1. Ripetizione dell'argomento della lezione precedente "Tipi di dati". Esempi di utilizzo di parole che suonano allo stesso modo ma hanno significati diversi.

L'insegnante e gli studenti lavorano sotto forma di "domanda-risposta" (10 minuti).

2. Il docente spiega il nuovo argomento utilizzando la lezione-presentazione multimediale “Programmazione in Pascal. operatore di assegnazione. Viene data la definizione del concetto di "operatore di assegnazione", viene data la forma generale e strutturale dell'operatore. Prima di considerare il lavoro dell'operatore di assegnazione, ricordiamo e ripetiamo l'argomento “Random Access Memory, Properties Memoria ad accesso casuale».

Accompagnato da una presentazione. Allegato 1 (15 minuti).

3. Gli studenti lavorano in modo indipendente, leggendo e prendendo appunti su un nuovo argomento (la presentazione della lezione è preregistrata sui computer degli studenti, le domande per prendere appunti sono determinate dall'insegnante). Qui gli studenti possono familiarizzare con i testi dei programmi che utilizzano l'operatore di assegnazione. Allegato 2(20 minuti).

Seconda lezione

4. Gli studenti lavorano alla lavagna, facendo esercizi (12-15 minuti).
1. L'insegnante conduce il controllo delle conoscenze sotto forma di test. Il programma del test è preregistrato sui computer degli studenti. Il punteggio è fissato dal programma. Allegato 5(10 minuti).
5. Gli studenti svolgono un piccolo lavoro indipendente sulle schede, oppure scrivono ed eseguono il debug di un programma in LPL Pascal, che utilizza gli operatori di assegnazione (l'insegnante chiama i numeri delle schede con i compiti). Gli studenti sono valutati per il loro lavoro. Appendice 3 . Appendice 4(15 minuti).
Compiti a casa. Gli studenti sono invitati a scrivere il testo di un semplice programma in LPL Pascal, che utilizza l'operatore/i di assegnazione (per quegli studenti che non hanno avuto il tempo di completare il compito in classe).

Conclusioni:

  • Attraverso la ripetizione del blocco 1 dell'argomento della lezione precedente.
  • Attraverso i blocchi 2, 3 e 4, viene assegnato e fissato un nuovo argomento "Operatore di assegnazione".
  • Attraverso i blocchi 5 e 6, viene eseguito il controllo della conoscenza.

Programmazione in Pascal

Lezione #1 (2 ore). Variabili e costanti. operatore di assegnazione

  1. Controllo dei compiti.
  2. Nuovo argomento.
  3. Compiti a casa.

Controllo dei compiti.

2. Nuovo argomento: “Variabili e costanti. Operatore di assegnazione"

Variabile - è il nome dell'area di memoria (la dimensione dell'area dipende dal tipo di dati) che memorizza il valore assegnato alla variabile. Una variabile può essere paragonata a una scatola che contiene un valore (il miglior paragone è con un condominio, dato che puoi togliere qualcosa dalla scatola e sarà l'ultima, cioè la scatola rimane vuota, e la variabile, anche se è stato utilizzato, rimane nell'area di memoria).
Costante - fissi singoli valori numerici o di testo che non possono essere modificati durante l'esecuzione del programma.
operatore di assegnazione. Uno degli operatori più utilizzati operatore di assegnazione. Vista generale dell'operatore di assegnazione:

nome variabile:= espressione;

L'espressione può essere sia un valore specifico (ovvero un numero intero o reale, ad esempio 22 o 2,5, un valore simbolico: "ABC", un valore logico: VERO o FALSO), sia un'espressione (valori + operazioni su loro), il cui risultato sarà assegnato alla variabile sul lato sinistro.

ESEMPI:

PAG:= 10;(valore specifico come numero);
X:= X + 1;(espressione);
DO:=SI;(nome variabile);
G:= 'CIAO'; ( specifico valore simbolico);
X:= (-A + SIN(Y) - 4 * B * X) / (2 * C);(espressione matematica);
Y:= VERO;(valore logico specifico).

La differenza tra l'operazione di assegnazione in matematica e la programmazione.

In matematica, l'espressione = in significa che i valori calcolati per a e b devono essere uguali.
In programmazione, A := B significa che un valore memorizzato in un'area di memoria denominata B viene inserito in un'area di memoria denominata A. Pertanto, l'espressione inversa
B:= A dà un risultato diverso.
Esempio: i valori 5 e 9 sono posizionati rispettivamente in A e B.

LA: = 5;
B:=9

a) Il risultato dell'operazione A:= B;

b) Il risultato dell'operazione B:= A;

Ecco un'altra differenza significativa tra il segno di uguale e l'operatore di assegnazione: LA = LA + 1;
In matematica, una tale espressione è semplicemente priva di significato, poiché l'identità è falsa. Non esistono tali valori numerici di A per i quali sarebbe vero. In programmazione, ciò significa che 1 viene aggiunto al valore memorizzato nella cella A e il nuovo valore ottenuto sostituisce quello vecchio nella cella A. Ad esempio, se A aveva un valore di 5 prima di eseguire questa istruzione, dopo l'esecuzione lo farà essere 6.

La prossima differenza: l'espressione matematica A + 9 - B = X è abbastanza ragionevole e può significare che quando sostituisci alcuni numeri invece di A e B nella parte sinistra dell'espressione, otterrai N. Allo stesso tempo, in la programmazione di questa espressione non ha senso, poiché la parte sinistra dell'espressione deve contenere il nome dell'area di memoria a cui è assegnato il valore calcolato sulla parte destra. Se provi ad inserire una tale espressione nel tuo programma, otterrai un messaggio di errore, perché il nome della variabile è A + 9 - B non capirà.

scrivi nella solita forma:

(- b + sqrt(sqr(b) - 4 * a * c))/(2 * a);
a / b * (c + d) - (a - b) / b / c + 1E - 8;

Bibliografia:

  • V.B. Popov"TURBO PASCAL per gli scolari I", "Finanza e statistica", Mosca, 1996
  • AA. Cherno in "Sinossi delle lezioni di informatica nelle classi 9 - 11", "Insegnante", Volgograd, 2004.
  • DM Zlatopolsky“Vado a un corso di informatica. Problemi nella programmazione, classi 7 - 11", "Primo settembre", Mosca, 2001.

Operatore- un ordine per eseguire azioni specifiche. Il linguaggio di programmazione Pascal contiene 11 operatori.

Operatore di assegnamento in Pascal

L'operatore di assegnazione è l'operatore più comunemente utilizzato in Turbo Pascal.

Formato record: X:=A;
Dove: X– nome variabile;
UN- espressione ;
:= - segno di assegnazione.

Lavoro dell'operatore: Durante l'esecuzione dell'istruzione, il valore a destra dell'espressione viene calcolato e assegnato al nome della variabile.

Il tipo della variabile e il tipo dell'espressione devono corrispondere, tranne quando l'espressione è di un tipo intero e la variabile è di un tipo reale. In questo caso, il valore calcolato dell'espressione viene convertito in un tipo reale.

Esempio 9.1. Scrivere un programma per il calcolo delle funzioni:

y=cosa+inb; n=k+1; r=ord(#65).

Var
a, b, y: reali;
k, n: numero intero;
r: carattere;
t, v, u: booleano;
* * *
y:= cos(a)+ln(b);
n:=k+1;
r:=ord(#65);
t:=(v e u)o(v e non u);
* * *
FINE.

Operatore di salto in Pascal

In Turbo Pascal viene adottato l'ordine naturale di esecuzione degli operatori, ovvero nell'ordine in cui compaiono nel testo del programma. L'istruzione jump interrompe l'ordine naturale di esecuzione delle istruzioni e trasferisce il controllo all'istruzione contrassegnata con l'etichetta specificata nell'istruzione jump.

Formato di registrazione: GoTo m;

Dove: vai a- vai a;
M- etichetta.

Lavoro dell'operatore: L'istruzione jump trasferisce il controllo all'istruzione contrassegnata dall'etichetta M.
L'uso di un'istruzione jump in un TR è indesiderabile perché viola l'integrità strutturale del programma. Un tale programma è difficile da leggere, eseguire il debug e modificare. L'uso dell'operatore di salto nel TR è soggetto a restrizioni che ne impediscono l'uso indiscriminato.

Usando l'istruzione jump, puoi trasferire il controllo all'interno di un livello o saltare da un livello interno a uno esterno. Le transizioni dallo strato esterno allo strato interno sono vietate. Ad esempio, da un programma al corpo di una subroutine o all'interno di un'istruzione loop o di un'istruzione condizionale.


L'operatore di assegnazione è l'operatore più semplice e più comune.

Formato dell'operatore di assegnazione

Un operatore di assegnazione è una notazione che contiene il simbolo = (segno di uguale), a sinistra del quale si trova il nome della variabile ea destra l'espressione. L'operatore di assegnazione termina con un segno; (punto e virgola).

Variabile = Espressione ; // operatore di assegnazione

L'operatore di assegnazione può essere distinto nel testo del programma dalla presenza di un segno di uguale. Un'espressione può essere una costante, una variabile, una chiamata di funzione o l'espressione stessa.

Regola di esecuzione dell'operatore di assegnazione

L'operatore di assegnazione, come qualsiasi altro operatore, è eseguibile. Ciò significa che la voce che compone l'istruzione di assegnazione viene eseguita secondo la regola. Quando viene eseguito un operatore di assegnazione, viene valutato il valore sul lato destro, quindi questo valore viene assegnato alla variabile a sinistra del segno di uguale. Come risultato dell'esecuzione dell'istruzione di assegnazione, la variabile sul lato sinistro ottiene sempre un nuovo valore; questo valore può essere diverso o uguale al valore precedente di questa variabile. L'espressione a destra dell'operatore di assegnazione viene valutata in base all'ordine in cui vengono valutate le espressioni (vedere Operazioni ed espressioni).

Esempi di dichiarazione di assegnazione

In un operatore di assegnazione, è consentita una dichiarazione di tipo di variabile a sinistra del segno di uguale:

int In = 3 ;
doppio Do = 2.0 ;
bool Bo = vero ;
colore Co = 0 x008000 ; // Alla variabile Co viene assegnato un valore costante
stringSt = "sss"; // Alla variabile St viene assegnato il valore di una costante
dataora Da = D "01/01/2004"; // Alla variabile Da viene assegnato il valore di una costante

Le variabili dichiarate in precedenza vengono utilizzate in un'istruzione di assegnazione senza specificare un tipo.

Dentro = 7 ; // Alla variabile In viene assegnato il valore di una costante
Fare = 23,5 ; // Alla variabile Do viene assegnato il valore di una costante
Bo = 0 ; // Alla variabile Bo viene assegnato il valore di una costante

In un operatore di assegnazione, non è consentito dichiarare il tipo di una variabile a destra del segno di uguale:

In = int In_2; // Non è consentito dichiarare il tipo di variabili sul lato destro
Do = double Do_2; // Non è consentito dichiarare il tipo di variabili sul lato destro

L'istruzione di assegnazione non consente la dichiarazione ripetuta del tipo di variabili.

int dentro; // Dichiarazione del tipo di variabile In
int In = In_2; // La nuova dichiarazione di una variabile non è consentita (In)

Esempi di utilizzo sul lato destro delle funzioni personalizzate e standard:

In = Mia_Funzione(); // In è impostato su utente. funzioni
Do = Gipo (Do1 , Do1 ); // Imposta su utente. funzioni
Bo = ÈConnesso(); // Bo impostato su standard. funzioni
St = NomeOggetto(0) ; // St è impostato su std. funzioni
Da = TempoCorrente(); // Da è impostato su standard. funzioni

Esempi di utilizzo sul lato destro delle espressioni:

In = (My_Function() + In2 ) / 2 ; // La variabile In è assegnata
// ..valore dell'espressione
Do = MathAbs (Do1 + Gipo (Do2 , 5 ) + 2.5 ) ; // La variabile Do è assegnata
// ..valore dell'espressione

Quando si esegue il calcolo in un operatore di assegnazione, vengono applicate le regole per il casting dei tipi di dati (vedere Type Casting).

Esempi di assegnazione in forma breve

MQL4 utilizza anche una forma abbreviata di operatori di assegnazione. Questa è una forma di istruzioni di assegnazione che utilizza operazioni di assegnazione diverse dall'operazione di assegnazione = (segno di uguale) (vedi Operazioni ed Espressioni). Gli operatori in forma abbreviata sono soggetti alle stesse regole e restrizioni. La forma abbreviata degli operatori di assegnazione viene utilizzata nel codice per chiarezza. Il programmatore, a sua discrezione, può utilizzare l'una o l'altra forma dell'operatore di assegnazione. Qualsiasi operatore di assegnazione in forma abbreviata può essere facilmente riscritto in uno in formato completo e il risultato dell'esecuzione dell'operatore non cambierà.

Dentro /= 33 ;
Dentro = Dentro / 33 ;

St += "_exp7"; // Forma abbreviata dell'operatore di assegnazione
St = St + "_exp7"; // La forma completa dell'operatore di assegnazione

Abbiamo considerato i programmi più semplici scritti in Pascal nell'ambiente PascalABC.Net. Lì abbiamo eseguito operazioni aritmetiche sui numeri e poi le abbiamo emesse usando l'operatore write (o writeln). Ma non abbiamo utilizzato l'operatore di assegnazione, che è molto comune nella programmazione. Quindi cos'è l'assegnazione?

Considera alcune variabili M e N che hanno determinati valori, diciamo, M = 12, N = 34. Per ciascuno di questi valori, il computer alloca un'area di memoria separata, che è un certo numero di celle o bit (1 cella = 1 morso). Non è possibile memorizzare più numeri (o altri tipi di dati) nella stessa posizione di memoria per lo stesso motivo per cui due litri di acqua non possono entrare in un barattolo da un litro.

Molto spesso diventa necessario togliere il valore della variabile M, pari a 12, e diventare invece uguale al valore della variabile N, cioè 34. Cosa fa il computer? Trova la locazione di memoria dove è “nascosto” il valore di N, lo copia (il numero 34), ritorna nella locazione di memoria M (uguale a 12), ne cancella il valore e ne inserisce uno nuovo, cioè 34. Come di conseguenza, M = 12 si è trasformato in M ​​= 34.

L'assegnazione è la registrazione dei dati nell'area della memoria del computer allocata per il valore di M, i dati che vengono archiviati in un'altra area della memoria del computer, dove viene registrato il valore di N.

L'assegnazione è scritta come M:= N , il che significa che il valore di N va a M. Sorge spontanea la domanda: che fine ha fatto il valore di N? Niente, ha solo "condiviso" il valore con la variabile M, ma lei stessa non è cambiata. A volte i neofiti della programmazione pensano che le variabili M e N siano scambiate, ma non è così. Per illustrare questo fenomeno, consideriamo il problema:

Compito. I numeri sono dati: M = 12, N = 34. Scambia i loro valori.

Dobbiamo assegnare 34 al numero M e 12 al numero N (viceversa). Molto spesso, i programmatori alle prime armi scrivono in questo modo:


Nella prima riga del codice, M è assegnato a N, cioè M:= 34. Nella seconda riga, N è assegnato a M, ma l'ultima variabile non è più uguale a 12, poiché ha cambiato il suo valore in la riga precedente a 34. Pertanto, entrambe le variabili saranno uguali a 34. Per dimostrazione scriveremo il codice completo che dovrai riscrivere nell'ambiente di programmazione PascalABC.Net:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var M,N: digitare numero intero;

Descrizione:

")" onmouseout="toolTip()">intero
; inizio scrivi ( "Inserisci i numeri M e N:" <-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } M := N; { <== M присваивается N, поэтому M = 34 } N := M; { <== N присваивается M, поэтому N = 34 } FINE.

Eseguire il programma per l'esecuzione; immettere 12 quando viene richiesto M, immettere 34 per N e premere Invio. Se tutto è stato eseguito correttamente, dovresti vedere:

Inserisci i numeri M e N:
M=12
N=34
Risultato:
M=34 N=34

Come puoi vedere dall'ultima riga, non è quello che volevamo: scambiare i valori di M e N in alcuni punti.

Per ottenere il risultato corretto, è necessario fissare il valore iniziale della variabile M, ad esempio s:= M ("ricorda" M scrivendone il valore nella variabile s). Di conseguenza, assegneremo al numero N non il valore della variabile M, che è già cambiato, ma utilizzeremo il valore s uguale ad esso:


In conformità con le ultime modifiche, il programma precedente assumerà la forma:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var M, N, S: digitare numero intero;

Descrizione:
Rappresenta un intero con segno a 32 bit.

Intervallo di valori: -2 147 483 648 .. 2 147 483 647")" onmouseout="toolTip()">intero
; inizio scrivi ( "Inserisci i numeri M e N:"); scrivi("M="); readln(M); (<-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } s := M; { <== запоминаем M, равное 12 } M := N; ( M = 34 perché N = 34 ) N := s; ( N = 12 poiché s = 12 ) writeln("Risultato:" ); writeln (" M = " , M, " N = " , N) ; readln FINE.

Riscrivi questo programma in PascalABC.Net ed esegui (tasto F9 sulla tastiera). Se la risposta è:

Inserisci i numeri M e N:
M=12
N=34
Risultato:
M=34 N=12

quindi il programma funziona correttamente. Come puoi vedere dall'ultima riga, i valori dei numeri M e N vengono scambiati.

Incarico- un meccanismo di associazione nella programmazione che consente di modificare dinamicamente i collegamenti tra i nomi degli oggetti dati (di solito variabili) e i loro valori. A rigor di termini, la modifica dei valori è un effetto collaterale dell'operazione di assegnazione e in molti linguaggi di programmazione moderni l'operazione stessa restituisce anche un risultato (di solito una copia del valore assegnato). A livello fisico, il risultato di un'operazione di assegnazione è scrivere e riscrivere celle di memoria o registri del processore.

L'assegnazione è uno dei costrutti centrali nei linguaggi di programmazione imperativi, implementato in modo efficiente e semplice sull'architettura von Neumann che è alla base dei computer moderni.

Nei linguaggi di programmazione orientati agli oggetti, la semantica dell'assegnazione è molto diversa. Ad esempio, nel linguaggio Kotlin, durante l'assegnazione, l'oggetto viene copiato e nel linguaggio Rust l'oggetto viene spostato (move-semantics) e il vecchio bundle diventa non valido.

impostato<целевая_переменная> <выражение>

Questa notazione equivale a chiamare una funzione. Allo stesso modo, in COBOL vecchio stile:

MOLTIPLICA 2 PER 2 DANDO QUATTRO.

Algoritmo di lavoro

  • Calcola il valore a sinistra del primo operando. A questo punto, diventa nota la posizione dell'oggetto bersaglio, il destinatario del nuovo valore.
  • Calcola il valore della mano destra del secondo operando. Questo passaggio può essere arbitrariamente lungo e includere altre istruzioni (incluse le assegnazioni).
  • Assegna il valore della mano destra calcolato al valore della mano sinistra. Innanzitutto, in caso di conflitto di tipo, devono essere espressi (o viene emesso un messaggio di errore a causa della sua impossibilità). In secondo luogo, l'effettiva assegnazione di valori nei moderni linguaggi di programmazione può essere sostituita e includere non solo il trasferimento di valori di celle di memoria (ad esempio, a "proprietà" di oggetti in , sovraccarico dell'operatore).
  • Restituisce il valore di destra calcolato come risultato dell'operazione. Non richiesto in tutte le lingue (ad esempio, non necessario in Pascal).

Designazione

La scelta del simbolo di assegnazione è oggetto di controversia tra i progettisti del linguaggio. Si ritiene che l'uso del simbolo = per l'assegnazione confonda i programmatori e sollevi anche la questione della scelta di un simbolo per l'operatore di confronto, che è difficile da risolvere bene.

Un noto cattivo esempio è la scelta di un segno uguale per denotare un incarico, che risale a Fortran nel 1957 ed è ancora ripetuto ciecamente da una massa di sviluppatori di linguaggi. Questa cattiva idea rovescia la secolare tradizione di utilizzare il segno "=" per denotare un confronto di uguaglianza, un predicato che valuta "vero" o "falso". Ma in Fortran, questo simbolo ha cominciato a denotare l'assegnazione, la coercizione all'uguaglianza. In questo caso gli operandi sono in posizione disuguale: l'operando di sinistra, la variabile, deve essere reso uguale all'operando di destra, l'espressione. Quindi x = y non significa la stessa cosa di y = x.

Testo originale (inglese)

Un noto esempio di cattiva idea è stata la scelta del segno uguale per denotare l'assegnazione. Risale a Fortran nel 1957 ed è stato ciecamente copiato da eserciti di progettisti di linguaggi. Perché è una cattiva idea? Perché rovescia una tradizione secolare lasciare che "=" denoti un confronto per l'uguaglianza, un predicato che è vero o falso. Ma Fortran lo fece significare assegnazione, applicazione dell'uguaglianza. In questo caso, gli operandi sono su un piano di disparità: l'operando di sinistra (una variabile) deve essere reso uguale all'operando di destra (un'espressione). x = y non significa la stessa cosa di y = x.

L'implementazione di questa posizione di Wirth può essere considerata che nel linguaggio Pascal, di cui è l'autore, l'operatore di assegnazione è: = , mentre per confronto, si usa semplicemente =.

La scelta del carattere dell'operatore di uguaglianza nella lingua quando si utilizza = come assegnazione viene risolta:

  • Introducendo un nuovo simbolo linguistico per l'operatore del test di uguaglianza.
LA = B = C

alla variabile A viene assegnato il valore booleano dell'espressione di relazione B = C. Questa notazione comporta una diminuzione della leggibilità ed è usata raramente.

Caratteristiche semantiche

Tutt'altro che sempre "intuitivo" (per i programmatori di linguaggi imperativi) il modo di interpretare l'assegnazione è l'unico vero e possibile.

Dalla sintassi utilizzata nei linguaggi imperativi, non è sempre possibile capire come viene implementata la semantica di assegnazione a meno che non sia esplicitamente definita nella lingua.

A = b = a a = 1000

Dopodiché, b avrà un valore, semplicemente perché, in effetti, il suo valore è il valore di a . Il numero di riferimenti allo stesso oggetto dati è chiamato la sua cardinalità e l'oggetto stesso viene ucciso (distrutto o dato al Garbage Collector) quando la sua cardinalità raggiunge lo zero. I linguaggi di programmazione di livello inferiore (come C) consentono al programmatore di controllare esplicitamente se viene utilizzata la semantica del puntatore o la semantica della copia.

Sostituzione operazione

Molte lingue offrono la possibilità di modificare il significato di un'assegnazione, tramite il meccanismo di proprietà o sovraccaricando l'operatore di assegnazione. La sostituzione può rendersi necessaria per effettuare verifiche sulla validità del valore assegnato o per eventuali altre operazioni aggiuntive. L'overload dell'operatore di assegnazione viene spesso utilizzato per fornire una "copia completa", ovvero copiare valori anziché riferimenti, che vengono copiati per impostazione predefinita in molte lingue.

Tali meccanismi consentono di fornire comodità sul lavoro, quindi per un programmatore non c'è differenza tra l'utilizzo di un operatore integrato e uno sovraccarico. Per lo stesso motivo, sono possibili problemi, poiché le azioni dell'operatore di overload possono essere completamente diverse dalle azioni dell'operatore predefinito e la chiamata di funzione non è ovvia e può essere facilmente scambiata per un'operazione incorporata.

Disegni estesi

Costrutti di assegnazione in vari linguaggi di programmazione

Poiché l'operatore di assegnazione è ampiamente utilizzato, gli sviluppatori di linguaggi di programmazione stanno cercando di sviluppare nuovi costrutti per semplificare la scrittura di operazioni tipiche (per aggiungere il cosiddetto "zucchero sintattico" al linguaggio). Inoltre, nei linguaggi di programmazione di basso livello, il criterio di inclusione è spesso la capacità di compilare in un codice eseguibile efficiente. Il linguaggio C è particolarmente famoso per questa proprietà.

Obiettivi multipli

Un'alternativa all'operatore semplice è la possibilità di assegnare il valore di un'espressione a più oggetti. Ad esempio, in PL/1, l'operatore

SOMMA, TOTALE = 0

assegna contemporaneamente zero a SUM e TOTAL . In Ada, l'assegnazione è anche un'istruzione, non un'espressione, quindi la notazione per l'assegnazione multipla è:

SOMMA, TOTALE: Intero:= 0;

Un'assegnazione simile in Python ha la seguente sintassi:

Somma = totale = 0

A differenza di PL/1, Ada e Python, dove l'assegnazione multipla è considerata solo una notazione abbreviata, in C, Lisp e altri, questa sintassi ha una base rigida: l'operatore di assegnazione restituisce semplicemente il valore assegnatogli (vedi sopra). Quindi l'ultimo esempio è in realtà:

Somma = (totale = 0)

Una riga come questa funzionerà in C (se aggiungi un punto e virgola alla fine), ma causerà un errore in Python.

Assegnazione parallela

L'ultima opzione funziona solo con i tipi che supportano le operazioni sui bit (ad esempio, per double, il compilatore del linguaggio non consentirà di scambiare i valori delle variabili in questo modo).

un ||= 10

Questo costrutto assegna un valore alla variabile a solo se il valore non è stato ancora assegnato o è uguale a false .

Dichiarazioni composte

L'operatore di assegnazione composto consente di abbreviare una forma di assegnazione comunemente utilizzata. Utilizzando questo metodo, ad esempio, è possibile abbreviare la notazione di un'assegnazione che utilizza la variabile di destinazione come primo operando a destra dell'espressione.