Precedente: Operatori di assegnamento, Su: Tutti gli operatori [Contenuti][Indice]
Gli operatori di incremento e decremento incrementano o riducono il
valore di una variabile di uno. Un operatore di assegnamento può fare la
stessa cosa, per cui gli operatori di incremento non aggiungono funzionalità
al inguaggio awk
; in ogni caso, sono delle convenienti abbreviazioni
per operazioni molto comuni.
L’operatore per aggiungere uno è ‘++’. Può essere usato per incrementare
una variabile prima o dopo aver stabilito il suo valore. Per preincrementare
una variabile v
, si scrive ‘++v’. Questo aggiunge uno al valore di
v
; questo nuovo valore è anche il valore dell’espressione.
(L’espressione di assegnamento ‘v += 1’ è totalmente equivalente.)
Scrivendo ‘++’ dopo la variabile si specifica un postincremento.
Questo incrementa il valore della variabile nello stesso modo; la differenza è
che il valore dell’espressione d’incremento è il vecchio valore della
variabile. Così, se pippo
ha il valore quattro, l’espressione
‘pippo++’ ha il valore quattro, ma cambia il valore di pippo
in cinque.
In altre parole, l’operatore restituisce il vecchio valore della variabile, ma
con l’effetto collaterale di incrementarlo.
Il postincremento ‘pippo++’ è quasi come scrivere ‘(pippo += 1) - 1’.
Non è perfettamente equivalente perché tutti i numeri in awk
sono in
virgola mobile. In virgola mobile, ‘pippo + 1 - 1’ non è necessariamente
uguale a pippo
, ma la differenza è molto piccola finché si ha a che
fare con numeri relativamente piccoli (inferiori a
1012).
I campi di un record e gli elementi di un vettore vengono incrementati proprio come le variabili. (Si deve usare ‘$(i++)’ quando si deve fare un riferimento a un campo e incrementare una variabile allo stesso tempo. Le parentesi sono necessarie a causa della precedenza dell’operatore di riferimento ‘$’.)
L’operatore di decremento ‘--’ funziona proprio come ‘++’, solo che sottrae uno anziché aggiungerlo. Come ‘++’, si può usare prima di lvalue per predecrementare o dopo per postdecrementare. Quel che segue è un sommario delle espressioni di incremento e di decremento:
++lvalue
Incrementa lvalue, restituendo il nuovo valore come valore dell’espressione.
lvalue++
Incrementa lvalue, restituendo il vecchio valore di lvalue come valore dell’espressione.
--lvalue
Decrementa lvalue, restituendo il nuovo valore come valore dell’espressione. (Quest’espressione è come ‘++lvalue’, ma invece di aggiungere, sottrae.)
lvalue--
Decrementa lvalue, restituendo il vecchio valore di lvalue come valore dell’espressione. (Quest’espressione è come ‘lvalue++’, ma invece di aggiungere, sottrae.)
Ordine di valutazione degli operatori
— Groucho Marx
Che cosa succede con qualcosa come questo? b = 6 print b += b++ O con qualcosa di più strano ancora? b = 6 b += ++b + b++ print b In altre parole, quando hanno effetto i vari effetti collaterali previsti
dagli operatori col suffisso (‘b++’)? Quando gli effetti collaterali
si verificano è definito dall’implementazione.
Per dirla diversamente, questo è compito di ogni specifica versione di
In breve, è sconsigliato fare cose come questa e, in ogni caso, ogni cosa che possa incidere sulla portabilità. Si dovrebbero evitare cose come queste nei programmi. |
Precedente: Operatori di assegnamento, Su: Tutti gli operatori [Contenuti][Indice]