Operatori

6. Principali operatori


Principali operatori

In questo capitolo vedremo i principali operatori che MySQL ci mette a disposizione per confrontare i dati nella costruzione delle nostre query.

Faccio un esempio pratico.
Se volessimo trovare tutti gli utenti che hanno fanno "Rossi" di cognome, allora utilizzeremo l'operatore di uguaglianza = sulla colonna cognome della tabella utenti, come nell'esempio che segue.

SELECT * FROM `utenti` WHERE `cognome` = 'Rossi';

Al nome della colonna segue quindi l'operatore, mentre all'operatore segue il valore che deve essere confrontato.
Il valore utilizzato per il confronto può essere:

  • Statico: WHERE `cognome` = 'Rossi'
  • Espressione: WHERE `anno_nascita` = 2000 + 5
  • Un altro campo: WHERE `nome` = `cognome`

Prima di vedere il resto degli operatori, li dividerermo in due macrocategorie, ossia gli Operatori di confronto e gli Operatori di condizione.

Gli operatori di condizione servono a costruire delle clausole WHERE più complesse, per realizzare quindi delle condizioni formate da ulteriori sotto-condizioni, le quali saranno invece costruite con degli operatori di confronto.

Per esempio: AND è un'operatore di condizione e lo utilizzeremo per strutturare una WHERE in due sotto-condizioni nelle quali utilizzeremo invece l'operatore di uguaglianza in questo modo:

SELECT * FROM `utenti` WHERE `nome` = 'Mario'
AND `anno_di_nascita` = 1980;

Nell'esempio precedente verranno selezionati tutti gli utenti che hanno Mario come nome e che sono nati nel 1980.

Principali operatori di Confronto

  • Operatore di uguaglianza    =
  • Operatore di disuguaglianza    != oppure <>
  • Operatore di minoranza    <
  • Operatore di maggioranza    >
  • Operatore di minoranza o uguaglianza    <=
  • Operatore di maggioranza o uguaglianza    >=

Principali operatori di Condizione

  • Operatore AND logico
  • Operatore OR logico

Con questi operatori è possibile costruire condizioni complesse quanto si vuole, annidando ulteriori sotto-condizioni grazie all'ausilio di parantesi tonde come mostrerò nell'esempio che segue:

SELECT * FROM `utenti` WHERE `nome` = 'Mario` AND
(`cognome` = 'Rossi' OR `cognome` = 'Verdi');

Nell'esempio verranno selezionati tutti gli utenti che si chiamano Mario Rossi oppure Mario Verdi.

9. Operatori

Gli operatori vengono usati per comporre delle espressioni, producendo un risultato aritmetico o condizionale, a seconda dell'operatore utilizzato e dai suoi operandi.

Un'espressione condizionale produce come risultato un valore Booleano, ossia true oppure false, e viene solitamente usato nelle strutture di controllo come una comune if :

var condizione:Boolean = 5 < 4;
trace(condizione); // Output : false

Nell'esempio soprastante, "5 < 4" è la nostra espressione condizionale e produce il valore false poichè 5 non è minore di 4.
L'operatore < è binario perchè considera due operandi, uno alla sua sinistra (5) ed uno alla sua destra (4).


Tipi di operatori

Esistono tre tipi di operatori, e vengono distinti dal numero di operandi che considerano.

  • Unari - Richiedono un solo valore (es. x++)
  • Binari - Richiedono due valori (es. x + y)
  • Ternari - Esiste un solo operatore ternario e richiede tre valori
    (es. x = (x == 1) ? 5 : 10)

Lista degli operatori

Di seguito la lista degli operatori più comuni con esempi di utilizzo.
Per la lista completa e i dettagli tecnici su ogni operatore supportato da ActionScript 3 vi rimando alla documentazione ufficiale.

Lista operatori ActionScript 3
Operatore Descrizione Esempio
++

Operatore unario di incremento, utilizzabile in modalità suffissa o prefissa.

In modalità prefissa l'operando viene incrementato prima di renderlo disponibile nell'espressione.

Suffissa
var x:int = 5;
y = x++;

y conterrà 5 e x 6

Prefissa
var x:int = 5;
y = ++x;

Sia x che y conterranno 6

--

Operatore unario di decremento, utilizzabile in modalità suffissa o prefissa.

In modalità prefissa l'operando viene decrementato prima di renderlo disponibile nell'espressione.

Suffissa
var x:int = 5;
y = x--;

y conterrà 5 e x 4

Prefissa
var x:int = 5;
y = --x;

Sia x che y conterranno 4

!

Operatore unario di negazione (NOT Logico).

Solitamente usato per invertire il risultato delle espressioni condizionali.

var condizione:Boolean = !(5 < 4);

condizione conterrà il valore true

new

Operatore unario utilizzato per creare una nuova istanza della classe specificata alla sua destra, chiamandone il costruttore.

var istanza:MiaClasse = new MiaClasse();

istanza conterrà un nuovo oggetto della classe MiaClasse

[ ]

Operatore unario di accesso agli array.

Restituisce il valore dell'array alla sua sinistra nella posizione specificata fra le parentesi quadre, oppure viene utilizzato per inizializzare un nuovo array.

var elemento:* = array[5];

elemento conterrà l'elemento di array nella posizione indicata dall'indice (5).

+ ; - ; * ; /

Operatori binari utilizzati per operazioni aritmetiche.

L'operatore + viene utilizzato anche per concatenare stringhe.

var x = "Flash ";
var y = x + "CS3";

y conterrà la stringa "Flash CS3"

%

Operatore binario modulo.

Restituisce il resto di una divisione.

var x:int = 17 % 4;

x conterrà il numero intero 1, poichè 17 diviso 4 fa 4 con il resto di 1.

= ; += ; -= ; *=
/= ; %= ; &= ; |=

Operatori d'assegnazione con operazione.

Assegnano un valore all'operando alla loro sinistra, utilizzandolo anche come operando per l'espressione a destra.

var x = 10;
x += 5; // Ossia x = x + 5;

x conterrà il valore 15

< ; > ; <= ; >=
== ; === ; != ; !==

Operatori di confronto.

Vengono utilizzati per costruire espressioni condizionali.

var x = 5;
var y = 20;

if (x != 5) y += x;
else y -= x;

y conterrà il numero intero 15

& ; && ; |
|| ; ^

Operatori condizionali.

Vengono utilizzati per relazionare 2 o più espressioni condizionali.

var x = 10;

if (x <= 10 && x >= 0) x += 3;
// Se x è compreso fra 10 e 0 inclusi

x conterrà il valore 13

?:

Operatore ternario condizionale.

Viene usato per sostituire blocchi condizionali if else semplici.

condizione ? operazione : alternativa

var x = 5;
var y = 20;

(x != 5) ? y += x : y -= x;

y conterrà il numero intero 15

11. Operatori

Gli operatori sono usati principalmente per costruire espressioni.
Solitamente, essi vengono posizionati fra due valori per produrne un terzo, creando così un'espressione.

PHP ci mette a disposizione tre tipi di operatori :

  • Unari - Richiedono un solo valore (es. $i++)
  • Binari - Richiedono due valori (es. $x $y)
  • Terzari - Esiste un solo operatore ternario e richiede tre valori (es. $x = ($y == 0) ? 5 : 10)

Vediamo ora la tabella degli operatori ordinati per precedenza in ordine decrescente :

Posizione Operatore Ambito Descrizione
  new new Istanzia un nuovo oggetto
Destra [ ] Array Array subscript
Destra ! Operatore Logico NOT Logico
Destra ~ Operatore sui bit NOT sui bit
Destra ++ Incremento \ decremento Operatore di incremento
Destra -- Incremento \ decremento Operatore di decremento
Destra (int), (double), (string), (array), (object) Tipi Operatori di Casting
Destra @ Errori Inibisce gli errori
Sinistra * Operatore aritmetico Moltiplicazione
Sinistra / Operatore aritmetico Divisione
Sinistra % Operatore aritmetico Modulo (resto divisione ecc...)
Sinistra + Operatore aritmetico Addizione
Sinistra - Operatore aritmetico Sottrazione
Sinistra . Operatore su stringa Concatenazione stringhe
Sinistra << ; >> Operatori sui bit Scorrimento bit a sinistra e destra
< ; <= Operatori di confronto Minore ; Minore uguale
> ; >= Operatori di confronto Maggiore ; Maggiore uguale
== ; === Operatori di confronto Uguaglianza nel valore ;
Uguaglianza nel tipo e nel valore
!= ; <> ; !== Operatori di confronto Disuguaglianza ; Disuguaglianza ;
Disuguaglianza nel tipo e nel valore
Sinistra & Operatore sui bit AND sui bit o passaggio parametri/variabili
per riferimento (es. $x = &$y)
Sinistra ^ Operatori sui bit XOR sui bit
Sinistra | Operatore sui bit OR sui bit
Sinistra && ; || Operatori Logici AND Logico ; OR Logico
Sinistra ?: Operatore Ternario Operatore condizionale
Sinistra = Operatore d'assegnazione Operatore d'assegnazione
Sinistra += ; -= ; *= ; /= ; %= ; &= ; |= ; ^= ; ~= ; <<= ; >>= Operatori d'assegnazione Operatori d'assegnazione con operazione
Sinistra .= Operatore su stringa Assegnazione con concatenazione stringa
Sinistra and ; xor ; or Operatori Logici AND Logico ; XOR Logico ; OR Logico
Sinistra , Diversi usi Separatore liste

Vediamo ora un esempio sulla precedenza degli operatori, per capire anche come sfruttare al meglio questa tabella.
L'esempio consiste in una semplice espressione, con una addizione e una moltiplicazione. L'operatore *, come potete vedere nella tabella, precede l'operatore +, di conseguenza ha la precedenza nella seguente espressione :

echo 1 + 5 * 2; // stampa : 11 e non 12
echo (1 + 5) * 2; // stampa : 12

Di seguito altri esempi commentati sulla precedenza degli operatori :

$x = 5;
$y = 10;

echo $x > $y ? 2 * 4 : 10 / 2; // stampa : 5
echo $x < $y ? 2 * 4 : 10 / 2; // stampa : 8

Riporto altri esempi sull'utilizzo di vari operatori :

$x = $a + $b; // somma $a e $b e memorizza il valore in $x

$x = 5;
echo $x *= 14 % 6; // stampa : 10 (14 diviso 6 da 2 di resto, moltiplica 2 ad $x e lo memorizza in quest'ultima

echo $x++; // stampa : 10 (stampa la $x e poi la incrementa)
echo $x; // stampa : 11
echo ++$x; // stampa : 12 (prima incrementa $x e poi la stampa)
echo $x; // stampa : 12

$stringa = "Roma";
$stringa .= " Caput Mundi"; // $stringa diventa : "Roma Caput Mundi"

Vediamo ora a cosa serve l'operatore Ternario ?: e come si usa.
Questo operatore ci consente di valutare una espressione (condizione), e in caso venga soddisfatta viene eseguita una determinata operazione, altrimenti viene eseguita l'operazione alternativa.

Bisogna specificare prima la condizione seguita dal punto interrogativo ?, poi la prima operazione che sarà eseguita nel caso in cui la condizione viene soddisfatta, a seguire i due punti :, e infine la seconda operazione che verrà eseguita se la condizione NON viene soddisfatta.

$stringa = "At vero eos et accusam et justo duo dolores et ea rebum.";

$messaggio = strlen($stringa) >= 100 ? "Stringa di 100 caratteri o più!" : "Stringa con meno di 100 caratteri!";

echo $messaggio; // stampa : "Stringa con meno di 100 caratteri!"

Parliamo ora del Casting.
Il casting è un operazione il cui scopo è quello di convertire il tipo di un dato in un altro tipo.

E' possibile effettuare due tipi di casting : uno implicito impostato automaticamente da PHP, ed uno esplicito impostato da noi tramite gli operatori di casting. Vediamone due esempi.

echo "44 gatti " + 1; // stampa : 45 - Casting implicito
echo "44 gatti " . 1; // stampa : "44 gatti 1" - Casting implicito
echo 1.28 + 2; // stampa : 3.28 - Nessun casting
echo (int) 1.28 + 2; // stampa : 3 - Casting esplicito

Nella prima echo possiamo osservare un casting di tipo implicito, infatti PHP esegue un casting (int) sulla stringa "44 gatti" perchè viene seguita dall'operatore aritmetico +.

Nella seconda echo abbiamo ancora un casting di tipo implicito, ma stavolta del tipo (string) sul valore 1, perchè viene usato l'operatore di concatenazione stringhe.

Nella terza echo non viene effettuato nessun casting, ma serve a rendere più chiaro il casting esplicito della quarta echo, dove tramite l'operatore di casting (int), viene detto a PHP di considerare il numero come intero, e non come numero a virgola mobile.

Prima di chiudere il capitolo, rivediamo gli Operatori sui bit.

Questi operatori sono particolari perchè convertono prima gli operandi dell'espressione nella loro rappresentazione binaria.
Ecco un esempio di come lavora l'operatore logico sui bit & :

// Operatore sui bit &

111101101 &
110111001
-------------
110101001

In questo caso quindi, per ogni binario viene effettuata la AND che fallisce quando i bit non sono entrambi 1.

Per capire meglio l'aritmetica binaria, potete usare le funzioni bindec() e decbin(), per riconvertire i numeri da binario a decimale e viceversa, e vi consiglio anche di dare un'occhiata al capitolo "Operatori bitwise" della Documentazione Ufficiale di PHP.net costantemente aggiornata.

Condividi contenuti