Ne, to není ani náhodou, protože:
1) řetězec if-else nad enumem (třeba stavy ve stavovým automatu) nehlídá, že je některý stav neošetřený. Switch aspoň hodí warning, pokud vyhodíš DEFAULT (další synonymum pto GOTO).
To hódně záleží na jazyku. S goto to vůbec nesouvisí.
2) Přepiš pomocí switche bez jakýhokoliv IFu následující kód (pokud je SWITCH rozšířením IFu, neměl by to být problém):
if(a == 5) {
akce1();
} else if(b == 7) {
akce2();
} else if((c > 0x07) && (c <= 0xf3) {
akce3();
} else {
akce4();
}
switch (True) {
case (a == 5):
akce1();
break;
case (b == 7):
akce2();
break;
case ((c > 0x07) && (c <= 0xf3)):
akce3();
break;
default:
akce4();
}
3. Dovoluje pass through z jedné větve do druhé, to bez něj dáš jenom s GOTO nebo nepřehledným chaosem a opakovaným vyhodnocováním (= drahý, zahazuješ zbytečně pipeline).
Záleží na jazyku.
V mnoha případech to naopak zpřehledňuje.
Prostě IF != SWITCH a programátor ví, kdy co použít.
Tak to každopádně.
Pokud to zaměňuješ, jsi fakt dřevo.
Odpusť si ty invektivy.
Zásadní rozdíl mezi IF a SWITCH je v tom, že IF je binární, zatímco SWITCH je na enum. A vzhledem k tomu, že bool je taky enum, tak má balki do určité míry pravdu.