Diskuze: Nepovinny parameter funkcie

Ostatní jazyky Delphi Delphi (Pascal) Nepovinny parameter funkcie

Avatar
expoox
Redaktor
Avatar
expoox:

Zdravim, neviete mi poradit ako viem zrobit nepovinny paramater pre funkciu v lazaruse(delphi) ? Mam na mysli nieco ao je napriklad funkcia Inc() resp. Dec() , moze mat jeden alebo dva parametre, ako to docielit? Napadlo ma testovat druhu premennu vo funkcii ale to je blbost kedze mi to ani nezkompiluje ak nieje vlozeny sravny pocet parametrov, skusal som aj googlit, tiez to velmi nepomohlo, taktiez ma napadlo skusit skocit neak z tej funkcie Inc priamo do kniznice kde je deklarovana a pozriet si zdrojak ale neprisiel som na to ako ...
Dakujem za pomoc

 
Odpovědět 22.3.2013 15:20
Avatar
Kit
Redaktor
Avatar
Nahoru Odpovědět 22.3.2013 15:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
expoox
Redaktor
Avatar
expoox:

super, dakujem velmi pekne, len by ma este zaujimalo preco prave overload (pretazenie) ? co to ma s pretazenim ?

 
Nahoru Odpovědět 22.3.2013 16:37
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na expoox
David Čápka:

Tomu se v OOP tak říká, metoda je přetížená když existuje více variant parametrů se kterými se volá.

Nahoru Odpovědět 22.3.2013 19:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Lukáš Hruda (Luckin):

Myslím že expoox měl spíše na mysli implicitní parametry než přetížení funkce.

 
Nahoru Odpovědět 22.3.2013 19:40
Avatar
expoox
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
expoox:

no neviem aky je medzi tym rozdiel... ale ked som si vyskusal to pretazenie tak to robi zatial to co som mal na mysli

 
Nahoru Odpovědět 22.3.2013 21:52
Avatar
Odpovídá na expoox
Lukáš Hruda (Luckin):

Přetížení je že uděláš dvě různý funkce se stejnym názvem, když pak tu funkci voláš, kompilátor podle předaných parametrů pozná kterou z nich má použít. Pro implicitní parametry ti stačí jedna funkce, přičemž u několika posledních parametrů můžeš určit jejich implicitní hodnotu a tyhle parametry pak nemusíš dosazovat při volání, kompilátor za ně dosadí tu implicitní hodnotu.
http://www.programmersheaven.com/…-parameters/
Delphi by to mělo umět.

 
Nahoru Odpovědět 23.3.2013 9:48
Avatar
expoox
Redaktor
Avatar
expoox:

No tak toto mi nejde do hlavy, podľa toho čo píšeš a podľa toho čo som si teraz otestoval tak toto:

function plus(a:integer; b:integer=1):integer;
begin
  result:=a+b;
end;

funguje tak isto ako toto:

function plus(a:integer; b:integer=1):integer; overload;
begin
  result:=a+b;
end;

ak so tom správne pochopil tak len s tým rozdielom že preťaženie je pamäťovo náročnejšie... teda mi logicky vychádza jedna otázka, aký zmysel ma overload? má neakú výhodu oproti tomu čo hovoríš ?

Editováno 23.3.2013 10:05
 
Nahoru Odpovědět 23.3.2013 10:04
Avatar
Odpovídá na expoox
Lukáš Hruda (Luckin):

Pokud chceš aby ty funkce dělaly něco jinýho, požuiješ přetížení (overload). Pokud chceš aby dělaly to samý, jenom si nemusel dosazovat některý parametry, použiješ implicitní parametry. Přece nebudeš tu funkci celou psát podruhý.

 
Nahoru Odpovědět 23.3.2013 10:14
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na expoox
David Čápka:

Při overload si můžeš definovat úplně jiné parametry, při implicitní hodnotě máš stále ty samé, jen některé nemusíš zadat.

Nahoru Odpovědět 23.3.2013 10:15
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
expoox
Redaktor
Avatar
expoox:

ale ako mám potom cez ten overload napísať do funkcie aby raz robila niečo a druhý raz niečo iné?

 
Nahoru Odpovědět 23.3.2013 10:17
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na expoox
David Čápka:

Mluvil jsi o funkci inc. Představ si, že potřebuješ, aby uměla inkrementovat i desetinná čísla. To jinak než overloadem neuděláš.

Nahoru Odpovědět 23.3.2013 10:17
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
expoox
Redaktor
Avatar
expoox:

to som už pochopil, len ako to zapísať taký čas ?

function plus(a:integer; b:integer=1):integer; :real; overload;
 begin
   result:=a+b;
 end;

tak ? alebo napísať dve funkcie s rovnakým názvom a iným typom ?

 
Nahoru Odpovědět 23.3.2013 10:20
Avatar
Kit
Redaktor
Avatar
Odpovídá na expoox
Kit:

Dvě funkce se stejným názvem a alespoň jedním odlišným parametrem.

Však to máš v tom návodu, na který jsem ti poslal odkaz.

Editováno 23.3.2013 10:23
Nahoru Odpovědět 23.3.2013 10:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
expoox
Redaktor
Avatar
expoox:

ok, to som potreboval vedieť, Ďakujem za pomoc

 
Nahoru Odpovědět 23.3.2013 10:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na expoox
David Čápka:

Proč fce co sčítá 2 integery vrací real? Takhle to bude:

function plus(a:integer; b:integer):integer; overload;
  begin
    result:=a+b;
  end;

function plus(a:real; b:real):real; overload;
  begin
    result:=a+b;
  end;

Snad se to takhle přeloží, Pascal jsem neviděl už několik let a jsem za to rád.

Nahoru Odpovědět  +2 23.3.2013 10:24
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Lukáš Hruda (Luckin):

Mohl by, pomocí genericity... nevim ale jestli se v delphi dá udělat generická funkce, pokud ne musel by udělat celou třídu.

 
Nahoru Odpovědět 23.3.2013 10:24
Avatar
Kit
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Kit:

sdraco mi kdysi napsal, že extrémně přetěžuji objekty. Jsem žabař...

Nahoru Odpovědět 23.3.2013 10:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
expoox
Redaktor
Avatar
expoox:

Do takých extrémov ako genericita už radčej nechodme, Delphi ma osobne nezujíma, študujem ho len kôli škole. Potom neskôr keď sa k tomu dopracujem tak si to naštudujem pre Cčko ale zatiaľ radčej nie :)

 
Nahoru Odpovědět 23.3.2013 10:29
Avatar
Odpovídá na expoox
Lukáš Hruda (Luckin):

Genericita je skvělá věc, pokud jí jazyk dostatečně podporuje.

 
Nahoru Odpovědět 23.3.2013 10:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 20 zpráv z 20.