C# programozasi nyelvben valaki el tudna peldakkal, erthetoen mondani, hogy tenyleg mikor van void, es mikor nincs?
Képzeld el azt az esetet, amikor pl. fogat mosol. Előveszed a pohárkádat, nyomsz fogkrémet a kefédre, és megmosod a fogad. Ez a műveletsor nem képez a későbbiekben felhasználható eredményt. Ellenben az, hogy kiszámolod egy szám négyzetét például, az képez a későbbiekben is felhasználható eredményt.
Az alprogramoknak/szubrutinoknak két fajtája van tehát, ami képez eredményt, és ami nem. Ami képez eredményt, azt függvénynek nevezik, míg azokat, amik nem képeznek eredményt, eljárásoknak.
Hogy még megfoghatóbb legyen a dolog: az eljárás leírja, hogyan végezz el egy cselekvést, például hogyan moss fogat. A függvény pedig leírja, hogyan számolj ki valamit, például a szám négyzetét.
Azonban a számítógépnek le kell írni, hogy egy függvény milyen típusú eredményt képez. Egy egész szám négyzetének a kiszámítása egy újabb egész számot fog képezni, így ezt a példában az int kulcsszóval kell megilletni:
int Negyzet(int x) {
return x * x;
}
Egyes programozási nyelvek másként írják le az eljárásokat, mint a függvényeket (lásd a lenti Pascal-os példát), de a C-szerű nyelvek megoldják annyiban, hogy az eredmény típusa helyett írsz egy void-ot:
void Fogmosas() {
poharat_elovesz();
fogkrem_nyomasa_a_kefere();
//stb.
}
Míg mondjuk Pascal-ban így néz ki a kettő:
procedure Fogmosas;
begin
poharat_elovesz;
fogkrem_nyomasa_a_kefere;
end;
function Negyzet(x: integer) : integer;
begin
Result = x * x;
end;
Koszonom a valaszt!
Akkor ezt ugy ertsem, hogy ha a megadott parameterekbol egy uj, toluk kulonbozo eredmeny szuletik pl egy szamitas hatasara akkor ott van visszateresi ertek? Tehat oda nem kell majd void.
Nem feltétlen kell ahhoz paraméter, hogy legyen egy eredményed. És ha van is paramétered, egyáltalán nem biztos, hogy a velük elvégzett művelet képez eredményt. Paraméterek csak azért vannak, hogy a hívás helyén értéket adj nekik. Két példa:
1)
fogmosás(MIVEL):
...vizet töltesz a pohárba
...MIVEL-t nyomsz a fogkefédre
...fogat mosol
fogmosás(fogkrém)
fogmosás(cipőbox)
Van paraméter, a fogmosás műveletsor mégsem képzett új eredményt. Először fogkrémmel mosol fogat, a második alkalommal meg cipőbox-szal.
2)
a_32_bites_egész_számok_összege():
...a = 2^-32
...b = 2^32
...eredmény = 0
...ciklus a-tól b-ig, i = aktuális_érték:
......eredmény = eredmény + i
...visszatérés(eredmény)
Itt még paramétert sem kapott a függvény, mégis képzett eredményt.
void olyan esetben mikor az adott függvény nem tér vissza semmivel. Azaz az értékét nem tudod beletenni egy változóba.
"int x = fgv();" erre hibát ír, mert void
amennyiben int vagy tökre más, akkor már mehet:
"int x = fgv();"
természetesen a void visszatérési függvény is rendelkezhet return parancsal, de akkor annak nem szabad értéket adni. Továbbá ha return talál, akkor ott befejezi a függvény futását, és kilép belőle
int vagy más esetén: "return X;"
void esetén: "return;"
Sok idiótaságot sikerült itt összehordani, de a lényeg tömören:
Függvény (nem void): ami kiszámol valamit, pl összead, szoroz, négyzetreemel, derivál, determinánst számol, leggyakorobb magánhangzót határoz meg, eldönti egy számról hogy prím-e, satöbbi
Eljárás (void): ami elvégez valami nem egy konkrét eredménnyel járó feladatot, pl megnyit egy filet, kiír valamit, letörli a képernyőt
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!