Rutas
/
Java
Java
/
Ejercicios
/
¡Registros, registros, registros!
¡Registros, registros, registros!

¡Registros, registros, registros!

Ejercicio de aprendizaje

Introducción

Tipos enumerados

Un tipo enumerado es un tipo de dato especial que permite que una variable sea un conjunto de constantes predefinidas. La variable debe ser igual a uno de los valores que se han predefinido para ese tipo. Entre los ejemplos habituales están los puntos cardinales (valores NORTH, SOUTH, EAST y WEST) y los días de la semana.

Como son constantes, los nombres de los campos de un tipo enumerado se escriben en mayúsculas.

Definir un tipo enumerado

En el lenguaje de programación Java, defines un tipo enumerado con la palabra clave enum. Por ejemplo, un tipo enumerado con los días de la semana se especificaría así:

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

Deberías usar tipos enumerados siempre que necesites representar un conjunto fijo de constantes. Eso incluye tipos enumerados naturales, como los planetas de nuestro sistema solar, y conjuntos de datos en los que conoces todos los valores posibles en tiempo de compilación; por ejemplo, las opciones de un menú, los indicadores de línea de comandos, etcétera.

Usar un tipo enumerado

Aquí tienes código que te muestra cómo usar el tipo enumerado DayOfWeek definido antes:

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"

Añadir métodos y campos

Los tipos enumerados del lenguaje de programación Java son mucho más potentes que sus equivalentes en otros lenguajes. La declaración enum define una clase (llamada tipo enumerado). El cuerpo de la clase enum puede incluir métodos y otros campos:

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;
    }
}

Llamar al método getNumberOfStars en un miembro del tipo enumerado Rating:

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

Instrucciones

En este ejercicio vas a procesar líneas de registro.

Cada línea de registro es un string con el siguiente formato: "[<LVL>]: <MESSAGE>".

Estos son los diferentes niveles de registro:

  • TRC (traza)
  • DBG (depuración)
  • INF (información)
  • WRN (advertencia)
  • ERR (error)
  • FTL (fatal)

Tienes tres tareas.

1. Analizar el nivel de registro

Define un enum LogLevel que tiene seis elementos correspondientes a los niveles de registro anteriores.

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

A continuación, implementa el método LogLine.getLogLevel() que devuelve el nivel de registro analizado de una línea de registro:

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

2. Soportar nivel de registro desconocido

Desafortunadamente, en ocasiones algunas líneas de registro tienen un nivel de registro desconocido. Para manejar estas líneas de registro de forma controlada, añade un elemento UNKNOWN al enum LogLevel que debe devolverse al analizar un nivel de registro desconocido:

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

3. Convertir la línea de registro al formato corto

El nivel de registro de una línea de registro es bastante verboso. Para reducir el espacio en disco necesario para almacenar las líneas de registro, se desarrolla un formato corto: "[<ENCODED_LEVEL>]:<MESSAGE>".

El nivel de registro codificado es una simple asignación de un nivel de registro a un número:

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

Implementa el método LogLine.getOutputForShortLog() que puede generar el formato de línea de registro acortado:

var logLine = new LogLine("[ERR]: Stack Overflow");
logLine.getOutputForShortLog();
// => "6:Stack Overflow"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Java Exercism

¿Listo para empezar ¡Registros, registros, registros!?

Regístrate en Exercism para aprender y dominar Java con 26 conceptos158 ejercicios y mentoría humana real, todo gratis.