Jak zrobić, żeby do funkcji/procedury można było podać różną ilość parametrów, to znaczy żeby zdefiniować kilka parametrów opcjonlanych. Takie coś jest w funkcji Concat, Inc, Dec... .
Proszę o szybką pomoc i z góry dziękuję!
Jak zrobić, żeby do funkcji/procedury można było podać różną ilość parametrów, to znaczy żeby zdefiniować kilka parametrów opcjonlanych. Takie coś jest w funkcji Concat, Inc, Dec... .
Proszę o szybką pomoc i z góry dziękuję!
Parametry domyślne....
<font color="blue">procedure NowaGra(ImieGracza : String; NumerGracza : Integer = 1);</span>
W tym przypadku nie trzeba podawać numeru gracza, jeśli się tak zrobi - będzie wartość ta równa 1.
W sumie może to wystarczy, ale to nie są parametry opcjonalne.
No cóż jak mi się to nie spodoba to przylecę DETOX do ciebie z płaczem. ;-)
DZIĘKI!
Możesz też zrobić tak:
procedure NowaGra(ImieGracza : String; NumerGracza : Integer); overload;
procedure NowaGra(ImieGracza : String; overload;
procedure NowaGra(NumerGracza : Integer); overload;
procedure NowaGra(NumerGracza : Integer; CosTamJeszcze: Typ); overload;
itd... :)
to nie są parametry opcjonalne.
A co to jest, jak nie parametry opcjonalne???
Odpada! Co to za paskudztwo?
Musi być jakiś elegancki sposób! Pisze o tym w pomocy, ale "moja angielski być słabe". Pod hasłem Parameters, opisuje optional parameters.
pq: fachowo to jest to Default Value, a to nie jest Optional Value.
http://4programmers.net/view.html?id=221 <- parametry domyślne
http://4programmers.net/view.html?id=150 <- przeciążanie funkcji
Funkcji takich jak w printf czy scanf z C nie można stworzyć, ze względu na sposób przekazywania parametrów przez stos w Delphi od lewej do prawej.
Jeżeli jednak zależy nam na przekazaniu stałych do procedury o dowolnej liczbie parametrów (i typów) tak jak np. w windowsowej funkcji wsprintf to możemy skorzystać z tablic stałych:
procedure Test(A: array of const);
begin
ShowMessage(A[0].VChar+IntToStr(A[2].VInteger));
A[1].VInteger := 2;
end;
var
q: Integer;
begin
q := 0;
Test(['a', q, 3]);
ShowMessage(IntToStr(q)); //q dalej 0
end;
Oczywiście odczytując w procedurze Test musimy wiedzieć ile jest parametrów w tablicy i jakiego typu.
Przekazywanie zmiennych nie jest możliwe. Możemy jednak skorzystać ze wskaźników i otrzymać z powrotem wartości w zmiennych:
procedure Test(A: array of const);
begin
ShowMessage(A[0].VChar+IntToStr(A[2].VInteger));
Integer(A[1].VPointer^) := 2;
end;
var
q: Integer;
begin
q := 0;
Test(['a', @q, 3]);
ShowMessage(IntToStr(q)); //teraz q = 2
end;
Przepraszam. Jak to się nie da? Ale ja podałem przykład już 3 takich funkcji! I działają! A jedna to ma nawet nieskończoną ilość parametrów (Concat) Więc jakto się nie da???????
Wszystkie te funkcje są umieszczone w module System, który jest integralną częścią kompilatora. Ty ich napisać nie możesz.
No i znów wychodzi największa bolączka Pascala - moduł System którego za cholerę się nie wywali (i nie zrobi podobnego nawet za dwie cholery)... Właśnie dla tego piszę pseudopascalowy kompilator pozbawiony tej wady :). Od razu uspokoję osoby przerażone słowami "piszę kompilator" - ja wiem, jak się za to zabrać, nie będę zadawać durnych pytań.
Właśnie dla tego piszę pseudopascalowy kompilator pozbawiony tej wady :).
Ale wiesz, że będziesz musiał rozszerzyć gramatykę pascala m. in. o właśnie te parametry opcjonalne?
To nie był przypadek, że takie właśnie funkcje umieszczono wewnątrz kompilatora:
A tak w ogóle to powodzenia dla kolegi po fachu (ja też pisze... a raczej próbuję).