Az egyetemi tanár miért nem engedi a break (kivéve switch-case), vagy ciklusból return használatát?
Nekem volt olyan tanárom aki a for ciklust nem akarta látni egy kódban sem. Ha megjelent valahol a for, akkor 0 pont.
Az ilyennel nem lehet mit kezdeni. Úgy kell csinálni ahogy kéri.
Ciklusból return.
Ezt a nagymamádtól tanultad?
Mert az esetek 99%-ában ez átgondolatlan, hibás tervezés eredménye. Egy átlátható, és jól megtervezett algoritmus mentes a közvetlen vezérlésátadó utasításoktól.
Persze, amit a nyelv megenged, azt ki is lehet használni, csak épp nem biztos, hogy célszerű is. Az egyetemi képzésnek pedig az is a célja, hogy előrelátó, alapos szakembereket képezzen, ehhez pedig hozzá tartozik, hogy nem alkalmazol olyan szerkezeteket, amik könnyen spagetti-kódhoz vezetnek.
Tényleg rendkívül kevés olyan eset van, amikor break nélkül ne lehetne elegánsabban megírni egy algoritmust.
Két C++ példa egy függvényre, ami egy vektorból visszaadja az első negatív elem indexét, ha nincs ilyen, akkor a vektor hosszát adja vissza.
std::size_t negativIndex(const std::vector<int> & vec) {
for (std::size_t i = 0; i != vec.size(); ++i)
if (vec[i] < 0)
return i;
return vec.size();
}
Ez egy sima for ciklus, ami látszólag végiglépked a vektor összes elemén, aztán ha talál egy negatív elemet, akkor kitör a függvényből és az aktuális index értéket adja vissza.
std::size_t negativIndex(const std::vector<int> & vec) {
std::size_t i = 0;
while (i != vec.size() && !(vec[i] < 0))
++i;
return i;
}
Itt pedig a ciklusfeltétel része, hogy találunk-e negatív számot, ha nem, akkor növeljük a ciklusváltozót. Miután kiléptünk a ciklusból, visszaadjuk az i értékét. Mint látható, a feladat "ugrálás" nélkül is megoldható. Nem is kellett azt a határesetet kezelnünk, hogy mi van, ha nem talál negatív számot a ciklusban.
A tanár a másodikat preferálja, szerintem méltányolható a preferenciája. Hogy melyik a szebb és az érthetőbb, azt mindenki döntse el maga. A második talán közelebb áll a "gépi logikához", a megvalósítandó algoritmushoz, de lehet hogy "emberi logikával" az első a logikusabb.
1. Ahogy írták single entry, single return, így sokkal átláthatóbb, struktúráltabb, debuggolhatóbb lesz a programod.
2. Pont emiatt sok helyen elvárás, hogy így fejlessz (pl autóipar)?
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!