Kurzusok
/
Java
Java
/
Feladatok
/
Logok, logok, logok!
Logok, logok, logok!

Logok, logok, logok!

Tanulófeladat

Bevezetés

Enumok

Az enum típus egy speciális adattípus, amely lehetővé teszi, hogy egy változó előre definiált konstansok halmaza legyen. A változónak meg kell egyeznie az egyik olyan értékkel, amelyet előre meghatároztak hozzá. Gyakori példák közé tartoznak az égtájak (NORTH, SOUTH, EAST és WEST értékek) és a hét napjai.

Mivel ezek konstansok, az enum típus mezőinek nevei csupa nagybetűvel íródnak.

Enum típus definiálása

A Java programozási nyelvben úgy definiálsz enum típust, hogy az enum kulcsszót használod. Például egy hét napjait reprezentáló enum típust így adnál meg:

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

Enum típusokat érdemes használnod, amikor konstansok egy rögzített halmazát szeretnéd reprezentálni. Ide tartoznak az olyan természetes enum típusok is, mint a Naprendszerünk bolygói, valamint azok az adathalmazok, amelyeknél fordítási időben ismered az összes lehetséges értéket, például egy menü választási lehetőségei, a parancssori kapcsolók és így tovább.

Enum típus használata

Íme néhány kódrészlet, amely megmutatja, hogyan használd a fent definiált DayOfWeek enumot:

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"

Metódusok és mezők hozzáadása

A Java programozási nyelv enum típusai sokkal nagyobb tudásúak, mint más nyelvek megfelelői. Az enum deklaráció egy osztályt definiál (ezt hívják enum típusnak). Az enum osztály törzse tartalmazhat metódusokat és egyéb mezőket:

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

A getNumberOfStars metódus meghívása a Rating enum típus egyik tagján:

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

Utasítások

Ebben a feladatban naplósorokat fogsz feldolgozni.

Minden naplósor egy string, amelynek formátuma a következő: "[<LVL>]: <MESSAGE>".

Ezek a különböző naplószintek:

  • TRC (trace)
  • DBG (debug)
  • INF (info)
  • WRN (warning)
  • ERR (error)
  • FTL (fatal)

Három részfeladatod van.

1. Naplószint feldolgozása

Definiálj egy LogLevel enumot, amelynek hat eleme van, és ezek megfelelnek a fenti naplószinteknek.

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

Ezután implementáld a LogLine.getLogLevel() metódust, amely egy naplósor feldolgozott naplószintjét adja vissza:

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

2. Ismeretlen naplószint kezelése

Sajnos előfordul, hogy egyes naplósorok naplószintje ismeretlen. Hogy ezeket a naplósorokat szépen kezeld, adj hozzá egy UNKNOWN elemet a LogLevel enumhoz, amelyet ismeretlen naplószint feldolgozásakor kell visszaadni:

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

3. Naplósor átalakítása rövid formátumra

Egy naplósor naplószintje meglehetősen terjengős. Hogy csökkentsük a naplósorok tárolásához szükséges lemezterületet, kifejlesztettek egy rövid formátumot: "[<ENCODED_LEVEL>]:<MESSAGE>".

A kódolt naplószint nem más, mint egy naplószint egyszerű hozzárendelése egy számhoz:

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

Implementáld a LogLine.getOutputForShortLog() metódust, amely ki tudja írni a rövidített naplósor-formátumot:

var logLine = new LogLine("[ERR]: Stack Overflow");
logLine.getOutputForShortLog();
// => "6:Stack Overflow"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Java Exercism

Készen állsz elkezdeni a(z) Logok, logok, logok! feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.