Тема: Яка різниця??
Є конструкція if/else. Навіщо придумувати конструкцію try/catch?? Яка між ними різниця??
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → JavaScript, TypeScript, ECMAScript → Яка різниця??
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Є конструкція if/else. Навіщо придумувати конструкцію try/catch?? Яка між ними різниця??
Гуглиться ж ізі)
https://habrahabr.ru/post/21376/
if/else - розгалуження
try/catch - обробка виключень
try...catch використовується для обробки помилок, if...else просто для виконування якоїсь дії, якщо щось дійсне...
Гуглиться ж ізі)
https://habrahabr.ru/post/21376/
А без Росії не впораєтеся? http://replace.org.ua/topic/4376/
elektryk
Навіщо вам ноги, коли руки маєте?
elektryk Навіщо вам ноги, коли руки маєте?
Ви правий. Ось освою ДжавуСкріпт і доведу, що можна конструкцією if/else замінити try/catch, а тим більше тернарний оператор.
тернарний оператор можна замінити, але навіщо? він мені вдвічі скорочує код
Гаразд, хай живе.
найближчий родич is/else це
switch(expression) { case n: code block break; case n: code block break; default: code block }
от без цієї конструкції можна обійтися, використовуючи if/else
в python так і зробили
Хай ця конструкція буде. Вона корисна. В моїй практиці був випадок коли цих кейсів більше десятка. Замахаєшся замінювати їх іфами. Та й вийде якась потвора.
Хай ця конструкція буде. Вона корисна. В моїй практиці був випадок коли цих кейсів більше десятка. Замахаєшся замінювати їх іфами. Та й вийде якась потвора.
Отожбо. А якщо додати, що компілятор при оптимізації великий switch балансує або взагалі табличним робить (якщо мітки підряд), то це ще швидкість підінмає.
Також важливо, що switch оцінює аргумент один раз, для volatile-аргумента (регістр периферії, може щось міжпоточне) у випадку ланцюжка if/else if/… треба у тимчасову змінну спочатку записати.
Я вже не кажу про protothreads, там без switch взагалі ніяк (крім адрес міток в gcc).
p.s. У до-С-шні часи тернарний оператор
a = (b ? sin : cos)(c);
виглядав так
a := if b then sin else cos fi (c);
Ну, він був не зовсім тернарний, бо elif можна було ставити :-)
Покористуватися не вийшло, на лабах був лише алгол-60, 68-го не було, а пізніше вже паскаль/С під рукою були
elektryk, не могли б ви хоча б коротко описати й показати в яких саме випадках можна зробити одне й теж за допомогою if/else та try/catch?
Ви знаєте переклад цих ключових слів з англійської? Якщо буквально перекласти ці слова на українську, то if/else виглядатиме приблизно так:
якщо (одне === іншому) {
// виконати якусь дію в цьому блоці
} інакше {
// виконати іншу дію
}
а try/catch так:
спробувати {
// виконати якусь дію в цьому блоці
} зловити (помилку){
консоль.записати(помилку)
}
Стосовно заміни в JavaScript switch/case на if/else, то до недавнього часу я завжди використовував if/else, до поки мені не прийшлось працювати в команді розробників і миритись з особливостями написання ними коду. Я побачив де можна дійсно зручніше використовувати switch/case:
// Setting availability of software groups.
switch (detail.DownloadType) {
case DownloadType.Undefined:
break;
case DownloadType.Core:
case DownloadType.Agent:
case DownloadType.OfflineLinuxAgent:
this.hasApplications = true;
break;
case DownloadType.LocalMountUtility:
case DownloadType.DocRetrieverForSharePoint:
case DownloadType.LinuxLiveDVD:
case DownloadType.ApplianceRUU:
this.hasUtilities = true;
break;
case DownloadType.AddOnForKaseya:
case DownloadType.DataProtectionPlugin:
this.hasPlugins = true;
break;
case DownloadType.AzureReplicationTargetUpdater:
this.hasScripts = true;
break;
}
Тобто switch/case зручно використовувати, коли є декілька варіантів умови для одного блоку.
Порада: якщо кілька варіантів case роблять одне й те саме, або ж доповнюють одне одного
то дуже бажано дописувати щось на кшталт fallthrough в коментар:
case A:
smth=true;
case B: //fallthrough - тут продовжується попередній код!
case C: //fallthrough
smth_else = true;
break;
case D:
smth_other = false;
break;
Випадки B і C пропускають потік виконання крізь себе, тому потребують позначок. Інакше можна такого наваяти при змінах...
Ну і поліморфізм замінює собою switch-case, якщо має сенс створювати окремі класи прототипи для цих DownloadType.
Ось такий код не пропускає TypeScript:
case A:
smth=true;
case B: //fallthrough - тут продовжується попередній код!
case C: //fallthrough
smth_else = true;
break;
case D:
smth_other = false;
break;
Погоджуюсь, що тут дуже легко заплутатись, я б такого точно не написав.
Стосовно поліморфізму, яким можна замінити switch-case, то я щось сходу так і не уявив що мається на увазі.
Уточнення: у моєму прикладі вище, код написано на TypeScript, а DownloadType має тип enum.
В моїй практиці був випадок коли цих кейсів більше десятка. Замахаєшся замінювати їх іфами. Та й вийде якась потвора.
В моїй практиці за таке руки відбивали
Не треба так.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися