Track
/
Java
Java
/
Esercizi
/
Log, log, log!
Log, log, log!

Log, log, log!

Esercizio di apprendimento

Introduzione

Enum

Un tipo enum è un tipo di dato speciale che consente a una variabile di assumere un insieme di costanti predefinite. La variabile deve essere uguale a uno dei valori predefiniti per quel tipo. Esempi comuni sono i punti cardinali (i valori NORTH, SOUTH, EAST e WEST) e i giorni della settimana.

Poiché sono costanti, i nomi dei campi di un tipo enum si scrivono in lettere maiuscole.

Definire un tipo enum

Nel linguaggio di programmazione Java, definisci un tipo enum usando la parola chiave enum. Per esempio, un tipo enum per i giorni della settimana si specifica così:

public enum DayOfWeek {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY
}

Dovresti usare i tipi enum ogni volta che devi rappresentare un insieme fisso di costanti. Questo vale anche per i tipi enum naturali, come i pianeti del nostro sistema solare, e per gli insiemi di dati in cui conosci tutti i valori possibili al momento della compilazione: per esempio, le voci di un menu, i flag della riga di comando e così via.

Usare un tipo enum

Ecco un po' di codice che mostra come usare l'enum DayOfWeek definito sopra:

public class Shop {
    public String getOpeningHours(DayOfWeek dayOfWeek) {
        switch (dayOfWeek) {
            case MONDAY:
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
            case FRIDAY:
                return "9am - 5pm";
            case SATURDAY:
                return "10am - 4pm"
            case SUNDAY:
                return "Closed.";
        }
    }
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"

Aggiungere metodi e campi

I tipi enum del linguaggio di programmazione Java sono molto più potenti dei loro equivalenti in altri linguaggi. La dichiarazione enum definisce una classe (chiamata tipo enum). Il corpo della classe enum può includere metodi e altri campi:

public enum Rating {
    GREAT(5),
    GOOD(4),
    OK(3),
    BAD(2),
    TERRIBLE(1);

    private final int numberOfStars;

    Rating(int numberOfStars) {
        this.numberOfStars = numberOfStars;
    }

    public int getNumberOfStars() {
        return this.numberOfStars;
    }
}

Chiamare il metodo getNumberOfStars su un membro del tipo enum Rating:

Rating.GOOD.getNumberOfStars();
// => 4

Istruzioni

In questo esercizio elaborerai delle righe di log.

Ogni riga di log è una stringa formattata così: "[<LVL>]: <MESSAGE>".

Questi sono i diversi livelli di log:

  • TRC (traccia)
  • DBG (debug)
  • INF (info)
  • WRN (avviso)
  • ERR (errore)
  • FTL (fatale)

Hai tre attività.

1. Analizzare il livello di log

Definisci un enum LogLevel con sei elementi che corrispondono ai livelli di log visti sopra.

  • TRACE
  • DEBUG
  • INFO
  • WARNING
  • ERROR
  • FATAL

Poi implementa il metodo LogLine.getLogLevel(), che restituisce il livello di log analizzato di una riga di log:

var logLine = new LogLine("[INF]: File deleted");
logLine.getLogLevel();
// => LogLevel.INFO

2. Gestire un livello di log sconosciuto

Purtroppo, ogni tanto alcune righe di log hanno un livello sconosciuto. Per gestire senza problemi queste righe di log, aggiungi un elemento UNKNOWN all'enum LogLevel: deve essere restituito quando si analizza un livello di log sconosciuto:

var logLine = new LogLine("[XYZ]: Overly specific, out of context message");
logLine.getLogLevel();
// => LogLevel.UNKNOWN

3. Convertire una riga di log nel formato breve

Il livello di log di una riga di log è piuttosto verboso. Per ridurre lo spazio su disco necessario a memorizzare le righe di log, è stato ideato un formato breve: "[<ENCODED_LEVEL>]:<MESSAGE>".

Il livello di log codificato è una semplice corrispondenza tra un livello di log e un numero:

  • UNKNOWN - 0
  • TRACE - 1
  • DEBUG - 2
  • INFO - 4
  • WARNING - 5
  • ERROR - 6
  • FATAL - 42

Implementa il metodo LogLine.getOutputForShortLog(), che restituisce la riga di log nel formato breve:

var logLine = new LogLine("[ERR]: Stack Overflow");
logLine.getOutputForShortLog();
// => "6:Stack Overflow"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Java Exercism

Vuoi iniziare Log, log, log!?

Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.