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.
C#-ot tanuló diák laptop előtt, mellette cica és különböző programozási adatok

A lecke végére

  • meg tudod magyarázni, mire használunk változókat;
  • létre tudsz hozni string, int, double, char és bool tí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 a Console.WriteLine() utasítást.

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. 😄
PDF letöltése →
1

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.
Első változónkC#
string nev = "Anna";

Console.WriteLine(nev);
A program kimenete:
KimenetConsole
Anna
stringMegmondja, 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!

Mit jelent ebben a sorban a 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

Öt gyakori adattípus

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.
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 C# forráskódban a tizedesjel pont: 4.5, nem 4,5.
char

Egyetlen karakter

char kezdoBetu = 'A';
char jel = '@';
A 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'.
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ő 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ó értéke megváltozhat

A változó egyik legfontosabb tulajdonsága, hogy a benne tárolt értéket később felülírhatjuk.
PéldaC#
string nev = "Anna";

Console.WriteLine(nev);

nev = "Bori";

Console.WriteLine(nev);
A kimenet:
Anna
Bori
A 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ő 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 → 15

Mit í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

Plusz: a char és a karakterkódok

A 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 kimenet:
A
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

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. A x lehet szabályos név, de a pontszam sokkal többet mond az olvasónak.
VáltozónévSzabályos?Miért?
pontszamIgenBetűvel kezdődik, nincs benne szóköz vagy tiltott jel.
pont1IgenSzám szerepelhet a névben, csak nem kezdődhet vele.
_pontIgenAz aláhúzás megengedett, bár kezdőként általában beszédesebb neveket használunk.
2atlagNemSzámmal kezdődik.
feladat keszNemSzóköz van benne.
pont-szamNemA 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

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. A számítás eredményét kiírtuk, de nem tároltuk vissza.

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 nem kell még kívülről tudnod, de hamar találkozni fogsz vele. Ugyanez rövidebben is leírható:
pontszam += 5;
Ez ugyanazt jelenti, mint:
pontszam = pontszam + 5;
A +=, -=, *= é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 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.

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. A 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);
A kimenet 2, nem 2.5. Mivel két 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);
Itt már a számérték 2.5, mert a műveletben 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);
Most 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.

Ö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);
Írd fel előre a három kimenetet, majd ellenőrizd futtatással.
Megoldás megmutatása
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 úgy, hogy 2.5 legyen?
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

Készíts egy saját karakter- vagy játékosprofilt legalább öt változóval. Találd ki a karakter nevét, rangját, pontszámát és állapotát úgy, mintha egy játék vagy történet szereplőjét építenéd fel. A programodban legyen:
  • 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

Válaszolj először fejben. A megoldást csak utána nyisd le.
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 és bool alapvető 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. 😄
PDF letöltése →

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.
Vissza a C# tanfolyamhoz →