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

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

user profile iconbadstuberl hat folgendes geschrieben Zum zitierten Posting springen:
wie transformiere ich sowas am besten in eine unit?
Im Grunde einfach kopieren.

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

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

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

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconbadstuberl hat folgendes geschrieben Zum zitierten Posting springen:
wie transformiere ich sowas am besten in eine unit?
Im Grunde einfach kopieren.

hehe, gut :)

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

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

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

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

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