JavaScript mette a disposizione tutta una serie di operatori per eseguire le operazioni di base e degli oggetti, uno per essere precisi, per poter effettuare computazioni più complesse.
Gli operatori di JavaScript sono i seguenti:
- Addizione
- Sottrazione
- Moltiplicazione
- Divisione
- Esponente
- Modulo
Nell'articolo di oggi entreremo nel dettaglio di ognuno di questi operatori e vedremo qualcosa anche sull'oggetto Math
, il quale offre dei metodi utili a performare operazioni algebriche e trigonometriche.
Addizioni
Che tu ci creda o no l'addizione in JavaScript può essere svolta usando il simbolo +
. Per scrivere un'operazione basterà scrivere:
1let risultato = 4 + 5;
2console.log(risultato); // Output: 9
Con i numeri quindi il risultato è la somma dei due addendi, ma nel caso in cui il +
venga utilizzato con delle stringhe, il risultato sarà la concatenazione delle stesse.
1let frase = "Ciao " + "Manuel";
2console.log(frase); // Output: Ciao Manuel
Da notare che ho dovuto mettere uno spazio dopo il Ciao (poteva essere messo anche prima di Manuel) affinché le due parole fossero separate.
Nel caso venissero sommati un numero ed una stringa?
1let risultato = "Ciao" + 2;
2console.log(risultato); // Ciao2
In questo caso l'operazione che vogliamo eseguire non ha molto senso, ma JavaScript non ci lascia a bocca asciutta e ci restituirà come risultato la concatenazione della stringa e del numero opportunatamente convertito.
Sottrazione
Le sottrazioni vengono svolte con il simbolo -
1let risultato = 5 - 2;
2console.log(risultato); // Output: 3
Il simbolo meno, come tutti gli altri operatori, a differenza dell'addizione non può essere usato con le stringhe. Ti aspettavi che "deconcatenasse"?
Moltiplicazione
Le moltiplicazioni possono essere svolte con il simbolo *
(asterisco).
1let risultato = 5 * 2;
2console.log(risultato); // Output: 10
Divisione
Le divisioni possono essere svolte usando il simbolo /
1let risultato = 5 / 2;
2console.log(risultato); // 2.5
Esponente
Terminata la parte da Capitan Ovvio arriviamo quindi agli esponenti o comunemente noti come elevazione a potenza. Possiamo elevare un numero usando **
(doppio asterisco).
1let risultato = 2 ** 2
2console.log(risultato); // Output: 4
Da notare che l'oggetto Math
, già menzionato all'inizio dell'articolo ha un metodo chiamato pow()
. Il doppio asterisco e il metodo pow()
fanno la stessa identica cosa, con un'unica differenza, dopo l'introduzione dei BigInt
in ES2020, il calcolo con questa primitiva può essere fatto solo con il doppio asterisco, mentre il metodo pow()
non la supporta.
Per saperne di più su BigInt
e le altre primitive rimando al mio articolo sul tema.
Modulo
Il modulo, quando lo spiego a lezione fa sempre una strage, per la gioia dei nostri cari maestri e professori di matematica. L'operatore modulo, il quale viene indicato con il simbolo %
, restituisce il resto di una divisione.
1let risultato = 10 % 2;
2console.log(risultato); // Output: 0
Perché 0? Perché 10 / 2 fa 5 con il resto di 0, mentre:
1let risultato = 9 % 2
2console.log(risultato); // Output: 1
Perché 1? Perché 9 / 2 fa 4.5 con il resto di 1. Chiaro?
L'oggetto Math
Come già anticipato a più riprese nei paragrafi precedenti in JavaScript esiste un oggetto chiamato Math
che mette a disposizione metodi e costanti matematiche.
Sempre come accennato in precedenza, Math
funziona solo con il tipo Number
e non con BigInt
.
Costanti disponibili
Le costanti messe a disposizione dall'oggetto Math sono:
Math.E
: La costante di Eulero; circa 2.718Math.LN2
: Il logaritmo naturale di 2; circa 0.693Math.LN10
: Il logaritmo naturale di 10; circa 2.303Math.LOG2E
: Il logaritmo in base binaria di E; circa 1.443Math.PI
: Il pigreco; circa 3.14159Math.SQRT1_2
: La radice quadra di ½; circa 0.707Math.SQRT2
: La radice quadrata di 2; circa 1.414 ### Metodi Statici
Alcuni dei metodi statici disponibili dell'oggetto Math
sono:
Math.acos(x)
: Restituisce l'arcoseno dix
Math.atanh(x)
: Restituisce l'arcotangente iperbolico dix
Math.ceil(x)
: Restituisce l'intero più piccolo maggiore o uguale ax
(arrotondamento per eccesso).Math.floor(x)
: Restituisce l'intero più grande minore o uguale ax
(arrotondamento per difetto).Math.log(x)
: Restituisce il logaritmo naturale dix
.Math.log2(x)
: Restituisce il logaritmo in base 2 dix
.Math.pow(x, y)
: Restituiscex
elevato allay
.Math.random()
: Restituisce un numero pseudo-randomico compreso tra 0 e 1.Math.round(x)
: Restituisce l'intero più vicino dix
.
Questi sono solo alcuni dei metodi disponibili, per vederli tutti rimando alla documentazione su MDN.
Un esempio d'utilizzo
Vediamo in azione quanto visto finora con un esempio molto semplice. Una funzione che puntualmente anche i programmatori più esperti ricercano. Generare un numero randomico compreso tra due estremi.
1function getRandomNumber(min, max) {
2 return Math.floor(Math.random() * (max - min + 1)) + min;
3}
4
5const numero = getRandomNumber(1, 10);
6console.log(numero); // Output: 4
Scomponiamo il breve algoritmo partendo dal calcolo principale: Math.random() * (max - min + 1)
.
Math.random()
genera un numero pseudo-randomico compreso tra 0 e 1, ad esempio 0.35.min
emax
sono i due parametri che passiamo alla chiamata della funzione e nel nostro esempio sono 1 e 10. Quindi il calcolo nella parentesi risulterà 10 - 1 + 1 = 10.Math.floor()
riceve come parametro il risultato della moltiplicazione tra il numero randomico e l'espressione conmin
emax
, quindi 0.35 * 10 = 3.5. Il quale verrà arrotondato per difetto per effetto del metodofloor
. Quindi otterremo 3. Alla quale infine verrà sommato il minimo (1) ottenendo così 4.
Ad ogni esecuzione il numero verrà generato nuovamente, cambiando di continuo. Nel nostro esempio la probabilità che esca lo stesso numero per due volte consecutive è del 10%.
Conclusioni
Questo è quanto, chi l'avrebbe mai detto che sarei riuscito a pontificare anche su delle semplici operazioni. Spero sia tutto chiaro se non lo fosse scrivetemi sarò felice di chiarire eventuali dubbi.
Caricamento...
Diventiamo amici di penna? ✒️
Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.
Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!