IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
expoox
Tvůrce
Avatar
expoox:22.3.2013 15:20

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
Tvůrce
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
Tvůrce
Avatar
expoox:22.3.2013 16:37

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 Hartinger
Vlastník
Avatar
Odpovídá na expoox
David Hartinger:22.3.2013 19:36

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
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:22.3.2013 19:40

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
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
expoox:22.3.2013 21:52

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
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na expoox
Lukáš Hruda:23.3.2013 9:48

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
Tvůrce
Avatar
expoox:23.3.2013 10:04

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
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na expoox
Lukáš Hruda:23.3.2013 10:14

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 Hartinger
Vlastník
Avatar
Odpovídá na expoox
David Hartinger:23.3.2013 10:15

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
New kid back on the block with a R.I.P
Avatar
expoox
Tvůrce
Avatar
expoox:23.3.2013 10:17

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 Hartinger
Vlastník
Avatar
Odpovídá na expoox
David Hartinger:23.3.2013 10:17

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
New kid back on the block with a R.I.P
Avatar
expoox
Tvůrce
Avatar
expoox:23.3.2013 10:20

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
Tvůrce
Avatar
Odpovídá na expoox
Kit:23.3.2013 10:22

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
Tvůrce
Avatar
expoox:23.3.2013 10:23

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

 
Nahoru Odpovědět
23.3.2013 10:23
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na expoox
David Hartinger:23.3.2013 10:24

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
23.3.2013 10:24
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:23.3.2013 10:24

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
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Kit:23.3.2013 10:26

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
Tvůrce
Avatar
expoox:23.3.2013 10:29

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
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na expoox
Lukáš Hruda:23.3.2013 10:31

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.