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ó.

  • kb. 45 perc
  • kezdő szint
  • PDF-összefoglalóval
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;
  • é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.

Első változónkC#
string nev = "Anna";
Console.WriteLine(nev);
KimenetKonzol
Anna
stringMegmondja, milyen típusú adatot szeretnénk tárolni. A string szöveget jelent.
nevA változó neve. Később ezzel a névvel hivatkozunk a tárolt értékre.
=Értéket adunk a változónak.
"Anna"A változó kezdőértéke. Az idézőjelek jelzik, hogy szövegről van szó.

Ké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.

PéldaC#
string nev = "Anna";
Console.WriteLine(nev);

nev = "Bori";
Console.WriteLine(nev);
KimenetKonzol
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ő 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?

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.

Szám értelmezése karakterkéntC#
int kod = 65;
char betu = (char)kod;
Console.WriteLine(betu);
KimenetKonzol
A

A (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 (új lapon nyílik) · Unicode – Basic Latin tábla (új lapon nyílik)

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.

Szabályos és szabálytalan változónevek
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 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 (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); // 2

A 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,5

Itt 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.

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);

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!

Hibás kódC#
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,5

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, mintha egy játék vagy történet szereplőjét építenéd fel. A programodban legyen:

  • legalább egy string, int és double, valamint egy char és 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 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 és bool szerepé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.