Jason. Cała informatyka w jednym miejscu!

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

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 ✅.

PODOBNE ARTYKUŁY