Operazioni di Base in JavaScript
Dev

Operazioni di Base in JavaScript

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.718
  • Math.LN2: Il logaritmo naturale di 2; circa 0.693
  • Math.LN10: Il logaritmo naturale di 10; circa 2.303
  • Math.LOG2E: Il logaritmo in base binaria di E; circa 1.443
  • Math.PI: Il pigreco; circa 3.14159
  • Math.SQRT1_2: La radice quadra di ½; circa 0.707
  • Math.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 di x
  • Math.atanh(x): Restituisce l'arcotangente iperbolico di x
  • Math.ceil(x): Restituisce l'intero più piccolo maggiore o uguale a x (arrotondamento per eccesso).
  • Math.floor(x): Restituisce l'intero più grande minore o uguale a x (arrotondamento per difetto).
  • Math.log(x): Restituisce il logaritmo naturale di x.
  • Math.log2(x): Restituisce il logaritmo in base 2 di x.
  • Math.pow(x, y): Restituisce x elevato alla y.
  • Math.random(): Restituisce un numero pseudo-randomico compreso tra 0 e 1.
  • Math.round(x): Restituisce l'intero più vicino di x.

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).

  1. Math.random() genera un numero pseudo-randomico compreso tra 0 e 1, ad esempio 0.35.

  2. min e max 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.

  3. Math.floor() riceve come parametro il risultato della moltiplicazione tra il numero randomico e l'espressione con min e max, quindi 0.35 * 10 = 3.5. Il quale verrà arrotondato per difetto per effetto del metodo floor. 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.

;