![]() |
Halte mich eben hier dran :wink: :
Zitat:
Delphi-Quellcode:
und
procedure Test (CONST r : real);
Delphi-Quellcode:
Wie heißt der Vorgänger von Pascal (Wirth) noch ? War es Algol ?
procedure Test (VAR r : real);
|
@Hansa: Jetzt will ich Dich erst einmal bitten nachzudenken ;-) Abgesehen von Deinem ursprünglich gelieferten Beispiel, welches völlig inkorrekt war, hast Du auch weitere Falsch-Aussagen gemacht. Die gravierendste ist jene, die Du immer wieder anbringst:
Zitat:
Delphi-Quellcode:
Also ist dieses Argument schon in einmal nichtig.
function FreeModule(var hLibModule: HINST): BOOL;
function InterlockedIncrement(var Addend: Integer): Integer; stdcall;function GetExitCodeProcess(hProcess: THandle; var lpExitCode: DWORD): BOOL; stdcall; // u.s.w. u.s.f. Ein weiterer Vorteil von Funktionen über Prozeduren ist, deren Rückgabewerte direkt in Berechnungen einbinden zu können. Es besteht nicht der Zwang eine separate Variable zu deklarieren, bevor ich diese nur einmal verwende. Beispiel gefällig? Okay, anhand der Funktionen FileExists und DeleteFile:
Delphi-Quellcode:
Das mal als Beispiel für den Nutzen fon Funktionen. Und das Argument der var-Parameter zieht nicht ;-) Erinnere Dich an den Auszug der Delphi-Grammatik-Regeln. Die geben an, daß die Parameter-Listen Definition für Prozeduren und Funktionen identisch sind. Was in der einen geht, geht auch in der anderen.
// die wohl viel elegantere Lösung via Funktion
// function FileExists(const FileName: string): Boolean; // function DeleteFile(const FileName: string): Boolean; begin if FileExists('C:\Temp\LöschMich.txt') then if not DeleteFile('C:\Temp\LöschMich.txt') then ShowMessage('Die Datei konnte nicht gelöscht werden'); end; // hättest Du es so lieber??? // HYPOTHETISCH // procedure FileExists(const FileName: string; var Result: Boolean); // procedure DeleteFile(const FileName: string; var Success: Boolean); var Status: Boolean; begin FileExists('C:\Temp\LöschMich.txt', Status); if Status then begin DeleteFile('C:\Temp\LöschMich.txt', Status); if not Status then ShowMessage('Die Datei konnte nicht gelöscht werden'); end; end;
Code:
Noch ein weiterer Vortail eine Funktion gegenüber einer Prozedur ist, wenn man nur einen Rückgabewert erwartet, die Geschwindigkeit. Durch die Rückgabe dieses Wertes im (E)AX Register, sind den möglchen Optimierungen durch den Compiler viel mehr Raum gegeben.
[b]Funktionskopf [/b]-> FUNCTION Bezeichner [Formale Parameter] ':' (Einfacher Typ | STRING)
[b]Prozedurkopf [/b]-> PROCEDURE Bezeichner [Formale Parameter] [b]Formale Parameter [/b]-> '(' Formaler Parameter ';'. ')' [b]Formaler Parameter [/b]-> [VAR | CONST | OUT] Parameter [b]Parameter [/b]-> Bezeichnerliste [':' ([ARRAY OF] Einfacher Typ | STRING | DATEI)] -> Bezeichner ':' Einfacher Typ '=' Konstanter Ausdruck Zitat:
Zitat:
Bevor Du jetzt die Diskussion fortsetzt, biite ich Dich, Dir mal den Delphi-Language Guide in die Hand zu nehmen und Dich über die (weiteren) Unterschiede von Prozedure und Funktion zu informieren. ...:cat:... |
ach, wie ist das herrlich. Was liebe ich solche Grundsatzdiskussionen. 8) Könnte fast ein C++ - Forum sein. :mrgreen: Schlimm ist, daß Sakura Recht hat. :lol: Bei Funktionen können auch mehrere VAR Parameter übergeben werden. Und sie können, wie er richtig sagt, direkt für weitere Berechnungen benutzt werden.
Für mich ist letzteres der einzige Grund, Funktionen zu benutzen. Ansonsten ist es mir egal. Compiler-Optimierungen? Da möge mal einer eine Zahl nennen. Wieviel % macht es aus, wenn statt Prozeduren Funktionen oder umgekehrt verwendet werden? |
Zitat:
...:cat:... |
Na also, auch hier hat jeder Recht :lol:, aber eines fehlt noch (insbesondere für Anfänger gefährlich) : Manchmal macht es eher Sinn, einen berechneten Wert in einer Variablen zu speichern, anstatt ihn dauernd neu zu berechnen. Aus Sakuras Millisekunden werden sonst tatsächlich spürbare Wartezeiten. Dies gilt insbesondere für Datenbank-Zugriffe innerhalb einer Funktion.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz