AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Syntax der with-Anweisung

Ein Thema von Namenloser · begonnen am 8. Okt 2008 · letzter Beitrag vom 8. Okt 2008
Antwort Antwort
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#1

Syntax der with-Anweisung

  Alt 8. Okt 2008, 16:14
Ich habe gerade hier diese Syntax gesehen:
Delphi-Quellcode:
  with ComboBox1, Items do begin
    itemindex := IndexOf(edit1.text)
Bisher habe ich die with-Anweisung in solchen Fällen immer so benutzt:
Delphi-Quellcode:
  with ComboBox1.Items do begin
    itemindex := IndexOf(edit1.text)
Die Onlinehilfe sagt zum Komma in der with-Anweisung folgendes:
Zitat:
Wenn auf with mehrere Objekte oder Records folgen, wird die gesamte Anweisung als Folge von verschachtelten with-Anweisungen behandelt. Die Anweisung:

with Objekt1, Objekt2, ..., Objektn do Anweisung ist gleichbeudeutend mit
Delphi-Quellcode:
 with obj1 do
  with obj2 do
    ...
    with objn do
      // Anweisung
In diesem Fall wird jede Variablenreferenz und jeder Methodenname in Anweisung als Element von Objektn behandelt, wenn dies möglich ist. Andernfalls wird die Referenz bzw. der Name als Element von Objektn1 interpretiert usw. Dieselbe Regel gilt für die Interpretation der Objekte selbst. Ist beispielsweise Objektn sowohl ein Element von Objekt1 als auch von Objekt2, wird es als Objekt2.Objektn interpretiert.
Was ist da jetzt der Unterschied zu der Schreibweise mit Punkt?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 16:20
ItemIndex ist eine Eigenschaft von TCombobox, nicht von TStrings. Daher benötigt auch die Combobox ein With, oder du qualifizierst ItemIndex.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 16:21
Das würde in diesem Fall bedeuten, dass die with - Anweisung für combobox1 UND für combobox1.items gilt

Edit: ...wie mein Vorredner auch schon geschrieben hat xD
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 16:24
Zitat von Apollonius:
ItemIndex ist eine Eigenschaft von TCombobox, nicht von TStrings. Daher benötigt auch die Combobox ein With, oder du qualifizierst ItemIndex.
Ah, stimmt. Danke
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 16:26
.. obwohl mir Angst und Bange wird bei einem solchen Beispiel

Die einzig korrekte Anwendung der with-Anweisung für obiges Beispiel lautet:

    ComboBox1.ItemIndex := ComboBox.Items.IndexOf(edit1.text); sieht elleganter aus, führt zu keinen Missverständnissen und kommt vor allem ganz ohne with aus
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 16:45
Ich benutze with-Anweisungen auch eher selten, also nur wenn es mindestens drei oder 4 Anweisungen hintereinander gibt. Und ich beziehe mich in der with-Anweisung generell auf den "kleinsten gemeinsamen Nenner", also im Beispiel Combobox1.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 18:02
@Whookie:
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 19:10
Zitat von omata:
@Whookie:
Na, der Beispieltext ist von mir und ich hatte ihn nur aus dem Ursprungspost übernommen und mich beim Probieren ehrlichgesagt darüber gewundert, dass das geht. Ausgeschrieben ist es mir doch deutlich lieber. Gut, schreiben wir was mehr, aber in umfangreichen Quelltexten weiß man dann auch immer, womit man es zu tuen hat und muss nicht erst das vorhergehende oder noch vorhergehendere oder so with suchen, um zu erahnen, womit man es denn im Moment da eigentlich zu tuten haben könnte.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 19:45
Hallo,

eine weitere Möglichkeit um Tipparbeit zu sparen ist zum Beispiel mit einer Variablen zu arbeiten.

z.B.:

Delphi-Quellcode:
constructor THPLComPortClass.Create(AOwner: TComponent);
var
  C: TApdCustomComPort;
begin
  inherited Create(AOwner);
  FComPort:= TApdComPort.Create(self); // Neuer ComPort Erstellen
  c:= FComPort;
  c.AutoOpen:= FALSE;
  c.Baud:= 9600;
  c.BufferFull:= 1;
  c.BufferResume:= 1;
  c.ComNumber:= 0;
  c.HWFlowOptions:= [hwfUseDTR,hwfUseRTS,hwfRequireDSR,hwfRequireCTS];
  c.InSize:= 2;
  c.LogHex:= FALSE;
  c.OutSize:= 2;
  c.RTS:= FALSE;
  c.TapiMode:= tmNone;
statt:

Delphi-Quellcode:
constructor THPLComPortClass.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FComPort:= TApdComPort.Create(self); // Neuer ComPort Erstellen
  with FComPort do
  begin
    AutoOpen:= FALSE;
    Baud:= 9600;
    BufferFull:= 1;
    BufferResume:= 1;
    ComNumber:= 0;
    HWFlowOptions:= [hwfUseDTR,hwfUseRTS,hwfRequireDSR,hwfRequireCTS];
    InSize:= 2;
    LogHex:= FALSE;
    OutSize:= 2;
    RTS:= FALSE;
    TapiMode:= tmNone;
  end;
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Syntax der with-Anweisung

  Alt 8. Okt 2008, 21:43
Ich habe hier im Forum erfahren, das die Verwendung des 'with'-Statements mit Teeren und Federn bestraft wird. Daher möchte ich nur zwei Anmerkungen zu dieser Diskussion beitragen:
1. Die With-Anweisung von Visual Basic ist besser (Syntax sinngemäß):
Code:
With Foobar do
  .Property1 := bla;
  .Caption := mump;
End Width
Hier gehts um den Punkt: Schöne Idee, die ich mir in Delphi auch wünschen würde.

2. Übersichtlichkeit: Ich arbeite mit den Developer Express Komponenten, und da gibt es einen Bandwurm, um die einen selektierten Wert (die Spalte'MyNameColumn') eines Datengitters zu ermitteln:
Ohne with
SelectedName := MyGridView.DataController.Values[MyGridView.DataController.FocusedRecordIndex, MyNameColumn.Index]; mit:
Delphi-Quellcode:
With MyGridView.DataController do
  SelectedName :=Values[FocusedRecordIndex,MyNameColumn.Index];
Im Bestreben, den Code auf das Wesentliche zu beschränken, finde ich die Variante mit 'with' einfach übersichtlicher. Natürlich unter der Voraussetzung, das das Klassenmodell von DevExpress bekannt ist.

Mein Fazit: Ich verwende 'with', wenn ich Code leserlich gestalten will und würde mir die '.' Notation von VB in Delphi wünschen, damit dieses leidige Thema um die (ach so schlimme) und mißverständliche Verwendung von 'with' endlich ein Ende hat. Was mit einer guten Idee begann (vor 40 Jahren), in dem man eine Compileroptimierung als Sprachbestandteil manifestiert (Verwendung von Registern), ist heute im Kontext von OOP und mehrfach auftretender Eigenschaftsnamen ein Problem: CodeGear! handelt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz