Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Function/Procedure -Deklaration ?! (https://www.delphipraxis.net/20535-function-procedure-deklaration.html)

Pseudemys Nelsoni 19. Apr 2004 17:23

Re: Function/Procedure -Deklaration ?!
 
@fauxx

Zitat:

Das ist mir schon klar. Aber wenn man jetzt nicht will dass die übergebene Variable geändert wird schreibt man doch einfach kein var davor. Wieso benötigt mann dann nocht const.
ganz einfach, wenn du weder var noch const angibst, wird eine temporäre extravariable angelegt. wenn du var/const benutzt wird die variable die du als parameter übergeben hast benutzt.

Luckie 19. Apr 2004 22:43

Re: Function/Procedure -Deklaration ?!
 
Eine Kombination von const und var macht keinen Sinn. Ich weiß noch nicht mal, ob das der Compiler überhaupt akzeptiert. Mir const sagst du ihm der Parameter wird in der Prozedur nicht veränder und mit var sagst du ihm wieder, er soll den Parameter verändern. :?

Hansa 19. Apr 2004 23:19

Re: Function/Procedure -Deklaration ?!
 
Das ist elementar. Sieh Dir das an (und ausprobieren !) :

Delphi-Quellcode:
procedure test (OHNE/CONST/VAR a : integer);
begin
  a := a + 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var b : integer;
begin
  b := 1;
  test (b);
  showmessage (IntToStr (b));
end;
Const bringt eine Konstante. Keine Änderung/Rückgabewert möglich. OHNE bringt in der Prozedur den Parameter unter, der innerhalb als Variable benutzt werden kann. Aber immer noch kein Rückgabewert. Nach außen nicht sichtbar. 8) VAR schließlich liefert den Wert auch zurück.

Luckie 19. Apr 2004 23:32

Re: Function/Procedure -Deklaration ?!
 
Stichworte wären auch by reference und by value. by refernece heißt, es wird eine Speicherstelle als Parameter übergeben. Wird in der Prozedur der Wert dieser Speicherstelle verändert, bleibt diese Änderung nach verlassen der Prozedur erhalten. Von "zurückgeben" kann man, wenn man es genau nimmt, nicht sprechen. by value bedeutet, dass eine Kopie des Wertes als Parameter an die Prozedur übergeben wird. Und wenn ich die Kopie ändere, hat dies logischerweise keinen Einfluss auf das Original.

Hansa 19. Apr 2004 23:41

Re: Function/Procedure -Deklaration ?!
 
soweit ist das in der Theorie schon richtig. Den Const Parameter habe ich noch nie gebraucht. Im Prinzip reicht Wert (OHNE) und VAR - Parameter. Den CONST kann man mit einer lokalen Variablen selber bauen, sofern der Wert (Input bzw.OHNE Parameter) direkt der lokalen Variablen zugewiesen wird. Der VAR - Prameter liefert den dann. Wie Luckie sagt, sieht das im Speicher dann eben so aus. 8)

Matze 20. Apr 2004 11:00

Re: Function/Procedure -Deklaration ?!
 
Zitat:

Zitat von Luckie
Stichworte wären auch by reference und by value ...

Hab ich doch auch gesagt, was das mit der Speicheradresse angeht. ;)

Luckie 20. Apr 2004 11:15

Re: Function/Procedure -Deklaration ?!
 
Aber du hast die damit verbundenen Begriffe nicht genannt, was ich noch mal nachholen wollte.

sonic 20. Apr 2004 11:23

Re: Function/Procedure -Deklaration ?!
 
Hi Leute,

Soweit ich weiß, ist der Aufruf mit const schneller, da der Compiler nur den Wert übergibt, ohne die Möglichkeit diesen zu ändern. Er legt also auch keine temporäre Lokale Variable an...

Könnte man vielleicht ausmessen mit GetTickCount, und ein paar 1000 Routinenaufrufen...

Wenn jemand Lust und Zeit hat...

Mfg Mike.

Matze 20. Apr 2004 11:33

Re: Function/Procedure -Deklaration ?!
 
Ob das merklich schneller ist bezweifle ich. :gruebel:

Auf jeden Fall benötigt es weniger Speicherplatz...

Muetze1 20. Apr 2004 11:36

Re: Function/Procedure -Deklaration ?!
 
Moin!

Zitat:

Zitat von Matze
Auf jeden Fall benötigt es weniger Speicherplatz...

In wie fern denn das? Wenn du ein VAR hast, dann übergibt er nur einen Pointer, also 4 Byte. Wenn du einen Const hast, dann übergibt er die Parameter auf Stack direkt - dabei aber folgende Regeln:

1. Werte die eine Grösse < 4 Bytes haben, werden trotzdem als DWORD gepusht - wegen dem alignment
2. Werte die die grösser als 4 Bytes sind, werden als Zeiger übergeben (Referenz) und somit sind sie auch nur 4 Bytes gross.

Daher: Wie sollte das weniger Speicherplatz brauchen?

Ob nun Const oder Var - er muss so oder so bei einem Element mit einer Grösse > 4 Bytes einen Zeiger / Referenz auf dieses übergeben, somit ändert sich da nix dran.

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz