Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variable ist möglicherweise nicht initialisiert worden (https://www.delphipraxis.net/199597-variable-ist-moeglicherweise-nicht-initialisiert-worden.html)

Schokohase 5. Feb 2019 11:53

AW: Variable ist möglicherweise nicht initialisiert worden
 
Zitat:

Zitat von p80286 (Beitrag 1424736)
Nichts für ungut, das erinnert mich an diesen Einzeilercode, den es vor 30 Jahren in jeder Computerfachzeitschrift gab. Die erste Version scheint mir wesentlich übersichtlicher.

Das ist kein Einzeiler-Code, denn meiner besteht aus mehreren Zeilen.

Codehunter 5. Feb 2019 11:57

AW: Variable ist möglicherweise nicht initialisiert worden
 
Ist das Zebra nun schwarz mit weißen Streifen oder weiß mit schwarzen Streifen? ^^

Der Code im Erstpost war ein Beispiel, an dem ich mein Anliegen leicht demonstrieren konnte. Im "richtigen Leben" sind die Dinge ungleich komplexer.

Schokohase 5. Feb 2019 12:10

AW: Variable ist möglicherweise nicht initialisiert worden
 
Zitat:

Zitat von Codehunter (Beitrag 1424739)
Ist das Zebra nun schwarz mit weißen Streifen oder weiß mit schwarzen Streifen? ^^

Es ist weiß und hat schwarze Streifen, denn diese schwarzen Streifen entstehen dadurch dass Pigmente das Fell schwarz färben.

Moombas 5. Feb 2019 12:36

AW: Variable ist möglicherweise nicht initialisiert worden
 
Zitat:

Zitat von Schokohase (Beitrag 1424742)
Zitat:

Zitat von Codehunter (Beitrag 1424739)
Ist das Zebra nun schwarz mit weißen Streifen oder weiß mit schwarzen Streifen? ^^

Es ist weiß und hat schwarze Streifen, denn diese schwarzen Streifen entstehen dadurch dass Pigmente das Fell schwarz färben.

Andererseits hat das Zebra schwarze Haut, es könnte also eigentlich eher ein schwarzes Zebra mit weißen Streifen sein :P


BTT:
Schreibt man den "Einzeiler" von Schokohase etwas anders ist er dennoch übersichtlich:
Delphi-Quellcode:
var
  LEncodings: TStringList;
  lEncoding: TEncoding;
begin
  LEncodings := TStringList.Create;
  try
    for lEncoding in TArray<TEncoding>.Create(TEncoding.ANSI,
                                              TEncoding.ASCII,
                                              TEncoding.BigEndianUnicode,
                                              TEncoding.Unicode,
                                              TEncoding.UTF7,
                                              TEncoding.UTF8) do
      LEncodings.AddObject(lEncoding.EncodingName, lEncoding);

    TOpenTextFileDialog(Sender).Encodings.Assign(LEncodings);
  finally
    LEncodings.Free();
  end;
end;
Es ist oft nur eine Sache des Schreibstils, der die Übersichtlichkeit ändert.

Uwe Raabe 5. Feb 2019 12:46

AW: Variable ist möglicherweise nicht initialisiert worden
 
Der Vorteil bei der Schreibweise mit dem generischen Array ist, daß Elemente nur an einer Stelle hinzugefügt bzw. entfernt werden müssen. Auch das Ändern der Reihenfolge ist einfacher. Bei der For-Schleife mit case-Anweisung sind immer zwei Dinge zu beachten. Fügt man nur ein neues case-Label ein und vergisst, die For-Schleife anzupassen, wundert man sich, warum das neue Encoding nicht angezeigt wird. Löscht man eines der case-Label ohne die For-Schleife anzupassen, ergibt die besagte Warnung plötzlich durchaus einen Sinn.

Codehunter 6. Feb 2019 09:34

AW: Variable ist möglicherweise nicht initialisiert worden
 
Am gezeigten Beispiel habt ihr natürlich recht. Das generische Array kann man glaub ich auch noch per
Delphi-Quellcode:
[TEncoding.ANSI, TEncoding.ASCII {...}]
abkürzen. Das for-in-[...]-Konstrukt benutze ich inzwischen sogar sehr gerne (schreibe sogar eigene Enumeratoren). Das einzige das mir da fehlt, ist eine Entsprechung zum alten for-a=b-downto-c-Konstrukt.

Dennis07 6. Feb 2019 13:40

AW: Variable ist möglicherweise nicht initialisiert worden
 
Dazu möchte ich das DocWiki zitieren:
Zitat:

Sie können sich nur auf den letzten Wert eines for-Schleifenzählers verlassen, wenn die Schleife mit einer goto- oder exit-Anweisung verlassen wird.
Man könnte den Wert vor dem Schleifendurchlauf initialisieren. Häufig ist es aber effizienter, ein
Delphi-Quellcode:
Exit
zu verwenden und den Default-Wert erst nach dem durchlaufen zu setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr.
Seite 2 von 2     12   

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