Operatori JavaScript: confronto tra aritmetici, logici e di confronto nel codice reale

by Anastasia P.
SHARE
Operatori JavaScript: confronto tra aritmetici, logici e di confronto nel codice reale
© Guida-HTML5.it

Introduzione

In JavaScript, gli operatori aritmetici, logici e di confronto non servono solo a fare calcoli o verifiche “da manuale”: sono strumenti fondamentali per costruire logiche applicative affidabili, leggibili e facili da mantenere. Un uso corretto di questi operatori ti permette di validare dati, decidere cosa mostrare all’utente, calcolare prezzi e sconti, gestire stati dell’applicazione e prevenire bug sottili legati ai tipi di dato.

In questo tutorial scegliamo un sotto-argomento molto pratico: come combinare operatori aritmetici, logici e di confronto per gestire una promozione in un e-commerce. È un caso d’uso realistico, utile per capire come questi operatori lavorano insieme nel codice quotidiano.

L’obiettivo non è solo conoscere la sintassi, ma imparare a leggere una logica di business e tradurla in JavaScript in modo pulito. Vedremo anche alcune insidie tipiche, come la differenza tra == e ===, il comportamento di && e ||, e l’uso corretto degli operatori aritmetici quando si calcolano importi e sconti.

Codice completo

// Simuliamo un carrello e una regola promozionale.
// La promozione è valida se:
// - il cliente è registrato
// - il carrello supera una soglia minima
// - il cliente non ha già usato il coupon
// Se la promozione è valida, applichiamo uno sconto percentuale.

const customer = {
  name: "Giulia",
  isRegistered: true,
  hasUsedCoupon: false
};

const cart = {
  subtotal: 89.90,
  shipping: 4.99,
  discountCode: "SAVE10"
};

const MINIMUM_ORDER = 50;
const DISCOUNT_PERCENT = 10;
const FREE_SHIPPING_THRESHOLD = 70;

// Controlli logici e di confronto
const isEligibleForDiscount =
  customer.isRegistered &&
  cart.subtotal >= MINIMUM_ORDER &&
  customer.hasUsedCoupon === false &&
  cart.discountCode === "SAVE10";

// Calcolo dello sconto con operatore aritmetico
const discountAmount = isEligibleForDiscount
  ? (cart.subtotal * DISCOUNT_PERCENT) / 100
  : 0;

// Calcolo del totale finale
const subtotalAfterDiscount = cart.subtotal - discountAmount;

// Spedizione gratuita sopra una certa soglia
const shippingCost = cart.subtotal >= FREE_SHIPPING_THRESHOLD ? 0 : cart.shipping;

// Totale complessivo
const total = subtotalAfterDiscount + shippingCost;

// Output leggibile
console.log("Cliente:", customer.name);
console.log("Subtotale:", cart.subtotal.toFixed(2), "€");
console.log("Sconto applicato:", discountAmount.toFixed(2), "€");
console.log("Spedizione:", shippingCost.toFixed(2), "€");
console.log("Totale finale:", total.toFixed(2), "€");

// Esempio di confronto tra valori e tipi
console.log("Confronto stretto 1 === ´1´:", 1 === "1"); // false
console.log("Confronto non stretto 1 == ´1´:", 1 == "1"); // true

// Esempio di operatori logici con fallback
const promoMessage = isEligibleForDiscount || "Promozione non disponibile";
console.log("Stato promo:", promoMessage);

Spiegazione

Partiamo dalla struttura del codice. Abbiamo due oggetti: customer e cart. Il primo contiene informazioni sul cliente, mentre il secondo rappresenta il carrello. Questa separazione è utile perché rende il codice più leggibile e più vicino al dominio reale dell’applicazione.

1. Operatori di confronto

Gli operatori di confronto servono a verificare relazioni tra valori:

  • >, <, >=, <= per confronti numerici;
  • === e !== per confronti tra valore e tipo;
  • == e != per confronti con conversione automatica, da usare con cautela.

Nel nostro esempio, cart.subtotal >= MINIMUM_ORDER verifica che il carrello abbia raggiunto la soglia minima per attivare la promozione. Questo è un confronto numerico tipico in contesti reali come sconti, bonus o accessi condizionati.

La condizione cart.discountCode === "SAVE10" usa il confronto stretto. È una buona pratica perché evita ambiguità: in JavaScript, === controlla sia il valore sia il tipo. Questo riduce errori difficili da individuare, soprattutto quando i dati arrivano da form, API o database.

2. Operatori logici

L’operatore && restituisce vero solo se tutte le condizioni sono vere. Nel nostro caso, la promozione è valida solo se:

  • il cliente è registrato;
  • il carrello supera la soglia minima;
  • il coupon non è già stato usato;
  • il codice sconto è corretto.

Questa combinazione è molto comune nelle regole di business. In pratica, && ti permette di costruire una “porta logica” che si apre solo quando tutte le verifiche passano.

L’operatore || invece è utile per gestire alternative o fallback. Nell’esempio finale:

const promoMessage = isEligibleForDiscount || "Promozione non disponibile";

se isEligibleForDiscount è vero, il valore risultante sarà quel booleano; altrimenti verrà restituita la stringa. Questo mostra una caratteristica importante di JavaScript: || non restituisce sempre un booleano, ma il primo valore “truthy” o l’ultimo “falsy”.

3. Operatori aritmetici

Gli operatori aritmetici servono per calcolare importi e trasformazioni numeriche. Nel tutorial abbiamo usato:

  • * per calcolare lo sconto percentuale;
  • / per trasformare la percentuale in valore monetario;
  • - per sottrarre lo sconto dal subtotale;
  • + per sommare spedizione e totale finale.

La formula dello sconto è:

(cart.subtotal * DISCOUNT_PERCENT) / 100

Questa è una formula semplice ma molto frequente. L’uso delle parentesi rende chiaro l’ordine delle operazioni e migliora la leggibilità. In JavaScript, come in matematica, è importante non affidarsi troppo alla memoria: esplicitare il calcolo aiuta chi legge il codice, incluso il tuo io del futuro.

4. Operatore ternario come sintesi pratica

Anche se non è richiesto in modo esplicito, nel codice abbiamo usato l’operatore ternario per compattare una condizione:

const discountAmount = isEligibleForDiscount
  ? (cart.subtotal * DISCOUNT_PERCENT) / 100
  : 0;

È utile quando devi scegliere tra due valori in modo conciso. Tuttavia, va usato con moderazione: se la logica diventa troppo complessa, meglio un if esplicito per non sacrificare la leggibilità.

5. Attenzione ai tipi di dato

Uno degli errori più comuni in JavaScript riguarda i confronti tra tipi diversi. Ad esempio:

1 === "1" // false
1 == "1"  // true

Il primo confronto è corretto e prevedibile. Il secondo funziona perché JavaScript converte automaticamente il tipo stringa in numero. Questa conversione implicita può sembrare comoda, ma spesso introduce bug. In codice professionale, nella maggior parte dei casi, è preferibile usare === e !==.

Best practice

  • Usa sempre === e !== quando vuoi evitare conversioni automatiche non desiderate.
  • Rendi esplicite le condizioni: una variabile come isEligibleForDiscount è più chiara di un’espressione lunga sparsa nel codice.
  • Separa i calcoli dalle condizioni: prima verifichi se una regola è valida, poi calcoli il risultato.
  • Usa le parentesi per chiarire l’ordine delle operazioni aritmetiche, soprattutto nei calcoli economici.
  • Evita espressioni troppo compatte se rendono difficile capire il flusso logico.
  • Controlla i valori falsy: 0, "", null, undefined, NaN e false possono influenzare il comportamento di && e ||.
  • Formatta i numeri quando lavori con importi economici, ad esempio usando toFixed(2) per l’output.

Una buona regola pratica è questa: se una condizione rappresenta una regola di business, scrivila in modo che sia leggibile anche da chi non conosce in dettaglio il tuo progetto. Il codice chiaro riduce i bug e facilita la manutenzione.

Riepilogo

In questo tutorial abbiamo visto come gli operatori aritmetici, logici e di confronto collaborano in uno scenario concreto: la gestione di una promozione e-commerce. Gli operatori di confronto verificano soglie e uguaglianze, quelli logici combinano più condizioni, mentre gli operatori aritmetici calcolano sconti e totali.

Il punto chiave è che questi operatori non vanno studiati separatamente in astratto, ma come strumenti che lavorano insieme per risolvere problemi reali. Quando scrivi codice JavaScript, pensa sempre a tre domande:

  • Quali valori devo confrontare?
  • Quali condizioni devono essere vere insieme?
  • Quali calcoli devo eseguire sui numeri?

Se riesci a rispondere chiaramente a queste domande, il tuo codice sarà più robusto, più leggibile e più facile da estendere.

Approfondisci con risorse ufficiali

  • MDN Web Docs - JavaScript Operators: documentazione completa sugli operatori in JavaScript.
  • MDN Web Docs - Equality comparisons and sameness: guida fondamentale per capire ==, === e i confronti tra valori.
  • MDN Web Docs - Logical operators: approfondimento su &&, || e !.
  • ECMAScript Language Specification: riferimento ufficiale per chi vuole andare oltre la pratica quotidiana.

Se vuoi, nel prossimo passo posso scrivere anche un tutorial dedicato a precedenza degli operatori e ordine di valutazione in JavaScript, con esempi pratici e casi di bug reali.

SHARE