Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - [Syntax] function in procedure
bf109g.01 - Di 27.04.10 13:41
Titel: [Syntax] function in procedure
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 - Di 27.04.10 13:45
Probier es doch einfach mal aus. Dann wirst Du feststellen, dass es so funktioniert. :D
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; |
Delete - 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 - Di 27.04.10 14:30
Luckie hat folgendes geschrieben : |
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? |
Ja, Angst vor den in allen PCs integrierten Sprengsatz, welcher bei Fehlbedienung zündet. Sieht man doch immer in Kinofilmen. Rechner ist Überlastet -> er explodiert. Jemand kippt Kaffee in die Tastatur -> es schlagen Meter lange Funken raus. Hardwareentwickter sind mordlustig, da muss man vorsichtig sein.
critter
elundril - Di 27.04.10 15:27
Jup, und echte Programmierer programmieren mit 0 und 1. :D
Delete - Mi 28.04.10 10:03
Das war ehrlich gesagt eine ernst gemeinte Frage.
Critter - 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
Delete - 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. :mrgreen:
Critter - 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. :mrgreen: |
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
delphi10 - 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.
Gausi - 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. :)
JoelH - Mi 28.04.10 14:36
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. :mrgreen: |
Ist zwar völlig OT aber an meinem Auto war mal ein Kurzschluss an der Ölleuchte. Die ist also einfach mal an gegangen, dann wieder aus, dann war sie mal länger an, dann mal wieder läger aus. Alles völlig unregelmäßig. Mit der Weile hatte ich mich dran gewöhnt, tortzdem hatte ich den Hang dazu, immer wenn sie dann mal wieder anging, sofort das Öl zu kontrolieren, obwohl ich wusste, dass es sehr wahrscheinlich eine Fehlanzeige ist. Vor allem bei längeren Trips ein gewisser Nervenkitzel ;) Aber das jetzt nur ganz OT.
Critter - 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:
Delphi-Quelltext
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
bf109g.01 - 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 - 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 :wink:
Gruss Alf
jasocul - 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 - 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
elundril - 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
ALF - 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
bf109g.01 - Fr 07.05.10 17:52
Luckie hat folgendes geschrieben : |
er würde wahrscheinlich |
elundril hat folgendes geschrieben : |
Es geht ja eigentlich darum, das er |
Politisch korrekt würde ich das aber nicht nennen, einfach mal spontan festzulegen, dass ich was zwischen den Beinen hängen habe!
Wenn das eigentliche Thema ja alles andere ist...
elundril - Fr 07.05.10 18:30
bf109g.01 hat folgendes geschrieben : |
Luckie hat folgendes geschrieben : | er würde wahrscheinlich |
elundril hat folgendes geschrieben : | Es geht ja eigentlich darum, das er |
Politisch korrekt würde ich das aber nicht nennen, einfach mal spontan festzulegen, dass ich was zwischen den Beinen hängen habe!
Wenn das eigentliche Thema ja alles andere ist... |
Wir haben das nicht spontan festgelegt, man nennt es deutsche Sprache. In dieser sind unbekannte Personen immer als männlich definiert. Und da du dich weder vorgestellt hast, noch sonst irgendwie in deinen Posting anmerken hast lassen welches Geschlecht du hast, hast du nun mal Pech. Wenn du das nachholst werde ich dich in Zukunft mit Freuden mit dem richtigen Artikel in Zusammenhang bringen. Und wenn jetzt von dir kommt das ich ein ekelhaftes, chauvinistisches Machoschwein bin, kann ich damit gut leben, denn ich für meinen Teil weiß, das ich jeden gleich behandle, oder das zumindest versuche.
lg elundril
jaenicke - Fr 07.05.10 18:45
Hey Leute, ich weiß, dass solche Themen regelmäßig seitenweise ausarten können. :mrgreen:
Aber ich denke mal die Diskussion führt da auch nicht weiter zu etwas. Klar sieht es erstmal komisch aus, wenn eine Frage kommt, die der Compiler auch direkt beantworten würde ("kein Fehler, geht"). Aber zumindest sieht man doch, dass da ein wenig Überlegung dahintersteckt. Und genau das ist es doch was bei vielen viel eher fehlt. Da reicht es doch vielleicht hier auch kurz darauf hinzuweisen, dass das der Compiler auch beantwortet hätte beim Ausprobieren, das muss doch nicht gleich wieder ne lange Diskussion geben.
Ob da nun der Wille zum Ausprobieren fehlte (der fürs Programmieren natürlich wichtig ist), die Fehlermeldung unverständlich war oder schlicht gerade kein Delphi greifbar war oder was auch immer ist doch nun egal.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!