Autor Beitrag
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure XY;
begin
  ...
end;

Will ich dieses machen:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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:
ausblenden 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



BeitragVerfasst: Di 27.04.10 14:21 
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Di 27.04.10 14:30 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 27.04.10 15:27 
Jup, und echte Programmierer programmieren mit 0 und 1. :D

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 28.04.10 10:03 
Das war ehrlich gesagt eine ernst gemeinte Frage.
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: 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 user profile iconbf109g.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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Mi 28.04.10 13:17 
Hi,
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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.
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mi 28.04.10 14:36 
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
mfg. Joel
Critter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 328
Erhaltene Danke: 3

Windows 7
Delphi 7 Pro.
BeitragVerfasst: Mi 28.04.10 14:37 
Hallo,
user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden 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:

ausblenden 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:
ausblenden volle Höhe 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
        {Rechne Was}
    End;
    
    Function UnterBerechnung1b : integer;
    Begin
        {Rechne Was}
    End;
    
 Begin
    Result := UnterBerechnung1b Div UnterBerechnung1a + UnterBerechnung1b MOD 3;
 End;
 
 
 Function tRechneWas.Berechnung2 : real;
    
    Function UnterBerechnung2a : real;
    Begin
        {Rechne Was}
    End;
    
    Function UnterBerechnung2b : real;
    Begin
        {Rechne Was das nie null ergibt}
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Fr 07.05.10 11:07 
user profile iconCritter hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Fr 07.05.10 12:03 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Fr 07.05.10 12:59 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
..... 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Fr 07.05.10 15:47 
user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
..... 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


Was ist der Unterschied? Delphi ist Delphi.....

_________________
mfg. Joel
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 07.05.10 16:51 
Es geht ja eigentlich darum, das er anscheinend lieber andere arbeiten lässt anstatt seine idee:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Fr 07.05.10 16:51 
user profile iconJoelH hat folgendes geschrieben Zum zitierten Posting springen:
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!

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
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!