Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   with..... (https://www.delphipraxis.net/197396-a.html)

Frickler 3. Aug 2018 14:57

with.....
 
Delphi-Quellcode:
  with DIB, dsbm, dsbmih do
  begin
    if (biSize <> 0) and ((biWidth = 0) or (biHeight = 0)) then Exit;
    if (biSize = 0) and ((bmWidth = 0) or (bmHeight = 0)) then Exit;
  end;
Diese Klarheit, diese Kürze...


(aus Vcl.Graphics.pas)

mkinzler 3. Aug 2018 15:03

AW: with.....
 
Lotterie mit Verliergarantie ...

hoika 3. Aug 2018 15:06

AW: with.....
 
Hallo,
vor allem das Debuggen macht das with ja so leichter.
Einfach mit der Maus auf biWidth und der Debugger zeigt Dir sofort den Wert.

So: Neu aber Schluss mit der Ironie ...

jaenicke 3. Aug 2018 15:32

AW: with.....
 
Ja, leider ist auch in der aktuellen Version noch sehr viel with drin. Ich kann aber auch verstehen, dass man das lieber drin lässt solange es läuft, denn with komplikationsfrei zu entfernen ist schon fast eine wissenschaftliche Aufgabe (debuggen und warten allerdings ebenfalls). Problematisch ist nur, wenn niemand merkt, dass es in einer neuen Version eigentlich gar nicht mehr läuft, aber trotzdem noch kompiliert. with eben...

Ich hoffe, dass diese Altlasten irgendwann aufgeräumt werden und with mit einer Compilerwarnung versehen wird...

himitsu 3. Aug 2018 15:55

AW: with.....
 
Ich weiß nicht was ihr habt?

Es ist alles ganz eindeutig, also immer das Letzte wird zuerst genommen.
Und bei mehrfachen Angaben im WITH können die auch aufeinander aufbauen, was auffällt, wenn man weiß, dass
Delphi-Quellcode:
with DIB, dsbm, dsbmih do

// entspricht

with DIB do
  with dsbm do
    with dsbmih do

Aber so kann das doch keiner mehr lesen. :angle:
Delphi-Quellcode:
if (DIB.dsbmih.biSize <> 0) and ((DIB.dsbmih.biWidth = 0) or (DIB.dsbmih.biHeight = 0)) then Exit;
if (DIB.dsbmih.biSize = 0) and ((DIB.dsbm.bmWidth = 0) or (DIB.dsbm.bmHeight = 0)) then Exit;
Zum Glück haben die Felder der WinAPI-Records hier zur Abwechslung mal keine Typ-Prefixe (Type des Feldes), sondern Klassen-Prefixe (Name des Parent-Records),
womit man sofort erkennt, was von dsbm/BITMAP > bm und was vom dsbmih/BITMAPINFOHEADER > bi kommt. :stupid:

Dennis07 12. Aug 2018 00:31

AW: with.....
 
Zitat:

Zitat von himitsu (Beitrag 1409669)
Ich weiß nicht was ihr habt?

Es ist alles ganz eindeutig, also immer das Letzte wird zuerst genommen.
Und bei mehrfachen Angaben im WITH können die auch aufeinander aufbauen, was auffällt, wenn man weiß, dass
Delphi-Quellcode:
with DIB, dsbm, dsbmih do

// entspricht

with DIB do
  with dsbm do
    with dsbmih do

...was ja auch niemand je bestritten hat. Nur ist es nunmal auch kein Geheimnis, dass der Debugger das manchmal anders sieht, und dir dann andere Werte anzeigt, als die, die eigentlich in den Variablen drin stehen. Das kann es schwer bis unmöglich machen, einen Fehler zu finden. Für mich persönlich der Hauptgrund, kein
Delphi-Quellcode:
WITH
zu verwenden. Neben dem Fakt, dass keiner mehr Weiß, welcher Bezeichner zu welchem Namensraum gehört. Besonders wenn die Variablen der verschachtelten Namespaces den selben, einen ähnlichen, oder einen verwandten Typen besitzen.

Ghostwalker 12. Aug 2018 06:50

AW: with.....
 
Zitat:

Zitat von Frickler (Beitrag 1409660)
Delphi-Quellcode:
  with DIB, dsbm, dsbmih do
  begin
    if (biSize <> 0) and ((biWidth = 0) or (biHeight = 0)) then Exit;
    if (biSize = 0) and ((bmWidth = 0) or (bmHeight = 0)) then Exit;
  end;
Diese Klarheit, diese Kürze...


(aus Vcl.Graphics.pas)

:twisted:

Delphi-Quellcode:
    if (biSize <> 0) and ((biWidth = 0) or (biHeight = 0)) then Exit;
    if (biSize = 0) and ((bmWidth = 0) or (bmHeight = 0)) then Exit;
Das wär doch vieeeel übersichtlicher. und es würde Tipparbeit sparen...
:twisted:

Aber im Ernst, wie jaenicke schon sagte, ist das ganze nicht so einfach raus zu bekommen. Im Endeffekt, das gleiche Spiel wie damals mit "Goto"...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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