Kotlin: Enum клас — коротко і ясно 💥
Привіт, сьогодні я би хотів вам розповісти що таке Enum і Sealed класи.
Досить схожі штуки, але все ж таки відмінності є і їх як правило використовують при різних випадках і зараз я вам все розповім і поясню.
Але як би там не було, це досить популярна річ в програмуванні, вони використовуються досить часто, тому зверніть на них увагу.
Що такое Enum?
Давайте почнемо з того що взагалі таке Enum?
Enum це скорочено від Enumerator, що в перекладі на українську звучить як “перерахування”.
Тобто, це така річ, що в рамках класа перераховує щось, наприклад, світлофор може бути в 3-х позиціях: зелений, оранджевий та червони.
Створювати 3 змінні по-типу trafficLightGreen, trafficLightOrange та trafficLightRed, а потім їх перевіряти якось — досить сумнівна ідея.
В таких випадках буде правільніше створити enum TrafficLight, а в середині нього 3 його позиції: зелений, оранджевий та зелений.
Enum — Як створити? Що він може?
Для того, щоб створити Enum потрібно вказати ключові слова enum + class після чого дати назву. Далі відкриваються фігурні дужки і робляться перерахування станів, тобто: GREEN, ORANGE, RED.
виглядає воно ось так:
Зверніть увагу, що:
1. перерахування роблять Upper-case-ом
2. розділяються вони комою
При використанні, воно виглядає ось так:
Також, enum може приймати якісь параметри, але є “але”.
Давайте візьмемо приклад з світлофором і спробуємо прикрутити для нього деякі змінні. Як ми знаємо в деяких місцях під час червного світлофора є звук для сліпих людей, що можна переходити перехід. Давайте додамо це значення для нашого enum-а:
На перший погляд виглядає ок, але насправді ні, тому що коли ви використовуєте Enum, то ви повинні застосовувати параметри для всіх.
Для RED — зрозуміло, можна йти.
Ладно ще для GREEN, можна просто додати “stop”.
А вот як бути з ORANGE?
Коли вам треба щось перерахувати — Enum круте рішення.
Якщо вам потрібно щось перерахувати і у всіх перерахувнь є якесь значення — тоже може бути.
Але як бачите, коли перехування не ідентичні, то досить не зручно.
Також, орієнтуючись на документацію Kotlin ви можете імплементувати щось всередині ваших стейтів відкриваючи фігурні дужки (це доречі будуть анонімні класи в такому випадку), але як показує практика — ніхто так ніколи не робить.
Також ніхто вам не забороняє імплементувати якийсь інтерфейс в Enum клас, але знову ж таки, це чомусь ніколи і не зустрічається на практиці. Але навіть якщо так станеться, то просто знайте, що так зробити можна, це робиться за допомогою відкривання фігурних дужок і імплементацією того, що вам власне треба відносно того, що є всередині інтерфейсу.
*****
Ми з вами ще не проходились про тому, що таке Interface та Abstract клас, це буде в наступному відео, тому підписуйтесь, щоб не пропустити наступний матеріал.
*****
Технічні та цікаві моменти про Enum
1. Кожний елемент Enum-а є об’єктом
2. Константи Enum відокремлюються комами
3. Кожна константа enum має властивості для отримання свого імені та позиції (починаючи з 0) в декларації класу enum:
— val name: String
— val ordinal: Int
Приклад:
enum class TrafficLight(val value: String) {
RED(“ring-ring, you can go”),
ORANGE(“idk”),
GREEN(“stop”)
}
TrafficLight.GREEN.name // GREEN
TrafficLight.GREEN.value // stop
TrafficLight.GREEN.ordinal // 2
Підсумок
Enum класи досить популярні в програмуванні і використовуються щодня і на кожному проекті. Розуміння механізма цих класів дасть вам трохи “бусту” в такому патерні як State Machine, що також є досить популярним патерном.
Pattern — це набір інструментів вирішення типових проблем у розробці програмного забезпечення.
Коли у вас “щось” може бути в різних станах, то для цього потрібно використовувати Enum, але ніколи не певну кількість змінних.
Окрім Enum є ще досить схожий механізм — Sealed клас. А вже про нього ми поговоримо наступного разу ;)
🎬 Ось мій канал, де будуть всі відео на різні теми в програмуванні:
📚 Ось мій Patreon, де будуть всі матеріали в текстовому форматі, додаткова інфа, розбір приклдів, домашні завдання, ІТ-словник, і тд:
Окрім цього, там є різні пропозиції, наприклад, можемо займатись 1х1, можу допомогти зробити резюме, проведу співбесіду і так далі.
🎬 Весь контент, який я роблю — це все мій особистий досвід.
Я пишу/знімаю все сам і ділюсь з вами корисною інформацією, яку ніхто не розповідає, тому підтримайте підпискою ❤️
🙂 На цьому у мене — все!
👉🏻 Ставте лексуси, підписуйтесь і будьте умнічками.
Якщо я правий — похваліть, якщо ні — посваріть.
Но в любому випадку не забудьте дати фідбек 😉
Успіхів! 🇺🇦🦄