A blokk · Bevezetés, környezet, Git · 9. tananyag
A programozó több időt tölt kódolvasással, mint kódírással. És amikor a program mást csinál, mint amit vártál, nem találgatni kell, hanem belenézni: erre való a debugger. A harmadik téma: mit bocsát meg a fordító (whitespace) — és mit nem bocsát meg a munkatársad (rendetlen formázás).
A gép a programot sorról sorra, felülről lefelé hajtja végre (A6). A kódolvasás ugyanez: végigmész a sorokon, és minden sornál kigondolod, mit csinál. Ezt hívjuk a program fejben futtatásának (szaknyelven: trace).
Próbáld ki — mit ír ki ez a program?
Console.Write("Prog"); Console.Write("ram"); Console.WriteLine("ozás"); Console.WriteLine("2025");
Fejben futtatva: Write → nincs sortörés → a három darab
egy sorba kerül:
Programozás 2025
Ha ezt fejben kihoztad, kódot olvastál — pont úgy, ahogy a gép.
Az órákon és a számonkéréseken is lesz „mit ír ki?” feladat. A titok mindig ugyanaz: ne tippelj ránézésre — menj végig soronként, és írd le magadnak a kimenetet menet közben.
Az A5-ben megtanultuk: F5 = futtatás hibakeresővel. Eddig nem volt jelentősége — most megtöltjük tartalommal.
| Billentyű | Neve | Mit csinál? |
|---|---|---|
| F10 | Step Over | végrehajtja az aktuális sort, a következőn áll meg |
| F11 | Step Into | mint az F10, de a metódushívásba belelép (a D blokktól lesz izgalmas) |
| F5 | Continue | futás tovább a következő töréspontig (vagy a végéig) |
| Shift+F5 | Stop | a hibakeresés leállítása |
Léptetés közben rendezd egymás mellé a Visual Studiót és a konzolablakot: F10 → és a szemed előtt jelenik meg a következő kiírt sor. A program futása kézzelfoghatóvá válik.
A debugger igazi szupererejét a B blokktól látod majd: a Locals és a Watch ablakban futás közben figyelheted a változók értékét. Most a léptetést és a töréspontot gyakoroljuk be — ez az alap.
Amikor a program mást csinál, mint amit vársz, és ránézésre nem látod, miért. A kezdők találgatnak és véletlenszerűen átírnak dolgokat — a profik letesznek egy töréspontot oda, ahol a baj gyanítható, és megnézik, mi történik valójában.
Whitespace = a „láthatatlan” karakterek: szóköz, tabulátor, sortörés, üres sor. A C#-fordító szempontjából az utasítások határait a pontosvessző és a kapcsos zárójelek jelölik ki — a whitespace mennyisége nem számít:
// Ez a három program a fordítónak UGYANAZ: Console.WriteLine("Szia"); Console . WriteLine ( "Szia" ) ; Console .WriteLine( "Szia" );
De vigyázat, van négy hely, ahol a whitespace igenis számít:
| Hol? | Mi történik? |
|---|---|
| szó belsejében | Write Line — két külön szó lett belőle: fordítási hiba |
| string literálon belül | "S z i a" — pontosan így íródik ki: a szóköz ott adat! |
| sortörés a string literálban | nyers sortörés nem lehet benne — de a Visual Studio Enterre kettébontja a literált, és + jellel fűzi össze, így a program változatlanul működik |
// megjegyzés után | az egysoros megjegyzés a sor végéig tart - bármilyen whitespace karaktert is írsz utána (kivéve a sortörést) |
A Visual Studio által beszúrt + a stringek
összefűzése — a "Szia, " + "Anna"
ugyanaz, mint a "Szia, Anna". Részletesen a B blokkban
tanuljuk; kevésbé okos szerkesztőben a nyers sortörés a literálban CS1010 hibát
adna.
A fordítónak mindegy a formázás. Az embernek nem. A szabadságot nem arra használjuk, hogy összevissza írjunk, hanem arra, hogy egységesen, olvashatóan tördeljünk.
Mi történik a programmal, ha ezt a változtatást megcsinálod?
A kódot egyszer írod, sokszor olvasod (te, a munkatársad, a jövőbeli önmagad). A stílusszabályok első csomagja — a többi majd akkor jön, amikor az adott nyelvi elemet tanuljuk:
// kiírja a nevet — fölösleges, ezt a kód is mondja.// a keret 28 karakter széles, ehhez igazítjuk a sorokat —
ez már segít.(Az elnevezési szabályok — PascalCase, camelCase — a B blokkban jönnek, a változókkal együtt: ott lesz mit elnevezni.)
Nevjegy projektet (A6–A7), és
csúfítsd el szándékosan: húzz szét két utasítást több sorba,
tegyél fölösleges szóközöket, zsúfolj két WriteLine-t
egy sorba. Futtasd: működik — a fordítónak mindegy.WriteLine
sorra (F9), és indíts F5-tel. A sárga nyíl az első soron
áll — a konzol még üres!Formázás rendbe téve üzenettel).Láttad, hogy a formázás nem változtat a működésen; a töréspontnál megállt a program; és F10-zel soronként követted a futást.
⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás
Futtasd fejben, írd le a pontos kimenetet — csak utána ellenőrizd géppel:
Console.Write("C"); Console.Write("#"); Console.WriteLine("!"); Console.Write("10"); Console.WriteLine(".");
Sorold fel a négy helyet, ahol a whitespace-nek jelentősége van!
Az alábbi kód működik, de csúnya. Írd át szabályosra (papíron vagy gépen), majd ellenőrizd a Ctrl+K, Ctrl+D eredményével:
Console.WriteLine("Egy");Console.WriteLine("Kettő");Console .WriteLine("Három");
Tegyél töréspontot a lépcső-programod (A6.3) közepére. Indítsd F5-tel, és mielőtt F10-et nyomnál, mondd ki hangosan: mi van már a konzolon, és mi jön következőnek? Ellenőrizd léptetéssel!
Írj egy 6–8 soros „mit ír ki?” feladványt a padtársadnak
Write és WriteLine
keverésével. Cseréljetek, futtassátok fejben, aztán géppel — ki találta el
a másikét?
Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.
| Fogalom | Jelentés |
|---|---|
| kódolvasás / fejben futtatás (trace) | a program soronkénti követése futtatás nélkül |
| debugger (hibakereső) | eszköz, amellyel a futó program megállítható és lépésenként követhető |
| töréspont (breakpoint) | jelölés egy soron: a debugger itt megállítja a futást (F9) |
| léptetés (stepping) | a megállított program soronkénti végrehajtása (F10, F11) |
| Step Over / Step Into | F10: a sort egyben hajtja végre · F11: a metódushívásba belép |
| whitespace | láthatatlan karakterek: szóköz, tabulátor, sortörés, üres sor |
| behúzás (indentation) | a kód beljebb kezdése a szerkezet jelzésére |
| kódolási stílus | megállapodások a kód formázásáról az olvashatóságért |