Autor |
Beitrag |
bf109g.01
      
Beiträge: 84
|
Verfasst: Di 27.04.10 13:41
Hallo, ich habe folgende Frage:
Ich habe eine wenig lange Prozedur, deren einzelne Teile sich gut als functions auslagern lassen würden.
Aus diesem:
Delphi-Quelltext 1: 2: 3: 4:
| procedure XY; begin ... end; |
Will ich dieses machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function YZ; begin ... end;
procedure XY; begin ... function YZ; end; |
Da die prozedure aber so lang ist, würd ich die function gern in der prozedur integrieren, habe sowas nämlich iwann schon mal gesehen, glaub ich jedenfalls:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure XY;
function YZ; begin ... end;
begin ... end; |
Ist das so möglich? Bzw. wie muss ichs ändern, damit es geht?
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 27.04.10 13:45
Probier es doch einfach mal aus. Dann wirst Du feststellen, dass es so funktioniert.
Aber nur, wenn Du die Funktion auch mit einem Rückgabetyp definierst.
Z.B. so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TuWas(); function GibWasZurueck : Integer; begin result := 42; end; begin ShowMessage(IntToStr(GibWasZurueck)); end; |
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.04.10 14:21
Nersgatt hat folgendes geschrieben : | Probier es doch einfach mal aus. |
Das wird mir ewig ein Rätsel bleiben, warum die Leute das nicht einfach mal schnell ausprobieren, statt dessen hier posten und wahrscheinlich noch ewig auf eine Antwort warten. Gibt es für dieses Verhalten irgendeine logische Erklärung?
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Di 27.04.10 14:30
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 27.04.10 15:27
Jup, und echte Programmierer programmieren mit 0 und 1. 
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 28.04.10 10:03
Das war ehrlich gesagt eine ernst gemeinte Frage.
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Mi 28.04.10 11:11
Hi,
ich kann mir das, auch wenn es oben natürlich sehr überspitzt dargestellt habe, tatsächlich nur mit der Angst davor erklären, etwas falsch zu machen. Aber ich denke die ist nur deshalb so groß, weil bf109g.01 noch sehr neu in der Materie ist. Mit mehr Erfahrung wächst auch die Fähigkeit Fehlermeldungen zu verstehen und somit schrumpft die Angst vor ihnen.
critter
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 28.04.10 11:49
Angst vor Fehlermeldungen? Na hoffentlich geht bei ihm im Auto nie die Ölstandswarnleuchte an, er würde wahrscheinlich in absolute Panik verfallen. 
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Mi 28.04.10 13:17
Hi,
Luckie hat folgendes geschrieben : | Angst vor Fehlermeldungen? Na hoffentlich geht bei ihm im Auto nie die Ölstandswarnleuchte an, er würde wahrscheinlich in absolute Panik verfallen.  |
naja ich habe durchaus schon Panische Anrufe bekommen, weil in irgendwelchen Autos irgendwelche Lämpchen plötzlich leuchteten und das, obwohl ich mit Autos nicht zu tun habe. Da überrasche es mich dann auch nicht wirklich, das Menschen ein " [DCC Fehler] Unit1.pas(27): E2029 Anweisung erwartet, aber 'PROCEDURE' gefunden" beängstigend finden. Für dich und mich ist die Meldung absolut klar und eindeutig, wenn ich sie aber meiner Nichte vorlegen würde käme sicher ein "Hä, was will der? was ist denn eine Anweisung?" oder ähnliches.
Menschen sind halt unterschiedlich aber vielleicht liege ich mit meiner Angst-Theorie ja auch Falsch und letztendlich ist ein Forum ja auch zum Fragen da.
critter
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Mi 28.04.10 13:23
Ich glaube, dass das ganze Syndrom mit Angst nichts zu tun hat. Das ist schlicht und ergreifend Faulheit. Warum soll ich mir Gedanken machen, ich frage einfach und sammele dann die Antworten ein. Sich per trial and error einer Lösung und Verständnis derer zu nähern, erfordert Konzentration und den Willen dazu. Hier gibt es hunderte Fragen im Forum, die sich mit einer geringen eigenen Anstrengung problemlos hätten beantworten lassen, aber warum, wenn es andere bereitwillig machen? Nichts gegen Hinweise und Hilfestellungen, aber selbst die werden meistens nicht als Lösung akzeptiert oder umgesetzt. Keiner wird mit Wissen über eine Programmiersprache geboren, aber lernen wollen muß man's schon.
Gruß delphi10
Das ist meine persönliche Meinung zu diesem Thema, ohne auf eine bestimmte Person oder Posting zu reflektieren.
_________________ Salus populi suprema lex esto
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 28.04.10 13:37
Kommt mal bitte zum Thema zurück, und das ist nicht Angst, Syndrome, Symptome oder die generelle Einstellung eines Fragenden zur Programmierung.
Die Frage war, wie man das abändern kann, damit es läuft.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function YZ; begin ... end;
procedure XY; begin ... function YZ; end; |
Dazu wurde bereits gesagt, dass eine Funktion YZ einen Rückgabewert haben muss, ansonsten heißt sowas in Delphi procedure. Und wenn man eine Prozedur oder Funktion aufrufen will, dann macht man das ohne das Schlüsselwort procedure oder function. Eine mögliche Antwort wäre also:
Das kann man so abändern, damit es läuft:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure YZ; begin ... end;
procedure XY; begin ... YZ; end; |
Die andere Variante mit lokalen Prozeduren klappt zwar auch, finde ich aber bei längeren Funktionen/Prozeduren sehr unschön. Zwischen Prozedur-Kopf und dem eigentlichen "begin" sollte meiner Meinung nach nicht sehr viel anderes stehen. 
_________________ We are, we were and will not be.
|
|
JoelH
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: Mi 28.04.10 14:36
_________________ mfg. Joel
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Mi 28.04.10 14:37
Hallo,
Gausi hat folgendes geschrieben : | Die andere Variante mit lokalen Prozeduren klappt zwar auch, finde ich aber bei längeren Funktionen/Prozeduren sehr unschön. Zwischen Prozedur-Kopf und dem eigentlichen "begin" sollte meiner Meinung nach nicht sehr viel anderes stehen.  |
womit wir aber wieder bei Geschmacksfragen sind. Ich finde genesstete Prozeduren und Funktionen Extrem Praktisch, besonders, wenn sie Teile langer Methoden größerer Klassen sind. Sie helfen sehr die Übersicht zu bewahren.
Nehmen wir einmal die folgende Klasse an:
Delphi-Quelltext 1: 2: 3: 4: 5:
| tRechneWas = class public Function Berechnung1 : Integer; Function Berechnung2 : Real; End; |
Nehmen wir Ferner an, dass Beide Berechnungen wiederum zwei Unterberechnungen, welche nur für diese Berechnungen Verwendung finden, benötigen. Dann könnte man diesen jeweils eine Eigene Funktion auf der Hauptebene spendieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| tRechneWas = class protected Function UnterBerechnung1a : integer; Function UnterBerechnung1b : integer; Function UnterBerechnung2a : real; Function UnterBerechnung2b : real; public Function Berechnung1 : integer; Function Berechnung2 : real; End; |
oder sie eben in den Berechnungen Nisten lassen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| Function tRechneWas.Berechnung1 : integer; Function UnterBerechnung1a : integer; Begin End; Function UnterBerechnung1b : integer; Begin End; Begin Result := UnterBerechnung1b Div UnterBerechnung1a + UnterBerechnung1b MOD 3; End; Function tRechneWas.Berechnung2 : real; Function UnterBerechnung2a : real; Begin End; Function UnterBerechnung2b : real; Begin End; Begin Result := UnterBerechnung2a / UnterBerechnung2b; End; |
Das mag, wenn man die Berechnungsfunktion ansieht unübersichtlicher wirken (ich finde es eigentlich recht übersichtlich weil alle Berechnungen die mit diesem vorgang zu tun haben an einer Stelle stehen) aber dafür Vermüllt es die Klasse nicht. Berechnung1 & 2 bleiben eine BlakBox und alles was sie an Universalwerkzeug benötigen bleibt in ihnen verschlossen. Ich finde das sehr Praktisch und sauber. Deshalb möchte ich dir zwar deine Meinung lassen aber dem Satz, das zwischen dem Prozedur-Kopf und dem Begin möglichst wenig stehen soll entschieden widersprechen. Ich finde nur lokal genutzte Funktionen gehören genau dort hin.
critter
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
bf109g.01 
      
Beiträge: 84
|
Verfasst: Fr 07.05.10 11:07
Critter hat folgendes geschrieben : | Deshalb möchte ich dir zwar deine Meinung lassen aber dem Satz, das zwischen dem Prozedur-Kopf und dem Begin möglichst wenig stehen soll entschieden widersprechen. Ich finde nur lokal genutzte Funktionen gehören genau dort hin.
critter |
Danke, das war die hilfreiche Art von Antwort auf die ich gewartet habe.
Danke auch an die Korintenkacker, die sich lieber über Psychologie und Autos unterhalten.
Und die "Angst" ist lediglich Erfahrung:
01. man hat eine Idee
02. man probiert's aus
03. es klappt nicht
04. man weiß nicht warum
05. man bastelt, bis man weiß, was schief läuft
06. man weiß nicht, wie man das gefundene Problem lösen soll
07. man probiert was anderes
08. es klappt nicht
09. man hat eine Ahnung warum
10. man hat keine Lust mehr
11. man fragt jemanden, der es weiß
Ich weiß nicht, was daran so verwerflich oder ängstlich ist, Schritt 02-10 auszusparen. Ich halte das für zeiteffizient.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Fr 07.05.10 12:03
bf109g.01 hat folgendes geschrieben : | Ich halte das für zeiteffizient. |
Man könnte aber auch sagen "zu Faul die Delphi Hilfe aufzurufen"!
Genau diese Beispiele, stehen auch in der DH drin
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 07.05.10 12:53
Da das Problem jetzt ja gelöst ist, gebe ich auch mal meinen Senf dazu ab.
Wenn mein Azubi etwas programmieren soll, darf und soll er gerne neue Dinge ausprobieren. Klappt es nicht sofort, darf er gerne mal ein bisschen Zeit investieren. Er soll sie aber nicht verplempern! Klappt es nach wenigen Versuchen nicht, hat er gefälligst Jemanden zu fragen, der was davon versteht.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Fr 07.05.10 12:59
jasocul hat folgendes geschrieben : | ..... Klappt es nach wenigen Versuchen nicht, hat er gefälligst Jemanden zu fragen, der was davon versteht. |
Verwechselst Du da was? Arbeit und Privat!
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
JoelH
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: Fr 07.05.10 15:47
_________________ mfg. Joel
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Fr 07.05.10 16:51
Es geht ja eigentlich darum, das er anscheinend lieber andere arbeiten lässt anstatt seine idee:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure XY; function YZ; begin ... end;
begin ... end; |
einfach mal zu kompilieren und auszuführen. Denn sie hätte ja funktioniert.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Fr 07.05.10 16:51
JoelH hat folgendes geschrieben : | Was ist der Unterschied? Delphi ist Delphi..... |
Eben nicht! Wenn du für eine Firma arbeitest geht es um Zeit und Geld!
Wenn du zu Hause damit Arbeitest(Privat), dann geht es darum um zu lernen. ! Selbstständig was zu machen!
Wenn man nun, wegen jeder Kleinigkeit um Hilfe anderer ruft, wie will man dann irgendwann selbstständig auf Lösungen kommen die im Prinzip schon gegeben sind!!! Selbstständiges Suchen in der DH, im Forum usw.
Und wenn keiner hilft!?, na und, lass ich die Arbeit liegen.
Habs ja nie gelernt selbstständig zu sein! Hatte ja immer jemand der mir Hilfe gab!
elundril hat folgendes geschrieben : | einfach mal zu kompilieren und auszuführen. Denn sie hätte ja funktioniert. |
Genau das meine ich, selbstständig was machen, riskieren!!!
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
|