Autor |
Beitrag |
huberttdm850
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 04.09.08 10:40
Hallo
Wer kann mir bitte sagen wie man eine Procedure(1) in einer Procedur(2) aufruft damit man die Variablen der (2) mitbenutzen kann (Will kein GOTO haben)
z.B.:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure blabla_1 var a:integer; begin ..... ..... end; |
Wie muss ich nun die zweite Procedur anlegen, damit ich die Variable a mitbenutzen kann?
Danke
Gruß hubert
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 04.09.08 10:44
wie wäre es mit einer funktion und parametern??
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
huberttdm850 
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 04.09.08 10:51
Ja, das ist mir schon klar dass ich das auch machen kann, aber wenn es viele Objekte und Variablen innerhalb dieser Procedur gibt, dann möchte aich auch auf alle zugreifen können.
Bitte nur solche Antworten die auch meine Frage beantworten können, DANKE!
Gruß
hubert
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 04.09.08 10:54
gut, wenn das so ist dann: da die variablen lokal definiert sind kann man sie in einer anderen prozedur imho nicht drauf zugreifen. globale würden helfen.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
huberttdm850 
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 04.09.08 11:01
Ja, das würde natürlich funktionieren, aber ich möchte die lokalen Variablen auch belassen und nicht globale daraus machen.
Ich hab diese Technik bereits in einem Codestück gesehen, aber leider weiß ich nicht mehr wie man die beiden Proceduren schachteln muss damit das funktioniert und deshalb hätt ich hier mal ganz gerne Rat gesucht!
Gruß
hubert
|
|
Gausi
      
Beiträge: 8549
Erhaltene Danke: 478
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 04.09.08 11:02
_________________ We are, we were and will not be.
|
|
huberttdm850 
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 04.09.08 11:08
JAaaaaaaaaaa, genau das hab ich gesucht, eine lokale procedur!
Ich verwende dies auch nur um innerhalb der procedur mehr struktur reinzubringen, ohne dei ganze neu schreiben zu müssen, aber ich geb dir natütlch recht!!
Gruß hubert
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Do 04.09.08 11:22
huberttdm850 hat folgendes geschrieben: | JAaaaaaaaaaa, genau das hab ich gesucht, eine lokale procedur!
Ich verwende dies auch nur um innerhalb der procedur mehr struktur reinzubringen, ohne dei ganze neu schreiben zu müssen, aber ich geb dir natütlch recht!!
Gruß hubert |
Mehr Struktur? Also Procedures machen einen Code zwar i.d.R. schon übersichtlicher, aber in dem Fall wohl eher das Gegenteil...
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Do 04.09.08 19:07
Nested functions machen durchaus Sinn und ermöglichen sehr elegante Konstrukte. Die Gültigkeit dieser Funktionen ist auf die umschließende Funktion beschränkt, weshalb es möglich ist auf die lokalen Variablen der umschließenden Funktion zuzugreifen (vorrausgesetzt man ruft sie direkt auf und nicht über einen Funktionszeiger - z.B. Callback). Dadurch sind sie dafür prädestiniert sich wiederholende Codestücke innerhalb einer Funktion in einer solchen nested function zusammenfassen - vor allem dann, wenn innerhalb dieses Codes massiver Gebrauch von lokalen Variablen stattfindet, wodurch eine Auslagerung in eine externe Funktion nur schwer bis gar nicht möglich wäre.
Meiner Meinung nach sind nested functions also durchaus Teil eines guten Konzeptes, auch wenn das in diesem Thread bisher anders aufgefasst wird..
Gruß, Motzi
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Do 04.09.08 19:11
Ja sehe ich auch so. Benutze diese ebenfalls, wenn auch nur selten. Wenn eine Prozedur nur von einer anderen aufgerufen wird, so erhöht es die Lesbarkeit sie auch nur in dieser zu definieren (Bei einem großen Projekt mit hunderten von Funktionen). Allerdings benutzte ich bisher stets übergabeparameter, auch wenn dies offenbar nicht nötig ist.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Do 04.09.08 20:55
Hi,
imho macht eine lokale prozedur oder Funktion Sinn, wenn sie die Lesbarkeit des Codes verbessert und dabei auf keinen Fall nochmal verwendet wird. Eine vernünfitge Formatierung ist mir dabei leider noch nicht untergelaufen  . Kleines Beispiel: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function GgT(a, b: Integer): Integer; procedure Sortiere; var Tausche: Integer; begin if a < b then begin Tausche := a; a := b; b := Tausche; end; end; begin repeat Sortiere; a := a mod b; until a = 0; result := b; end; |
Einige Sonderfälle müssten hier noch behandelt werden, ist nur ein Beispiel. Hier finde ich erhöht es die Übersicht des Codes z.B. stark.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 04.09.08 21:40
Ich kann motzi nur zustimmen. Hinzukommt, dass man es dem Compiler leichter macht den Code zu optimieren.
|
|