Kotlin: try-catch-finally блок та що таке Exception ☄️ (основи програмування)

Alexander Khyzhun
6 min readSep 10, 2022

--

Весь матеріал ви можете знайти переглянувши відео, але стислий конспект я залишу і тут.

Kotlin: try-catch-finally блок

Дуже часто в програмуванні стається таке, що потрібно перевести дані з одного формату в другий, наприклад, з String в Int або навпаки. Це нормально, особливо в клієнт-серверний застосунках. До прикладу команда, яка розробляє Backend може зберігати певні дані в одному виді, що зовсім не правильно буде на mobile напрямку. В таких моментах виникає гостра потреба мапити (eng. mapping / to map, але не плутайте з Map з теми колекцій) дані з одного формата в другий.

Just in fact:

В Kotlin-і у нас є функії ковертації з любого базового типа в любий, наприклад:

Власне ось:

Не виключено, що при конвертації відбудеться якась помилка через те, що програміст не уважний або просто не знає чогось, що важливо 🥴

Наприклад, як ви думаєте, що буде, якщо пустий String спробувати конвертнути в Int, наприклад? 🤔
— правильно, станеться помилка.

Це власне тільки один із прикладів того, що може статись через необачність програміста.

А що таке помилка, які вони є і як з ними поводитись ми розберемо в наступному пості 🤝 so stay tuned ✨

Давайте подивимось на ось такий випадок:

  • У нас є масив даних (який ми можемо змінювати, just friendly reminder).
  • Ми маємо записані числа всередині як String, except 3rd element of course.
  • Далі ми намагаємо конвертувати String в Int.
  • В такому випадку відбудеться помилка, тому що пустота не може стати Integer-ом, що доситься логічно.

👹 Після виконання такого коду, буде ось така помилка:

Як з таким жити і що робити? Відповідь ⤵️

Try-catch-finally block

В таких ситуаціях, як ви могли вже здогадатись, нам на допомогу приходить try-catch блок, який чудово справляється з помилками.

Let me explain:

Try-catch-finally block — це така спеціальна конструкція в мовах програмування, що призначеня для “відлову помилком” і реагування на них. У всіх мова воно працює однаково, максимум можуть бути якісь мінімальні технічні відмінності, але суть одна єдина для всіх.

🖼 Має воно наступний вигляд:

🥚 Try {…}
Всередині блоку try{…} ми пишемо код, в якому очікуємо, що може відбутись якась помилка (але може і не відбутись!)
Відносно одної назви — ми намагаємось, we try {…}

🐣 Catch (ex: Exception) {…}
Ця частина конструкції try-catch призначена для того, щоб зробити щось, у випадку, якщо все ж таки помилка станеться.

Власне цей блок catch гарантує нам, що якось станеться помилка, то програма не “впаде” і не перестане працювати! (Але тільки якщо ми вказали правильну помилку! — про це трохи згодом 😏)

Зверніть увагу, що в рамках скоупа catch у нас є “ex: Exception” — це власне і буде помилка, яка станеться (якщо станеться).

Знову ж таки, нагадую, про помилки ми поговоримо в наступному уроці/пості/туторіалі.

🐥 Finally {…}
And finally, остання частина цієї констукції — це блок finally. Його суть проста: він викликається завжди, але в самому кінці після всіх ваших try-catch. Він накшталт телеведущого, який прощається з глядачами в самому кінці. Його не цікавить, що ви там наробили, як ви з цього викручувались і так далі. Він просто в кінці зробит те, що ви йому скажете. Все.

☝🏻 Але, зверніть увагу, що він не є обов’язковим, тобто його можна не писати, якщо він вам не треба. В такому випадку нічого не буде викликатись, оскільки ви його просто не написали (що досить логічно).

To be or not to be © Catch

🎯 No catch block

Також при роботі з try-catch-finally ми можемо по різному комбінувати наші блоки.

Ось наступні комбінації:

  • single try ❌
  • single catch ❌
  • single finally ❌
  • try + catch ✅
  • try + catch + finally ✅
  • try + finally ✅
  • catch + finally ❌

Звертаю вашу увагу на те, що ми можемо упустити catch block і просто використати try {…} finally {…}.

Це може бути дивним на перший погляд, оскільки сенс try-catch-finally в тому, щоб відловити помилку — і тут я з вами погоджуюсь.

Але є ситуації, коли нам треба кинути/показати/відтворити помилку — ці випадки не на стільки часті, але все ж таки…

Просто знайте, що там тоже можна зробити ☝🏻

🎯 multiple catch block

Забігаючи трохи на перед скажу, що помилки є різні:

  • не добре зконвертоване значення
  • не знайдений файл
  • відсутність інтернета
  • арифметичні помилки
  • помилки з індексам і так далі.

🧑🏻‍🏫 Давайте представимо, що у вас є завдання наступного характеру — вам потрібно знайти і відкрити файл, записати в нього щось, зберігти, закрити і вийти звідти.

На перший погляд нічого важкого або страшного тут немає, але є багато підводних каменів 🪨

Що, на думку початківця, може статись під час виконання такого завдання:
— та по-суті нічого, easy-breasy, відкрив, записав, закрив.

максимум для підстаховки обгорне в try-catch для того, щоб уж точно все було ок (а то мало лі?) 😏

Що, на думку досвідченного програміста може статись:
— файл може не бути знайденим (FileNotFoundException)
— файл може бути invisible (щеЯкасьТамException)
— при створені нового може бути дублікат (FileAlreadyExistsException)
— помилка при записі даних (IOException)
— помилка при відкритті/збереженні (AccessDeniedException)
— і так далі

Якщо вам потрібно мати різні поведінки для різних випадків, наприклад, щоб дати користувачу зрозуміти, що пішло не так, то декілька catch блоків — ваша вихід із ситуації.

Якщо що, то це абсолютно нормально. Просто в більшості варіантів люди просто використовують 1 catch блок з глобальним Exception і все.

Але, якщо у станеться такий випадок, то тепер ви будете знати, що робити 😎

На цьому поки у мене все, дякую за увагу 👏🏻
Буду дуже вдячний, якщо поширите мій патріон у ваших соціальних мережах. Найкраща реклама — це ваші відруги 🫶🏻

Всім миру 🕊

🎬 Ось мій канал, де будуть всі відео на різні теми в програмуванні:

📚 Ось мій Patreon, де будуть всі матеріали в текстовому форматі, додаткова інфа, розбір приклдів, домашні завдання, ІТ-словник, і тд:

Окрім цього, там є різні пропозиції, наприклад, можемо займатись 1х1, можу допомогти зробити резюме, проведу співбесіду і так далі.

🎬 Весь контент, який я роблю — це все мій особистий досвід.
Я пишу/знімаю все сам і ділюсь з вами корисною інформацією, яку ніхто не розповідає, тому підтримайте підпискою ❤️

🙂 На цьому у мене — все!
👉🏻 Ставте лексуси, підписуйтесь і будьте умнічками.

Якщо я правий — похваліть, якщо ні — посваріть.
Но в любому випадку не забудьте дати фідбек 😉

Успіхів! 🇺🇦🦄

ios, android, it, programming, software, engineer, инженер, базы данных, database, code, backend, frontend, webdevelopment, scrum, jira, HR, recruiter, coding, flutter, react, html, css, angular, kotlin, java, python, php, c++, c#, swift, reactnative, mobile, vlog, tutorials, how to, git, QA, BA, алгоритмы, скрам, джира, айти, робота, іт, програмування, алгоритми, розробка, інженерія, фронтенд, бекенд, андроїд, дизайн, кодити, кодінг, флатер, котлін, джава, уроки, навчання, менеджмент
image for preview

--

--

Alexander Khyzhun
Alexander Khyzhun

Written by Alexander Khyzhun

🧙🏻‍♂️ Software Wizard 🎬 Tech blogger 🎌 JDM 🎷 Lofi artist 🏊🏻‍♂️ Swimmer

No responses yet