Kezdőoldal » Számítástechnika » Programozás » Mitől függ, hogy egy programny...

Mitől függ, hogy egy programnyelvben függvények, parancsok, vagy más kifejezések vannak?

Figyelt kérdés

Mitől függ, hogy miket használ a programnyelv?


Kb. hasonló feladatot végző dolgokra, mért nem mindegy, hogy függvényt, vagy parancsot, vagy valami mást mondunk?


2023. jan. 26. 19:08
1 2
 1/12 anonim ***** válasza:
90%
Ez a nyelv megalkotóitól, a nyelv "filozófiájától" függ, ez utóbbi miatt nem mindegy. Nem neked, nekik :-)
2023. jan. 26. 19:15
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:
18%
Parancsok egyik programnyelvben sincsenek.
2023. jan. 26. 19:22
Hasznos számodra ez a válasz?
 3/12 anonim ***** válasza:
78%

Az adott programozási nyelv terminológiájától függ, bár parancsoknak tényleg nem szoktuk hívni őket. Régen, Basicben szubrutinnak hívtuk azokat az eljárásokat, amik nem adtak vissza értéket, és függvények azokat, amiket igen. De például C-ben egyáltalán nem használjuk a szubrutint, mert ott nincs ilyen. OOP környezetben az osztályhoz tartozó eljárásokat általában metódusnak hívjuk, de például a bővítőfüggvényeket (már ha támogatja őket az adott nyelv) exetnsion methodnak vagy extension functionnek.

De például egyes nyelvek nem engedik meg, hogy az interfészekben metódus implementáció legyen, más nyelvek engedik, megint más nyelvek pedig szintén megengedik, de akkor már mixinnek hívják őket, nem interfészeknek.

2023. jan. 26. 19:34
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
62%
Milyenre írták.
2023. jan. 26. 19:55
Hasznos számodra ez a válasz?
 5/12 anonim ***** válasza:
81%

"De például C-ben egyáltalán nem használjuk a szubrutint, mert ott nincs ilyen."


Dehogy nincs. Ezek a void tip. függvények.

2023. jan. 27. 00:31
Hasznos számodra ez a válasz?
 6/12 anonim ***** válasza:
31%

#5


Nem, a void típusú függvénynek van visszatérési értéke, ez a void. Ez technikailag más, mint a Basic-féle szubrutin.

2023. jan. 27. 06:04
Hasznos számodra ez a válasz?
 7/12 anonim ***** válasza:
38%

Dehogy más.

A C tervezésekor az egyszerűség volt a szempont, mivel olyan gépen használták, amiben arcpirítóan kevés volt a memória. Valami 4 kWord, 18 bit szószélességen, ha jól emlékszem.

Ezért is olyan a nyelv, amilyen. Sok operátor, kevés, rövid (eredetileg 19 db) kulcsszó. Na és ennek oka az is, hogy az eljárások nem kaptak külön szerkezetet, hanem a függvények visszatérési értékét, ami ugye bármi lehetett, egyszerűen nem használták fel.

Később ezek a függvénynek "álcázott" procedúrák tipizálva lettek és, most jön a csavar, un. void (érvénytelen) tipusú függvényekben kaptak helyet.


A fizikai megvalósítás ennél azért bonyolultabb, de a lényeg ez.

2023. jan. 27. 09:12
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:

#7


A különbséget úgy értem, hogy egy Basic interpreter nem is vizsgálja, hogy volt-e a szubrutinnak visszatérési értéke, mert definíció szerint nem is lehet.

C-ben, ha pl. int-et ad vissza függvényed, az az eax regiszterbe kerül. De ha ezt elfelejted, és írsz egy ilyet:


#include<stdio.h>


int add(int a, int b)

{

__int c = a + b;

}


int main(void)

{

__int res = add(3, 2);

__return 0;

}


Akkor az add függvény visszatérési értéke undefined behavior lesz, míg ha ugyanezt voiddal írod meg, így:


void add(int a, int b)

{

__int c = a + b;

}


Akkor a fordító hibát fog jelezni (hogy a void értékét nem használhatod fel). A fordító vizsgálja a visszatérési értéket, tehát a visszatérési érték megadása vagy nem megadása fontos, akkor is, ha az void. Ilyen értelemben mondom azt, hogy a void függvénynek is van visszatérési értéke, és az void. Csak a nyelv szempontjából, a generált kód szempontjából nincs. A fordító valóban figyelmen kívül hagyja a void függvény eredményét, bár én láttam már olyan ARM-s fordítót, ami void esetén eax-ban visszaadott egy 0-át (pont úgy, mint ha int lenne a visszatérési érték).

De szerintem ha bekapcsolsz egy magasabb optimalizációs szintet (-O2 vagy -O3), akkor a fordító inline függvényként generálja le az add függvényt.

2023. jan. 27. 10:16
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:
71%

Egy nyelvet nem feltétlenül szerencsés valamilyen fordítójának implementációja felől vizsgálni.


Itt a szegedi egyetem progalap c. tárgy anyaga:


[link]


Ezen alábbi szerepel:


void main(){


// void - Ez egy adatot tárolni képtelen típus, többek között eljárásokhoz használatos

int egesz; // Egy egyszavas (esetünkben 32 bites - 4 bájtos) előjeles egész szám

// Műveletek: +, -, *, /, %, ahol a / az egészosztás egészrésze, a % az egészosztás maradéka

char karakter; // Egy egybájtos, előjeles, vagy előjeltelen egész szám. Jól használható szöveges karakterek tárolására is, ascii-kód segítségével.

float valos1; // Egy egyszavas lebegőpontos szám

// Műveletek: +, -, *, /

double valos2; // Annyiban különbözik a float-tól, hogy 8 bájtos

// Logikai és szöveges típus külön nincs, azokat máshogy kell megvalósítani. (Későbbi gyakorlaton)

}


Az általad említett BASIC féle szubrutin és a C nyelv void tipusú függvényei közötti különbség annyi, hogy a BASIC nem pakol a verembe semmiféle visszatérési értéket, míg a C, bár pakol, de nem használja fel.


Tehát, a függvényeket mi célból is írjuk?

Hát hogy megkapjuk a visszatérési értéküket. Na de ha azt fel sem használjuk, akkor mi értelme a dolognak? Hát az, hogy a cél áttevődik a visszatérési értékről a függvény beltartalmára. Annak végrehajtása válik céllá.


A függvények írásának célja a visszatérési érték megszerzése. Aztán, hogy ez miként valósul meg (4*2 vagy 2+2+2+2, vagy 2+2*2), az másodlagos. A hangsúly a visszakapott értéken van.

A procedúrák írásának célja a bennük lévő utasításhalmaz végrehajtása. A hangsúly itt a beltartalom végrehajtásán van.


A lényeget jobban megragadva, a void tip. függvények nem függvények, hanem eljárások.

2023. jan. 27. 10:52
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:
66%

"Az általad említett BASIC féle szubrutin és a C nyelv void tipusú függvényei közötti különbség annyi, hogy a BASIC nem pakol a verembe semmiféle visszatérési értéket, míg a C, bár pakol, de nem használja fel."


Ez alapvetően így is van, és nem is mondom azt, hogy nem így lenne. De a nyelv (és csupán a nyelv, mármint a szabvány C nyelv) szempontjából van különbség, még ha a háttérben ugyanaz történik is. Ha azt mondom neked, hogy "töltsd meg a poharat félig vízzel" vagy azt, hogy "engedj 2dl-t vizet a pohárba", te mindkét ugyanazt fogod csinálni, csak az utasítás volt más.

Ilyen értelemben más a void-ot visszaadó függvény és a szubrutin, én csak ezt akartam mondani.

2023. jan. 27. 11:04
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!