Entwickler-Ecke
Sonstiges (Delphi) - "nativen" delphi-code in unit umwandeln
badstuberl - Fr 08.04.11 09:57
Titel: "nativen" delphi-code in unit umwandeln
hi zusammen. ich habe eine konsolen-app geschrieben, fernab von units und co, sprich:
program xxx;
var ...;
procedure...
function...
begin
procedure x;
procedure y;
...
end.
wie transformiere ich sowas am besten in eine unit? gibt es in units globale variablen? kommen die in den interface-teil oder den implementation-teil? ich tippe ja mal auf letzteres...
wäre schön, wenn mir dort jemand tipps geben könnte!
danke!
Thom - Fr 08.04.11 10:16
badstuberl hat folgendes geschrieben : |
gibt es in units globale variablen? kommen die in den interface-teil oder den implementation-teil? ich tippe ja mal auf letzteres... |
Ja, Du kannst globale Variablen in Units definieren. Diese gehören in den interface-Teil, denn nur Dinge, die dort deklariert sind, sind außerhalb der Unit "sichtbar".
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| unit MeineUnit;
interface
uses ...;
procedure MeineProzedur;
var MeineGlobaleVariable: MeinTyp;
implementation
procedure MeineProzedur; begin MacheDeineSache; end;
end. |
Diese Unit kannst Du dann in Deinem Programm nutzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| program MeinProgramm;
uses MeineUnit;
begin MeineProzedur; end. |
jaenicke - Fr 08.04.11 10:18
badstuberl hat folgendes geschrieben : |
wie transformiere ich sowas am besten in eine unit? |
Im Grunde einfach kopieren.
badstuberl hat folgendes geschrieben : |
gibt es in units globale variablen? |
Theoretisch ja, praktisch ist es aber extrem schlechter Stil diese zu benutzen, wenn es nicht (wie fast immer) anders geht. Das macht das alles nur unübersichtlich, weil du nie weißt wo die Variable überhaupt geschrieben und gelesen wird ohne nachzuschauen.
badstuberl hat folgendes geschrieben : |
kommen die in den interface-teil oder den implementation-teil? |
Es geht beides, besser ist soweit möglich in implementation, aber lass es lieber ganz wenn möglich.
Wenn du mehrere zusammenhängende Funktionen hast, die Daten brauchen, die in einer anderen Funktion gesetzt wurden, dann mach daraus besser Objekte. Dann kannst du das sauber als privates Feld speichern.
badstuberl - Fr 08.04.11 10:37
Thom hat folgendes geschrieben : |
badstuberl hat folgendes geschrieben : | gibt es in units globale variablen? kommen die in den interface-teil oder den implementation-teil? ich tippe ja mal auf letzteres... |
Ja, Du kannst globale Variablen in Units definieren. Diese gehören in den interface-Teil, denn nur Dinge, die dort deklariert sind, sind außerhalb der Unit "sichtbar". |
ah, ok. also ich brauche sie global, aber nur "unit-global". sie sind in der unit gekapselt.
Zitat: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| unit MeineUnit;
interface
uses ...;
procedure MeineProzedur;
var MeineGlobaleVariable: MeinTyp;
implementation
procedure MeineProzedur; begin MacheDeineSache; end;
end. |
Diese Unit kannst Du dann in Deinem Programm nutzen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| program MeinProgramm;
uses MeineUnit;
begin MeineProzedur;
end. | |
ah, danke, sehr nett! das werd ich dann mal in angriff nehmen.
badstuberl - Fr 08.04.11 10:42
jaenicke hat folgendes geschrieben : |
badstuberl hat folgendes geschrieben : | wie transformiere ich sowas am besten in eine unit? | Im Grunde einfach kopieren.
|
hehe, gut :)
badstuberl hat folgendes geschrieben : |
gibt es in units globale variablen? |
Zitat: |
Theoretisch ja, praktisch ist es aber extrem schlechter Stil diese zu benutzen, wenn es nicht (wie fast immer) anders geht. Das macht das alles nur unübersichtlich, weil du nie weißt wo die Variable überhaupt geschrieben und gelesen wird ohne nachzuschauen. |
naja, die unit wird eine atomare einheit und die internen prozeduren sollen gemeinsame, globale variablen haben. die müssen nach außen nicht sichtbar sein. dort sind nur die prozeduren (oder ein teil davon) interessant.
badstuberl hat folgendes geschrieben : |
kommen die in den interface-teil oder den implementation-teil? |
Zitat: |
Es geht beides, besser ist soweit möglich in implementation, aber lass es lieber ganz wenn möglich. |
hmm. also ich werde es wohl erstmal in implementation probieren.
Zitat: |
Wenn du mehrere zusammenhängende Funktionen hast, die Daten brauchen, die in einer anderen Funktion gesetzt wurden, dann mach daraus besser Objekte. Dann kannst du das sauber als privates Feld speichern. |
ja, so sollte man es wohl machen... dir sei auf jeden fall schon mal gedankt! ich mach das alles mal step by step ;) fange grad erst mit delphi an...
Thom - Fr 08.04.11 11:18
badstuberl hat folgendes geschrieben : |
also ich brauche sie global, aber nur "unit-global". sie sind in der unit gekapselt. |
Dann gehören die Variablen natürlich in den implementation-Teil. :idea:
Ich mache das so, daß sie gleich am Anfang und nicht irgendwo im Quelltext definiert werden - das erhöht die Übersichtlichkeit und die Wiederauffindbarkeit. :lol:
Da Du gerade erst mit Delphi anfängst: Laß Dich nicht von irgendwelchen "sollte man"/"sollte man nicht"-Hinweisen verunsichern. Objektorientierte Programmierung ist nicht immer die beste Lösung für jedes Problem.
Sobald Du aber mit der Delphi-klick-mich-zusammen Methode anfängst, kommst Du nicht mehr darum herum, Dich mit der Objekt-Philosophie auseinanderzusetzen.
jaenicke - Fr 08.04.11 12:12
Thom hat folgendes geschrieben : |
Objektorientierte Programmierung ist nicht immer die beste Lösung für jedes Problem. |
Stimmt, man kann (bezogen auf die Fragestellung) die Daten auch einfach immer als Parameter mitgeben. Globale Variablen sollten jedenfalls nur eine Notlösung sein.
Thom - Fr 08.04.11 13:19
jaenicke hat folgendes geschrieben : |
Globale Variablen sollten jedenfalls nur eine Notlösung sein. |
Jain. Ich würde so sagen: Wenn es sinnvoll ist, dann Ja. Damit würde ich dann lieber folgende Aussage treffen:
Globale Variablen sollten jedenfalls nur eine Lösung sein, wenn es sinnvoll ist.
Es gibt genügend Beispiele für globale Variablen:
- Formulare
- Forms.Application
- Forms.Screen
- Clipbrd.Clipboard
- SysUtils.DecimalSeparator/SysUtils.FormatSettings
- ...
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!