Java - Enums: Una guida per principianti

Ciao a tutti, aspiranti programmatori Java! Oggi entreremo nel meraviglioso mondo degli Enums di Java. Non preoccupatevi se non avete mai sentito parlare di loro prima: alla fine di questo tutorial, diventerete esperti in Enum! Allora, afferrate una tazza del vostro bevande preferito e iniziamo!

Java - Enums

Introduzione agli Enums

Avete mai trovato voi stessi in una situazione in cui avevate bisogno di rappresentare un insieme fisso di costanti nel vostro codice? Magari avete creato un programma per una caffetteria e avreste dovuto rappresentare diverse dimensioni di tazze da caffè. O forse avaste costruito un gioco e avaste bisogno di rappresentare le diverse direzioni in cui un personaggio potrebbe muoversi. Ecco dove gli Enums vengono in aiuto!

Un Enum, abbreviazione di "enumerazione", è un tipo speciale di classe in Java che rappresenta un gruppo di costanti (variabili non modificabili, come variabili finali). Pensatelo come un modo elegante per creare un insieme di valori predefiniti che non cambiano.

Dichiarazione della classe

Iniziamo vedendo come dichiarare un Enum. La sintassi è abbastanza semplice:

enum CoffeeSize {
PICCOLO,
MEDIO,
GRANDE
}

In questo esempio, abbiamo creato un Enum chiamato CoffeeSize con tre costanti: PICCOLO, MEDIO e GRANDE. Notate come usiamo la parola chiave enum invece che class, e come ogni costante è separata da una virgola.

Costruttori della classe

Gli Enums possono avere costruttori, proprio come le classi regolari. Questo ci permette di associare dati aggiuntivi a ciascuna costante enum. Espandiamo il nostro esempio CoffeeSize:

enum CoffeeSize {
PICCOLO(8),
MEDIO(12),
GRANDE(16);

private final int once;

CoffeeSize(int once) {
this.once = once;
}

public int getOnce() {
return once;
}
}

In questa versione aggiornata, abbiamo aggiunto un costruttore che prende un parametro int rappresentante il numero di once per ogni dimensione. Abbiamo anche aggiunto un campo privato once e un metodo getter getOnce().

Metodi della classe

Gli Enums possono avere metodi proprio come le classi regolari. Aggiungiamo un metodo al nostro enum CoffeeSize:

enum CoffeeSize {
PICCOLO(8),
MEDIO(12),
GRANDE(16);

private final int once;

CoffeeSize(int once) {
this.once = once;
}

public int getOnce() {
return once;
}

public String getDescription() {
return this.name() + " caffè (" + this.once + " once)";
}
}

Abbiamo aggiunto un metodo getDescription() che restituisce una stringa che descrive la dimensione del caffè. Il metodo name() è ereditato dalla classe Enum e restituisce il nome della costante come stringa.

Metodi ereditati

Tutti gli enums ereditano implicitamente da java.lang.Enum. Questo significa che hanno alcuni metodi integrati. Ecco alcuni dei più comunemente utilizzati:

Metodo Descrizione
name() Restituisce il nome della costante enum
ordinal() Restituisce la posizione della costante enum (a partire da 0)
valueOf(String name) Restituisce la costante enum con il nome specificato
values() Restituisce un array contenente tutte le costanti enum

Esempio

Ora, mettiamo tutto insieme in un esempio completo:

public class CoffeeShop {
public static void main(String[] args) {
CoffeeSize mySize = CoffeeSize.MEDIO;

System.out.println("Ho ordinato un " + mySize.getDescription());
System.out.println("Questa dimensione ha un valore ordinale di: " + mySize.ordinal());

System.out.println("\nTutte le dimensioni disponibili:");
for (CoffeeSize size : CoffeeSize.values()) {
System.out.println(size.getDescription());
}

// Utilizzo di valueOf
CoffeeSize anotherSize = CoffeeSize.valueOf("GRANDE");
System.out.println("\nUtilizzando valueOf: " + anotherSize.getDescription());
}
}

enum CoffeeSize {
PICCOLO(8),
MEDIO(12),
GRANDE(16);

private final int once;

CoffeeSize(int once) {
this.once = once;
}

public int getOnce() {
return once;
}

public String getDescription() {
return this.name() + " caffè (" + this.once + " once)";
}
}

Output

Quando eseguite questo programma, vedrete il seguente output:

Ho ordinato un MEDIO caffè (12 once)
Questa dimensione ha un valore ordinale di: 1

Tutte le dimensioni disponibili:
PICCOLO caffè (8 once)
MEDIO caffè (12 once)
GRANDE caffè (16 once)

Utilizzando valueOf: GRANDE caffè (16 once)

Spiegazione di cosa sta accadendo in questo esempio:

  1. Creiamo una variabile CoffeeSize mySize e la impostiamo su MEDIO.
  2. Stampiamo la descrizione di mySize utilizzando il metodo getDescription().
  3. Stampiamo il valore ordinale di MEDIO, che è 1 (ricordate, i valori ordinali iniziano da 0).
  4. Utilizziamo un ciclo for-each per iterare attraverso tutti i valori CoffeeSize e stampare le loro descrizioni.
  5. Infine, demonstriamo l'uso di valueOf() per ottenere la costante enum GRANDE per mezzo del suo nome.

Ed eccoci qui! Avete appena fatto i vostri primi passi nel mondo degli Enums di Java. Sono uno strumento potente per rappresentare insiemi fissi di costanti in modo sicuro dal punto di vista del tipo.

Ricordate, gli Enums sono più di semplici costanti glorificate. Possono avere costruttori, campi e metodi, rendendoli incredibilmente versatili. Sono perfetti per rappresentare cose come giorni della settimana, semi di carte, dimensioni di pizza o qualsiasi altro insieme di valori fissi nei vostri programmi.

Man mano che continuate il vostro viaggio con Java, troverete molti altri utilizzi per gli Enums. Sono una parte fondamentale del linguaggio Java, e padroneggiarli vi renderà un programmatore più efficace ed efficiente.

Pregate di praticare, codificate e, più importante, godetevi il processo di apprendimento. Prima di sapere, scriverete programmi Java complessi con facilità. Buon coding!

Credits: Image by storyset