C# programozás kezdőknek › 2. lecke
C# tanfolyam · 2. lecke
Változók és adattípusok C#-ban
Az előző leckében a program még csak előre beírt szöveget jelenített meg. Most megtanítjuk arra, hogy adatokat tároljon, használjon, és akár meg is változtasson.
Változók nélkül egy program alig tudna „emlékezni” valamire. Egy játékban például a neved, a pontszámod, a rangod és az online állapotod is változóként tárolható.

A lecke végére
- meg tudod magyarázni, mire használunk változókat;
- létre tudsz hozni
string,int,double,charésbooltípusú változókat; - meg tudod változtatni egy változó értékét;
- felismered a szabályos és a jól megválasztott változóneveket;
- érted a különbséget egy érték kiszámítása és a változó értékének módosítása között;
- felismered az egyszerű típusütközéseket.
Ehhez már ismerned kell
Ez a lecke Az első C# programom leckére épül. Legyen működő Visual Studio konzolprojekted, és tudd használni a Console.WriteLine() utasítást.
Fő rész és Plusz
Első körben a változókra, az öt alapvető adattípusra, az értékek módosítására és a jó változónevekre figyelj. A Plusz jelzésű részek kitekintések: végigpróbálhatod őket, de nem kell mindent azonnal megjegyezned.
Mi az a változó?
Képzelj el egy névvel ellátott tárolóhelyet. A név segítségével később meg tudjuk találni az adatot, a tárolt érték pedig a program futása közben akár meg is változhat.
string nev = "Anna";
Console.WriteLine(nev);AnnaKét szakszó, amivel találkozni fogsz
Amikor létrehozunk egy változót és megadjuk a típusát, deklaráljuk. Ha rögtön kezdőértéket is adunk neki, egyben inicializáljuk is. A minta: típus változónév = érték;
Gondolkodj!
Mit jelent ebben a sorban a string, a nev és az "Anna"? string nev = "Anna";
Megoldás
string: szöveges adattípus; nev: a változó neve; "Anna": a változóban tárolt szöveges érték.
Öt gyakori adattípus
Az adattípus meghatározza, milyen érték kerülhet a változóba, és milyen műveleteket végezhetünk vele. Kezdésként öt nagyon gyakori típust használunk.
string
Szöveg
string nev = "Anna";
string varos = "Veszprém";A szöveges értékeket kettős idézőjelek közé írjuk.
int
Egész szám
int eletkor = 14;
int pontszam = 120;Az int egész számokat tárol, például életkort, darabszámot vagy pontszámot.
double
Tizedes szám
double magassag = 1.68;
double atlag = 4.5;A double tört értékeket is tárolhat. A forráskódban a tizedesjel pont: 4.5, nem 4,5.
char
Egyetlen karakter
char kezdoBetu = 'A';
char jel = '@';A char egyetlen karaktert, például egy betűt vagy jelet tárol. Itt aposztrófot használunk: 'A'.
bool
Igaz vagy hamis
bool bejelentkezve = false;
bool sikerult = true;A bool logikai értéket tárol. Két értéke lehet: true vagy false.
Melyik típust választanád?
Milyen adattípus lenne megfelelő ezekhez: egy felhasználó neve; egy játékban megszerzett pontok száma; egy tanuló testmagassága méterben; a neved kezdőbetűje; az, hogy egy feladat elkészült-e?
Megoldás
Név → string; pontszám → int; magasság → double; kezdőbetű → char; elkészült-e → bool.
A változó értéke megváltozhat
A változó egyik legfontosabb tulajdonsága, hogy a benne tárolt értéket később felülírhatjuk.
string nev = "Anna";
Console.WriteLine(nev);
nev = "Bori";
Console.WriteLine(nev);Anna
BoriA string kulcsszót csak a változó létrehozásakor írtuk ki. Amikor később új értéket adunk a már létező változónak, elegendő maga a változónév.
int eletkor = 14;
Console.WriteLine(eletkor);
eletkor = eletkor + 1;
Console.WriteLine(eletkor);Mi történik az eletkor = eletkor + 1; sorban?
Először a jobb oldal számítódik ki: az eletkor jelenlegi értéke 14, ehhez hozzáadunk 1-et, majd a kapott 15-öt visszatároljuk ugyanabba a változóba: 14 → 14 + 1 → 15.
Mit ír ki?
bool bejelentkezve = false;
Console.WriteLine(bejelentkezve);
bejelentkezve = true;
Console.WriteLine(bejelentkezve);Megoldás
Előbb False, majd True jelenik meg. A változó először hamis, később igaz értéket kap.
Plusz: a char és a karakterkódok
A karakterekhez a számítógép számszerű kódértékeket is társít. Ez kitekintés: nem kell megjegyezned a kódokat, csak figyeld meg, hogyan kapcsolható össze egy szám és egy karakter.
int kod = 65;
char betu = (char)kod;
Console.WriteLine(betu);AA (char) azt jelzi, hogy a számértéket karakterként szeretnénk értelmezni. A C# char típusa Unicode-alapú; az alap latin karakterek kódjai megegyeznek az ASCII-kódokkal, így az A kódja 65.
Kíváncsi vagy a karakterkódokra?
Nézd meg a táblázatokat: ASCII kódtábla · Unicode – Basic Latin tábla
Mit ír ki?
int kod = 66;
char betu = (char)kod;
Console.WriteLine(betu);Megoldás
B. A 66-os kód a B karakterhez tartozik.
Hogyan nevezzük el a változókat?
A változónév legyen szabályos, de lehetőleg azt is árulja el, milyen adatot tárol. Az x is szabályos név lehet, de a pontszam sokkal többet mond az olvasónak.
| Változónév | Szabályos? | Miért? |
|---|---|---|
pontszam | Igen | Betűvel kezdődik, nincs benne szóköz vagy tiltott jel. |
pont1 | Igen | Szám szerepelhet a névben, csak nem kezdődhet vele. |
_pont | Igen | Az aláhúzás megengedett, bár kezdőként beszédesebb neveket használunk. |
2atlag | Nem | Számmal kezdődik. |
feladat kesz | Nem | Szóköz van benne. |
pont-szam | Nem | A kötőjel a C#-ban műveleti jel (kivonás), nem lehet a név része. |
Miért hívják camelCase-nek?
Az angol camel (teve) szóból: a szó belsejében kiemelkedő nagybetűk a teve púpjaira emlékeztetnek. A C#-ban a helyi változók nevét jellemzően így írjuk: az első szó kisbetűvel kezdődik, a továbbiak nagy kezdőbetűvel kapcsolódnak, például elsoPont, feladatKesz, kedvencJatek.
Figyelj a kis- és nagybetűkre!
A C# megkülönbözteti őket: a pontszam és a Pontszam két különböző azonosító.
Melyik hibás?
int pont1 = 10;
int elsoPont = 15;
int _pont = 20;
int pont-szam = 25;Megoldás
A pont-szam hibás, mert a kötőjel nem lehet a név része. Az _pont szabályos, de hétköznapi változónévként a pont vagy a pontszam olvashatóbb.
Számolni is tudunk a változókkal
A változóban tárolt számot felhasználhatjuk egy számításban anélkül, hogy maga a változó megváltozna.
Csak kiszámoljuk
int pontszam = 10;
Console.WriteLine(pontszam + 5);
Console.WriteLine(pontszam);Kimenet: 15, majd 10. Az eredményt kiírtuk, de nem tároltuk el.
Az új értéket el is tároljuk
int pontszam = 10;
pontszam = pontszam + 5;
Console.WriteLine(pontszam);Kimenet: 15. Az eredmény visszakerült a pontszam változóba.
Plusz: rövidebb írásmód
Ezt még nem kell kívülről tudnod, de hamar találkozni fogsz vele: a pontszam += 5; ugyanazt jelenti, mint a pontszam = pontszam + 5;. Az ilyen operátorokkal az Operátorok leckében részletesen foglalkozunk.
Mit ír ki?
int pontszam = 10;
Console.WriteLine(pontszam + 5);
pontszam += 2;
Console.WriteLine(pontszam);Megoldás
Először 15, majd 12. Az első sor csak kiír egy eredményt, a pontszam += 2; viszont ténylegesen megváltoztatja a változó értékét.
A típus számít
A C# figyeli, milyen típusú adatot szeretnél egy változóba tenni. Ha a típus és az érték nem illik össze, fordítási hibát kapsz.
Hibás
int eletkor = "14";A "14" az idézőjelek miatt szöveg, az int viszont egész számot vár. A Visual Studio CS0029 hibát jelez: Cannot implicitly convert type 'string' to 'int'.
Helyes
int eletkor = 14;Itt a változó típusa és az érték típusa illeszkedik egymáshoz.
És ha ezt írjuk: string eletkor = "14";
Ez szabályos C# kód, de a 14 ilyenkor szövegként van eltárolva, számolni nem lehet vele. Az adatbekérés leckében megtanuljuk, hogyan alakítható a szöveg számmá.
Plusz: meglepetés az egész számok osztásánál
int a = 5;
int b = 2;
Console.WriteLine(a / b); // 2A kimenet 2, nem 2,5: két int osztásakor az eredmény is egész szám, a tört rész levágódik.
int a = 5;
double b = 2;
Console.WriteLine(a / b); // 2,5Itt már 2,5 az eredmény, mert a műveletben double is szerepel. Magyar beállításnál a konzol vesszővel írja ki.
Nem kell még fejből tudnod minden ilyen szabályt
Most az a fontos felismerés, hogy az adattípus nemcsak azt határozza meg, mit tárolunk, hanem a műveletek eredményére is hatással lehet.
Mini projekt: Játékosprofil
Készítsünk egy egyszerű játékosprofilt. Ebben mind az öt adattípus megjelenik, de még nincs szükség adatbekérésre.
string jatekosNev = "PixelFox";
int szint = 7;
double pontAtlag = 82.5;
char rang = 'A';
bool online = true;
Console.Write("Játékos: ");
Console.WriteLine(jatekosNev);
Console.Write("Szint: ");
Console.WriteLine(szint);
Console.Write("Pontátlag: ");
Console.WriteLine(pontAtlag);
Console.Write("Rang: ");
Console.WriteLine(rang);
Console.Write("Online: ");
Console.WriteLine(online);Te jössz!
Módosítsd legalább három változó értékét: emeld a szintet eggyel, változtasd meg a rangot, majd állítsd az online változót false értékre. Figyeld meg: a pontátlag a konzolon magyar beállításnál 82,5 formában jelenik meg.
Önálló gyakorlófeladatok
Ezeknél már ne másold a példákat. Először próbáld meg saját megoldással, és csak utána nyisd le az ellenőrzést.
1. Adatdetektív
Hozz létre megfelelő típusú változókat ezekhez az adatokhoz: becenév, életkor, napi képernyőidő órában, a neved kezdőbetűje, elkészült-e a házi feladat.
Egy lehetséges megoldás
string becenev = "Pixel";
int eletkor = 14;
double kepernyoIdo = 2.5;
char kezdoBetu = 'P';
bool haziKesz = true;2. Javítsd ki a hibákat!
int kedvencSzam = "7";
double 2atlag = 4.5;
bool feladat kesz = true;
char jel = "A";Megoldás
int kedvencSzam = 7;
double atlag2 = 4.5;
bool feladatKesz = true;
char jel = 'A';A szám nem kerül idézőjelek közé; a változónév nem kezdődhet számmal és nem tartalmazhat szóközt; a char értékét aposztrófok közé írjuk.
3. Kövesd az érték változását!
int energia = 50;
Console.WriteLine(energia);
energia += 20;
Console.WriteLine(energia);
energia -= 15;
Console.WriteLine(energia);Írd fel előre a három kimenetet, majd ellenőrizd futtatással.
Megoldás
50, 70, 55.
4. Miért nem 2,5?
int pont = 5;
int jatekos = 2;
Console.WriteLine(pont / jatekos);Mi lesz a kimenet, és hogyan módosítanád a programot, hogy 2,5 legyen?
Megoldás
A kimenet 2. Például a második változót double típusúra változtathatod:
int pont = 5;
double jatekos = 2;
Console.WriteLine(pont / jatekos); // 2,5Nagyobb önálló feladat: saját digitális karakterlap
Készíts egy saját karakter- vagy játékosprofilt legalább öt változóval, mintha egy játék vagy történet szereplőjét építenéd fel. A programodban legyen:
- legalább egy
string,intésdouble, valamint egycharés egybool; - legalább egy változó, amelynek az értékét később megváltoztatod;
- legalább egy számítás egy változóval;
- áttekinthető konzolos kimenet.
A feladat akkor kész, ha…
…a program hiba nélkül lefut, mind az öt adattípus szerepel benne, legalább egy változó értékét megváltoztatod, és a kimenet jól olvasható. Plusz kihívás: találj ki olyan neveket és adatokat, amelyekből már sejteni lehet, milyen játék vagy történet szereplőjéről van szó.
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ.
1. Milyen típusú változóban tárolnád a „Veszprém” szöveget?
string.
2. Mi a különbség az 'A' és az "A" között?
Az 'A' egy char típusú érték, egyetlen karakter. Az "A" egy string, vagyis szöveg, amely most egy karakterből áll.
3. Szabályos változónév-e a pont2?
Igen. A változónév tartalmazhat számot, csak nem kezdődhet vele.
4. Mit jelent a pontszam += 5;?
A pontszam aktuális értékéhez hozzáadunk 5-öt, és az eredményt visszatároljuk ugyanabba a változóba.
5. Miért hibás az int eletkor = "14";?
Mert az int egész számot vár, a "14" pedig idézőjelek között szöveg.
6. Mit ad eredményül az 5 / 2, ha mindkét érték int?
2. Két egész szám osztásánál a tört rész levágódik.
Mit tudsz már?
- Tudsz változót létrehozni és kezdőértéket adni neki.
- Ismered a
string,int,double,charésboolszerepét. - Tudod módosítani egy változó értékét.
- Felismered a hibás változóneveket.
- Tudod, mi a különbség egy számítás és az eredmény visszatárolása között.
- Felismered az egyszerű típusütközéseket.
Füzetbe ragasztható összefoglaló 📎
A változók és adattípusok egy oldalon: jó ismétléshez, dolgozat előtti átnézéshez, és igen, a füzetbe is beragaszthatod. 😄
Következő lecke: adatbekérés a felhasználótól
Eddig minden értéket mi írtunk bele a forráskódba. A következő leckében a program már a felhasználótól kér adatot a Console.ReadLine() segítségével.






