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.
A 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, az energiaszinted, a rangod és az online állapotod is változóként tárolható. Ebben a leckében nevet, pontszámot, tizedes számot, karaktert és logikai értéket is tárolunk.
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;
- megé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;
- tudod, hogy az adattípus a műveletek eredményére is hatással lehet.
Mi a lecke fő része, és mi a kitekintés?
Első körben a változók létrehozására, 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: ugyanúgy végigpróbálhatod őket, de nem kell mindent azonnal megjegyezned.Mielőtt elkezded
Ez a lecke az Az első C# programom leckére épül. Legyen működő Visual Studio konzolprojekted, és tudd használni aConsole.WriteLine() utasítást.1
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.Mi az a változó?
Első változónkC#
string nev = "Anna";
Console.WriteLine(nev);KimenetConsole
AnnastringMegmondja, milyen típusú adatot szeretnénk tárolni. A
string szöveget jelent.nevEz a változó neve. Később ezzel a névvel hivatkozunk a tárolt értékre.
=Értéket adunk a változónak.
"Anna"Ez a változó kezdeti értéke. Az idézőjelek jelzik, hogy szövegről van szó.
Két szakszó, amivel találkozni fogsz
Amikor először létrehozunk egy változót és megadjuk a típusát, deklaráljuk. Ha rögtön kezdőértéket is adunk neki, akkor egyben inicializáljuk is. Kezdőként elég, ha felismered ezt a mintát:típus változónév = érték;Gondolkodj!
string, a nev és az "Anna"?string nev = "Anna";Megoldás megmutatása
string: szöveges adattípus; nev: a változó neve; "Anna": a változóban tárolt szöveges érték.2
Az adattípus meghatározza, hogy 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.Öt gyakori adattípus
Szöveg
string nev = "Anna";
string varos = "Veszprém";Egész szám
int eletkor = 14;
int pontszam = 120;int egész számokat tárol, például életkort, darabszámot vagy pontszámot.Tizedes szám
double magassag = 1.68;
double atlag = 4.5;double tört értékeket is tárolhat. A C# forráskódban a tizedesjel pont: 4.5, nem 4,5.Egyetlen karakter
char kezdoBetu = 'A';
char jel = '@';char típust a mostani példáinkban egyetlen karakter, például egy betű vagy jel tárolására használjuk. Itt aposztrófot használunk: 'A'.Igaz vagy hamis
bool bejelentkezve = false;
bool sikerult = true;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ő az alábbi adatokhoz?- 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 megmutatása
Név →
string; pontszám → int; magasság → double; név kezdőbetűje → char; elkészült-e → bool.3
A változó egyik legfontosabb tulajdonsága, hogy a benne tárolt értéket később felülírhatjuk.A változó értéke megváltozhat
PéldaC#
string nev = "Anna";
Console.WriteLine(nev);
nev = "Bori";
Console.WriteLine(nev);Anna
Boristring kulcsszót csak a változó létrehozásakor írtuk ki. Amikor később új értéket adunk a már létező nev változónak, elegendő maga a változónév.Számérték módosításaC#
int eletkor = 14;
Console.WriteLine(eletkor);
eletkor = eletkor + 1;
Console.WriteLine(eletkor);Mi történik az eletkor = eletkor + 1; sorban?
A jobb oldal számítódik ki először. 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 → 15Mit ír ki?
bool bejelentkezve = false;
Console.WriteLine(bejelentkezve);
bejelentkezve = true;
Console.WriteLine(bejelentkezve);Megoldás megmutatása
A konzolban
False, majd True jelenik meg. A változó először hamis, később igaz értéket kap.4
A Plusz: a char és a karakterkódok
char típust az egyszerű példáinkban egyetlen karakter tárolására használjuk. A karakterekhez a számítógép számszerű kódértékeket is társít. Ez már kitekintés: nem kell most megjegyezned a kódokat, csak figyeld meg, hogyan kapcsolható össze egy szám és egy karakter.Szám értelmezése karakterkéntC#
int kod = 65;
char betu = (char)kod;
Console.WriteLine(betu);A(char) azt jelzi, hogy a számértéket karakterként szeretnénk értelmezni. A 65-ös érték a Basic Latin karakterkészletben az A betűhöz tartozik.Kíváncsi vagy a karakterkódokra?
A C#char típusa Unicode-alapú. Az alap latin karakterek kódértékei az ASCII-val is megegyeznek: az A például 65. Ha kíváncsi vagy, melyik szám melyik karakterhez tartozik, 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 megmutatása
B. A 66-os érték a
B karakterhez tartozik.5
A változónév legyen szabályos, de lehetőleg azt is árulja el, milyen adatot tárol. A Hogyan nevezzük el a változókat?
x lehet szabályos név, 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 általában 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, nem lehet a változónév része. |
Miért hívják camelCase-nek?
A név az angol camel, vagyis teve szóból ered: a szó belsejében kiemelkedő nagybetűk a teve púpjaira emlékeztetnek. A C# kódolási konvenciókban a helyi változók neveit jellemzően camelCase formában írjuk: az első szó kisbetűvel kezdődik, a következő szavak pedig nagy kezdőbetűvel kapcsolódnak hozzá.int elsoPont = 10;
bool feladatKesz = true;
string kedvencJatek = "Tetris";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 megmutatása
A
pont-szam hibás, mert a kötőjel nem lehet azonosító része. Az _pont szabályos, de hétköznapi változónévként a pont vagy pontszam olvashatóbb.6
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.Számolni is tudunk a változókkal
Csak kiszámoljuk
int pontszam = 10;
Console.WriteLine(pontszam + 5);
Console.WriteLine(pontszam);Az új értéket el is tároljuk
int pontszam = 10;
pontszam = pontszam + 5;
Console.WriteLine(pontszam);pontszam változóba.Plusz: rövidebb írásmód
Ezt nem kell még kívülről tudnod, de hamar találkozni fogsz vele. Ugyanez rövidebben is leírható:pontszam += 5;pontszam = pontszam + 5;+=, -=, *= és /= operátorokkal később részletesebben is foglalkozunk.Mit ír ki?
int pontszam = 10;
Console.WriteLine(pontszam + 5);
pontszam += 2;
Console.WriteLine(pontszam);Megoldás megmutatása
Először 15, majd 12. Az első számítás csak kiír egy eredményt. A
pontszam += 2; viszont ténylegesen megváltoztatja a változó értékét.7
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.A típus számít
Hibás
int eletkor = "14";"14" az idézőjelek miatt szöveg, az int viszont egész számot vár.Helyes
int eletkor = 14;És ha ezt írjuk?
string eletkor = "14";14 azonban ilyenkor szövegként van eltárolva. Később megtanuljuk, hogyan alakíthatunk szöveget számmá adatbekérés után.Plusz: meglepetés az egész számok osztásánál
int a = 5;
int b = 2;
Console.WriteLine(a / b);int értéket osztunk, az eredmény is egész szám lesz, a tört rész pedig nem marad meg.int a = 5;
double b = 2;
Console.WriteLine(a / b);double érték is szerepel. A C# forráskódban tizedespontot írunk, de a konzol magyar területi beállítások mellett az eredményt akár 2,5 formában is megjelenítheti.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.JátékosprofilC#
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);online változót false értékre.Ö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 megmutatása
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 pedig aposztrófot használ.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);Megoldás megmutatása
50, 70, 55.
4. Miért nem 2.5?
int pont = 5;
int jatekos = 2;
Console.WriteLine(pont / jatekos);Megoldás megmutatása
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);Nagyobb önálló feladat: Saját digitális karakterlap
- legalább egy
string; - legalább egy
int; - legalább egy
double; - egy
char; - egy
bool; - 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 konzol kimenete jól olvasható.
Plusz kihívás: találj ki olyan nevet és adatokat, amelyekből már sejteni lehet, milyen játék, történet vagy alkalmazás szereplőjéről van szó.Gyors önellenőrzés
1. Milyen típusú változóban tárolnád a „Veszprém” szöveget?
string.2. Mi a különbség a 'A' és az "A" között?
'A' egy char típusú érték; ebben a példában az A karaktert tárolja. "A" egy string, vagyis szöveg.3. Szabályos változónév-e a pont2?
Igen. A változónév tartalmazhat számot, csak nem kezdődhet számmal.
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. Egész számok osztásánál ebben az esetben a tört rész nem marad meg.
Mit tudsz már?
- Tudsz változót létrehozni és kezdőértéket adni neki.
- Ismered a
string,int,double,charésboolalapvető szerepét. - Tudod módosítani egy változó értékét.
- Fel tudod ismerni 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.
- Tudod, hogy az adattípus a számítás eredményére is hatással lehet.
Füzetbe ragasztható összefoglaló 📎
Ha szeretnéd egy oldalon is látni a változókat és adattípusokat, töltsd le ezt az összefoglalót. 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 aConsole.ReadLine() segítségével.



