Διαδρομές
/
Java
Java
/
Ασκήσεις
/
Καταγραφές, καταγραφές, καταγραφές!
Καταγραφές, καταγραφές, καταγραφές!

Καταγραφές, καταγραφές, καταγραφές!

Άσκηση εκμάθησης

Εισαγωγή

Enum

Ένας τύπος enum είναι ένας ειδικός τύπος δεδομένων που επιτρέπει σε μια μεταβλητή να είναι ένα σύνολο προκαθορισμένων σταθερών. Η μεταβλητή πρέπει να είναι ίση με μία από τις τιμές που έχουν προκαθοριστεί για αυτήν. Συνήθη παραδείγματα περιλαμβάνουν τις κατευθύνσεις της πυξίδας (τιμές των NORTH, SOUTH, EAST και WEST) και τις ημέρες της εβδομάδας.

Επειδή είναι σταθερές, τα ονόματα των πεδίων ενός τύπου enum είναι με κεφαλαία γράμματα.

Ορισμός ενός τύπου enum

Στη γλώσσα προγραμματισμού Java, ορίζεις έναν τύπο enum χρησιμοποιώντας τη λέξη-κλειδί enum. Για παράδειγμα, θα όριζες έναν τύπο enum για τις ημέρες της εβδομάδας ως εξής:

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

Θα πρέπει να χρησιμοποιείς τύπους enum κάθε φορά που χρειάζεται να αναπαραστήσεις ένα σταθερό σύνολο σταθερών. Αυτό περιλαμβάνει φυσικούς τύπους enum, όπως οι πλανήτες του ηλιακού μας συστήματος και σύνολα δεδομένων όπου γνωρίζεις όλες τις πιθανές τιμές σε χρόνο μεταγλώττισης, για παράδειγμα, τις επιλογές σε ένα μενού, σημαίες γραμμής εντολών και ούτω καθεξής.

Χρήση ενός τύπου enum

Ακολουθεί κώδικας που σου δείχνει πώς να χρησιμοποιήσεις το enum DayOfWeek που ορίστηκε παραπάνω:

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"

Προσθήκη μεθόδων και πεδίων

Οι τύποι enum της γλώσσας προγραμματισμού Java είναι πολύ πιο ισχυροί από τους αντίστοιχούς τους σε άλλες γλώσσες. Η δήλωση enum ορίζει μια κλάση (που ονομάζεται τύπος enum). Το σώμα της κλάσης enum μπορεί να περιλαμβάνει μεθόδους και άλλα πεδία:

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

Καλώντας τη μέθοδο getNumberOfStars σε ένα μέλος του τύπου enum Rating:

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

Οδηγίες

Σε αυτή την άσκηση θα επεξεργάζεσαι γραμμές καταγραφής.

Κάθε γραμμή καταγραφής είναι μια συμβολοσειρά με την εξής μορφή: "[<LVL>]: <MESSAGE>".

Αυτά είναι τα διαφορετικά επίπεδα καταγραφής:

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

Έχεις τρεις εργασίες.

1. Ανάλυση του επιπέδου καταγραφής

Όρισε ένα enum LogLevel που έχει έξι στοιχεία, τα οποία αντιστοιχούν στα παραπάνω επίπεδα καταγραφής.

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

Στη συνέχεια, υλοποίησε τη μέθοδο LogLine.getLogLevel() που επιστρέφει το αναλυμένο επίπεδο καταγραφής μιας γραμμής καταγραφής:

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

2. Υποστήριξη άγνωστου επιπέδου καταγραφής

Δυστυχώς, κάποιες φορές μερικές γραμμές καταγραφής έχουν άγνωστο επίπεδο καταγραφής. Για να χειριστείς ομαλά αυτές τις γραμμές καταγραφής, πρόσθεσε ένα στοιχείο UNKNOWN στο enum LogLevel, το οποίο θα πρέπει να επιστρέφεται όταν αναλύεται ένα άγνωστο επίπεδο καταγραφής:

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

3. Μετατροπή της γραμμής καταγραφής σε σύντομη μορφή

Το επίπεδο καταγραφής μιας γραμμής καταγραφής είναι αρκετά εκτενές. Για να μειωθεί ο χώρος στον δίσκο που απαιτείται για την αποθήκευση των γραμμών καταγραφής, αναπτύχθηκε μια σύντομη μορφή: "[<ENCODED_LEVEL>]:<MESSAGE>".

Το κωδικοποιημένο επίπεδο καταγραφής είναι μια απλή αντιστοίχιση ενός επιπέδου καταγραφής σε έναν αριθμό:

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

Υλοποίησε τη μέθοδο LogLine.getOutputForShortLog() που μπορεί να παράγει τη συντομευμένη μορφή της γραμμής καταγραφής:

var logLine = new LogLine("[ERR]: Stack Overflow");
logLine.getOutputForShortLog();
// => "6:Stack Overflow"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Java Exercism

Έτοιμος να ξεκινήσεις την άσκηση Καταγραφές, καταγραφές, καταγραφές!;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.