1 Востаннє редагувалося Lesko.Serhiy (17.02.2015 23:21:04)

Тема: try/catch

Розкажіть будь ласка за виняток  try/catch.

2

Re: try/catch

Давайте я вам краще розкажу за форумну культуру. Отже, після того, як вам розкажуть тут про те, що ви хочете, тут з'явиться певний текст. Практично такий самий, як і в тисячі інших місць в мережі. Але ті тексти ви навіть не намагалися прочитати, тобто практично гарантовано можна вважати, що й цей читати не станете. Тому особливого сенсу відповідати на такі питання немає. От якби ви хоч якось продемонстрували, що намагалися розібратися самостійно...

Подякували: Monolith, ostap34PHP2

3

Re: try/catch

Lesko.Serhiy написав:

Розкажіть будь ласка за виняток  try/catch.

Можна надсилати вам рахунок за навчання?

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ
Подякували: Regen, koala, ostap34PHP3

4

Re: try/catch

Ок.Вибачайте за таку наглость я читав за цей вийняток я не можу зрозуміти
try{
Метод, або небезпечнні строки
}
catch( що тут пишуть){}

5

Re: try/catch

Там пишуть тип виняткової ситуації і її назву, ну тобто проголошують змінну. Спрацює тільки той блок catch, який відповідає за той самий тип винятку (так, блоків catch може бути багато).

6

Re: try/catch

ну наприклад я створив свій метод і поставив його у виняток який мені потрібний тип винякової ситуація поставити?

7

Re: try/catch

Розкажу своїми словами як це бачу я:
Наприклад у вас є програма яка виконує певну роботу. У ній є метод sendEmail
ви викликаєте його коли треба відправляти повідомлення. У sendEmail багато роботи і бувають моменти коли він викидує exception
Наприклад обірвалось з’єднання з інтернетом під час відправлення листа
Або наприклад сталась ще якась критична ситуація.

Відповідно ви не хочете що б ваша програма падала а обгортаєте виклик методу в try catch

try {
  sendEmail();
} catch (NetworkException e) {
    System.err.println("NetworkException: " + e.getMessage());
   // для певного випадку ми можемо наприклад показати користувачу кнопку "Спробувати ще раз" або автоматом спробувати ще 1 раз відправити цей лист
} catch (Exception e) {
    System.err.println("Caught: " + e.getMessage());
   // у всіх інших випадках пишемо у лог і обробляємо цю ситуацію
}

Фішка у тому що за допомогою відловлювання ексепшинів ми можемо написати програму так - що вона не буде падати у не критичних  випадках.

Якщо не відправили лист - ми придумаємо що з цим робити
Якщо сталась якась помилка у мережі, у формуванні подвідомлення - також можна придумати щось у цій ситуації.

Це моє бачення і розуміння.

Подякували: Chemist-i, Lesko.Serhiy, ostap34PHP3

8

Re: try/catch

Lesko.Serhiy написав:

ну наприклад я створив свій метод і поставив його у виняток який мені потрібний тип винякової ситуація поставити?

Той, що може виникати у вашому методі.

9

Re: try/catch

Часто потрібно ставити вийняток на код чи лише у тих випадках як Replace Team сказав наприклад зв'язані з відправкою або обробкою.

10

Re: try/catch

Lesko.Serhiy написав:

Часто потрібно ставити вийняток на код чи лише у тих випадках як Replace Team сказав наприклад зв'язані з відправкою або обробкою.

Ну, наприклад, якщо пишете програму синтаксичного розбору, а надходить речення, яке за всіма ознаками є питанням, а наприкінці стоїть крапка - це має створювати виняток. Крім того, виняткові ситуації тут виникають під час семантичного розбору через застосування невідомого виразу "ставити вийняток" (виняткову ситуацію можна створювати і обробляти, але не ставити) і згадку невідомого користувача...
А якщо серйозно, то винятки потрібні, коли у вас кілька вкладених функцій, які не можуть працювати, якщо щось пішло не так всередині. Якщо ж функція одна, то можна і if/else-ом відбутися (хоча, звісно, якщо там 10 вкладених циклів, вже треба думати про винятки... чи оптимізацію).

11

Re: try/catch

Якщо код може згенерувати виняток і його можна обробити - варто відловлювати цей виняток і щось з цим робити)

Звісно ви маєте розуміти де можуть бути винятки а де ні. Я веду до того що якщо код працює нормально і не генерує винятків просто так не варто його засовувати в конструкцію try catch

12 Востаннє редагувалося koala (19.02.2015 13:01:56)

Re: try/catch

А ще - в реальному коді дуже не варто відловлювати всі винятки (Exception), а не конкретні підтипи, крім:
- найзагальнішого обробник в коді (тобто ви певні, що навколо нічого вже не буде);
- випадків, коли ви знову кидаєте цей виняток (тобто робите throw в блоці catch, і кидаєте те саме, що схопили).
Так можна втратити якийсь непередбачений випадок - його оброблять всередині коду, а ви навіть не знатимете, що воно сталося.

13

Re: try/catch

Дякую за відповідь допомогло трохи але треба ще практику.