Ciklusok megszakítása: break, continue
A tavaszi C# alapozó bootcampünk tananyagait továbbra is megvásárolhatod! Bár az élő előadásokon már túl vagyunk, az összes előadás anyaga továbbra is visszanézhető!
Irány a bootcampAnnak meghatározására, hogy egy ciklus pontosan hány alkalommal / meddig kerüljön megismétlésre, alapvetően a ciklus feltételét használjuk. Vannak azonban olyan speciális esetek, amikor valamilyen ok miatt mégis szeretnénk egy ciklust megszakítani, annak ellenére, hogy a feltétel egyébként továbbra is igaz lenne. Erre az esetre hasznos kulcsszó a break, amely lehetővé teszi a ciklusmag belsejéből a ciklus megszakítását.
Érdemes megjegyezni, hogy a break kulcsszót sosem muszáj alkalmazni, az minden esetben kiváltható a ciklus átalakításával. Ennek ellenére azonban sok esetben átláthatóbb maradhat egy-egy kódrészletünk, vagy megspórolhatunk némi extra kódbűvészkedést, ha egyszerűen használjuk amikor szükséges. Nézzünk egy gyakorlati példát a break használatára! Az alábbi kódrészlet bekér 5 darab osztályzatot a felhasználótól. Amennyiben a felhasználó nem egy érvényes jegyet ír be, úgy a program hibaüzenetet dob, és leállítja a ciklust:
for i in range(5):
jegy = int(input("Adj meg egy osztályzatot: "))
if jegy<1 or jegy>5:
print("Hibás adatot adtál meg!")
break
Az egyik legjellemzőbb felhasználása a break kulcsszónak a van-e legalább egy olyan, ami... típusú feltételek vizsgálata listákon. Ha azt szeretnénk eldönteni, hogy a szamok
listának van-e legalább egy olyan eleme, ami 10-nél nagyobb, akkor onnantól, hogy találtunk legalább egy ilyet, tovább már nem érdemes vizsgálódni, hisz akkor már biztos, hogy a feltétel teljesül. Ha viszont nem találunk egyet sem, akkor muszájak vagyunk végigolvasni a teljes listát, hogy megbizonyosodjunk róla, hogy nem bújt-e meg esetleg az utolsó helyen mégis egy nagyobb érték.
Ez esetben tehát használhatjuk a break-et arra, hogy megállítsuk a ciklust abban az esetben, ha a válaszban már biztosak vagyunk. Ez persze nem szükséges feltétlenül, viszont segíthet abban, hogy a kód "ne dolgozzon feleslegesen", így a programunk gyorsabb és hatékonyabb lesz!
szamok = [3, 4, 9, 12, 5, 1]
van = False
for elem in szamok:
if elem > 10:
van = True
break
print("Van ilyen szám" if van else "Nincs ilyen szám")
Ciklusmag megszakítása: a continue kulcsszó
Előfordul azonban olyan eshetőség is, hogy nem szeretnénk az egész ciklust leállítani - egyszerűen csak ugrani szeretnénk a következő iterációra (ha van még), mert rájöttünk, hogy ebben a körben már felesleges tovább dolgoznunk. Példaként nézzünk egy ciklust, amely összeadja az adatok listában található számokat, de kihagy minden olyan elemet, ami nem egész szám adattípusú:
adatok = [3, 8, "alma", 5, 2, "körte", 4]
osszeg = 0
for elem in adatok:
if type(elem) != int:
continue
osszeg += elem
Próbáld ki magad is! Nézd át a cikkünkhöz tartozó mintakódot - szerkeszd és futtasd közvetlenül a böngésződben, az info9 LineFlame fejlesztőeszközével!