Autor Beitrag
badstuberl
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 08.04.11 09:57 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 70
Erhaltene Danke: 5


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

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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
program MeinProgramm;

uses
  MeineUnit;

begin
  MeineProzedur;
end.


Zuletzt bearbeitet von Thom am Fr 08.04.11 10:21, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 11



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

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

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 70
Erhaltene Danke: 5


Delphi 10 Seattle Prof.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 70
Erhaltene Danke: 5


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

  • Formulare
  • Forms.Application
  • Forms.Screen
  • Clipbrd.Clipboard
  • SysUtils.DecimalSeparator/SysUtils.FormatSettings
  • ...