uses

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
wennerer
Beiträge: 219
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

uses

Beitrag von wennerer »

Hallo an Alle,
ich habe da mal eine Grundlagenfrage. Wenn ich in der IDE zum Beispiel einen Button auf eine Form ziehe wird die Unit StdCtrls in die uses Klausel direkt unter "interface" automatisch eingefügt.
Wenn ich nun einen Typ/Befehl verwenden möchte, aber nicht weiß welche Unit ich einbinden muss kann ich ja Cody aufrufen und bei "Add Unit to implementation uses section" einen Haken machen. Mir wird dann die notwendige Unit nach "implementation" eingefügt.
Wo liegt hier der prinzipielle Unterscheid? Welche Vor- bzw. Nachteile entstehen beim Einfügen von Units im Interface bzw, im Implementationsteil des Programms? Bis jetzt habe ich nur in eigenen weiteren Units die aufrufende Unit in den Implementationsteil geschrieben um zirkuläre Referenzen zu vermeiden. Aber welchen Vorteil bringt es hier im Beispiel das die LCLIntf im Interface Teil eingefügt wird?
Edit: muss natürlich "im Implementationsteil" heißen!

Cody1.png
Cody1.png (85.56 KiB) 328 mal betrachtet

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);

  private

  public

  end;

var
  Form1: TForm1;

implementation

uses LCLIntf;



{$R *.lfm}

{ TForm1 }



procedure TForm1.Button1Click(Sender: TObject);
begin
  Color := RGB(100,100,100);
end;

end.



Viele Grüße
Bernd
Zuletzt geändert von wennerer am Mi 28. Okt 2020, 21:01, insgesamt 1-mal geändert.

Sieben
Beiträge: 85
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: i386

Re: uses

Beitrag von Sieben »

Aber welchen Vorteil bringt es hier im Beispiel das die LCLIntf im Interface Teil eingefügt wird?
Wird bzw wurde sie ja offensichtlich auch nicht. Zwingend ist das nur - im interface-Teil - wenn dort auch Typen - oder genereller Bezeichner - verwendet werden, die in der jeweiligen Unit definiert sind. Deshalb muss und wird StdCtrls im Interface hinzugefügt, da TButton ja auch schon dort referenziert wird. Wenn du aber dann wie hier RGB ja nur im implementation-Teil verwendest, reicht es, die Unit auch nur dort einzufügen.

Socke
Lazarusforum e. V.
Beiträge: 2816
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: uses

Beitrag von Socke »

Der Vorteil beschränkt sich soweit ich weiß, ausschließlich auf die von dir bereits angesprochenen zirkulären Referenzen. Damit ist es nur für Bibliotheken etc. relevant, um für folgende Units die Abhängigkeiten im Interface möglichst gering zu halten.

Technisch könnte es leichte Unterschiede in der Initialsierungsreihenfolge geben. Das dürft in der Regel aber auch nur von geringer Bedeutung sein bzw. wird ja auch durch die Abhängigkeiten in Summe korrekt aufgelöst.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wennerer
Beiträge: 219
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 19.3 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: uses

Beitrag von wennerer »

Vielen Dank für eure Ausführungen!

Sieben schrieb:
Deshalb muss und wird StdCtrls im Interface hinzugefügt, da TButton ja auch schon dort referenziert wird.
Ja das leuchtet natürlich ein. War ein schlechtes Beispiel von mir.

Socke schrie:
Das dürfte in der Regel aber auch nur von geringer Bedeutung sein bzw. wird ja auch durch die Abhängigkeiten in Summe korrekt aufgelöst.
Heißt dann für mich ich brauche kein schlechtes Gewissen haben, egal ob ich die LcLIntf oben oder unten einfüge. :)

Viele Grüße
Bernd

Sieben
Beiträge: 85
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: i386

Re: uses

Beitrag von Sieben »

Eine moralische Frage ist es ganz sicher nicht. Du gewinnst nur absolut nichts, wenn du sie schon oben einfügst, aber erst unten brauchst.

Antworten