Na dzisiaj przygotowałem króciutki materiał o słowie kluczowym "enum" w języku Java! Pokażę Ci co dobrego może zdziałać użycie typu wyliczeniowego (nawet się rymuje 😝!).
TYP WYLICZENIOWY "ENUM" W JĘZYKU JAVA TEŻ WARTO ZNAĆ
"enum" możesz kojarzyć z języka C, bo jest znanym "wynalazkiem" już od korzeni języków wysokiego poziomu. W abstrakcyjnym tłumaczeniu chodzi o grupę składowych oznaczonych etykietkami, które pozwalają na łatwą identyfikację i późniejsze implementowanie z ich udziałem. Warto też nadmienić, że zawsze możemy się posłużyć tylko JEDNĄ z kilku opcji.
PRZYKŁAD ZASTOSOWANIA W PRAKTYCE
Weźmy przypadek zażyczenia sobie programu, który identyfikowałby priorytet jakiegoś zadania do wykonania. Najbardziej prymitywna postać polegałaby na postawieniu logiki na liczbach całkowitych i sprawdzaniu wartości w instrukcjach warunkowych:
if(priority == 0) {
System.out.println("Wysoki");
} else if(priority == 1) {
System.out.println("Średni");
} else if(priority == 2) {
System.out.println("Niski");
}
ewentualnie "switch":
switch (priority) {
case 0:
System.out.println("Wysoki");
break;
case 1:
System.out.println("Średni");
break;
case 2:
System.out.println("Niski");
break;
}
Da się? Da, lecz potrafisz zapewnić, że nigdy się nie pomylisz podczas wprowadzania jakichkolwiek zmian w przyszłości 😅?
Dużo lepiej użyć typu wyliczeniowego definiowanego przy użyciu słowa "enum" w języku Java 🙂. Tak mogłaby wyglądać najprostsza konstrukcja:
public enum TaskPriority {
LOW, MEDIUM, HIGH
}
Potem w kodzie wystarczy zamienić przypisanie na właściwy typ danych:
TaskPriority taskPriority = TaskPriority.HIGH;
Nazwa typu wyliczeniowego musi się znaleźć także po prawej stronie przypisania 💪! W ten sposób, nakładamy trzy te same priorytety, lecz elegancko nazwane i od razu wiadomo o co się rozchodzi 😁. W dodatku, nie musimy potem zmieniać implementacji w przypadku chęci zmiany kolejności np. żeby za wartość 0 był średni priorytet.
Tak można by zamienić ten kod:
switch (taskPriority) {
case TaskPriority.HIGH:
System.out.println("Wysoki");
break;
case TaskPriority.MEDIUM:
System.out.println("Średni");
break;
case TaskPriority.LOW:
System.out.println("Niski");
break;
}
Lepiej. Mamy plus do czytelności i elastyczności w modyfikacji, bo kod nie będzie nam spędzać snu z powiek jak zaczniemy coś modyfikować.
Wciąż możemy go jednak ulepszyć 🌟! O tym za momencik, tylko jeszcze przedstawię Ci metodę "ordinal":
taskPriority.ordinal();
która zwróci Ci liczbę całkowitą określającą występowanie przypisanej stałej w kolejności, zatem dla "LOW" będzie to wartość 0, a dla "HIGH" wartość 2.
POKAŻ MI COŚ, CZEGO MOGĘ NIE WIEDZIEĆ
Dobrze, "enum" przedstawiony jako część wspólna. Na tym etapie możliwości w większości innych języków się kończą. A teraz czas na prezentację możliwości ekskluzywnych, jakie znajdziesz tylko w Javie 😯! "enum" w języku Java może także pełnić funkcję...klasy 🤩!!! Możemy sobie podstawić konstruktor, dane składowe, a nawet metody, tak jak w klasie 😎:
public enum TaskPriority {
LOW("Niski"),
MEDIUM("Średni"),
HIGH("Wysoki");
private final String priority;
@Override
public String toString() {
return this.priority;
}
TaskPriority(String priority) {
this.priority = priority;
}
}
Wtedy cały tamten kod możesz wyrzucić i zamienić sobie na jedno wywołanie "println" 😁:
System.out.println(taskPriority);
"enum" w języku Java może też implementować interfejsy 🤯! Mając taki pod ręką:
public interface Weightable {
int getWeight();
}
możemy bez problemu zaimplementować do typu wyliczeniowego...
public enum TaskPriority implements Weightable {
LOW("Niski") {
public int getWeight() {
return 1;
}
},
MEDIUM("Średni") {
public int getWeight() {
return 2;
}
},
HIGH("Wysoki") {
public int getWeight() {
return 3;
}
};
private final String priority;
@Override
public String toString() {
return this.priority;
}
TaskPriority(String priority) {
this.priority = priority;
}
}
...tylko wtedy trzeba napisać bardzo niekonwencjonalnie definicję metody dla każdej stałej 😉. Potem, możesz się na to powołać bez najmniejszego problemu, tak jak zwykle:
taskPriority.getWeight();
To jest coś, czego nie zapewni Ci każdy język wysokiego poziomu 😇!
Typ wyliczeniowy "enum" w języku Java grupuje kilka stałych w jedno miejsce. Wyjątkowo tylko w tym języku, może przybrać postać klasy i posiadać własne składowe oraz implementować interfejsy!
Z najważniejszych rzeczy to wszystko 😊. Pewnie się powtórzę raz nie wiadomo który, jednak warto znać typ wyliczeniowy. BARDZO Ci się przyda ✅.