Wpis z mikrobloga

@decentralizacja: imo ten drugi sposob nie jest taki zly

czytalem kiedys artykuly na temat tego, zeby unikac switcha(szczegolnie, ze kompilator i tak to sprowadzi do odpowiedniej formy) + switch w niektorych jezykach moze byc dziwacznie zdefiniowany i umozliwiac robienie takich czarow jak duff device
  • Odpowiedz
@decentralizacja: wolę drabinkę else if niż switch. Tym bardziej, że się można łatwo #!$%@?ąć zapominając o breaku i że trzeba pamiętać o stosowaniu nawiasów klamrowych w case'ach w niektórych przypadkach (jeśli chodzi o C++) W pythonie takim np. w ogóle nie ma switcha i jakoś ludzie żyją
  • Odpowiedz
@decentralizacja: w C++ można jeszcze tak:

x = [&] {
switch (flag) {
case car:
return new CCar();
case plane:
return new CPlane();
default:
return new CPlaceHolder();
}
}();

IMO najczytelniej, można fajnie przejść z świata statementów na expressiony
  • Odpowiedz
czytalem kiedys artykuly na temat tego, zeby unikac switcha


@alekhine: Pewnie jak większość czytałeś to kiedy uczyłeś się OOP i nie rozumiałeś jeszcze o czym ten artykuł tak naprawdę był. Zapewniam cię, że o ile nie był to jakiś "blogujący junior" to autor nie wspomniał o if-else tylko dlatego, że nie zakładał możliwości stosowania innej konstrukcji przy tego typu rozgałęzieniach.
Tutaj Uncle Bob mówi o problemie switcha i o ile dobrze
  • Odpowiedz
@JakTamCoTam: po to, abyś nie musiał w 15 ifach wprowadzać nazwy zmiennej. Zmienisz nazwę, to będziesz musiał w 15 miejscach to zmienić. A pamiętajmy, że kiedyś nie było przyjaznych refactoringowi IDE.
  • Odpowiedz
@JakTamCoTam: pewnie też dużo znaczenia miał stan ówczesnego oprogramowania. Kiedyś kompilatory słabo optymalizowały kod. Swtich statement pozwala na bezpośrednie utworzenie if-a za pomocą jump table, czyli skok do odpowiedniego brancha na podstawie wejścia do switcha. C ma dużo takich smiesznych naleciałości: np często spotykane while(*target++ = *src++): w taki sposób napisałbyś memcpy w assemblerze komputera PDP-11, na którym projektowany był język C
  • Odpowiedz