Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Spring4D: Nullables (https://www.delphipraxis.net/187273-spring4d-nullables.html)

Der schöne Günther 16. Nov 2015 10:11

AW: Spring4D: Nullables
 
Zitat:

Zitat von Stevie (Beitrag 1321558)
Nö, implicit heißt normale Zuweisung, explicit heißt, dass man einen Hardcast nutzen muss.

Hardcast, oder gleich den passenden Typen reinstecken. Also
Delphi-Quellcode:
myDatabaseField.Value
. Das will man im Endeffekt doch.

Oder ist es tatsächlich, wie Dejan Vu meint, nur als eine andere Schreibweise für Variants gedacht?


Delphi-Quellcode:
      class operator Explicit(const from: Variant): Nullable<T>;
      class operator Implicit(const from: T): Nullable<T>;
erlaubt:

Delphi-Quellcode:
var
   myWrapper: TWrapper<Integer>;
   myVariant: Variant;
begin
   myWrapper := 42;

   //myWrapper := 'Hallo'; // nope

   myWrapper := Variant('Hallo');
   // oder
   myVariant := 'Hallo';
   myWrapper := myVariant;
end.

Stevie 16. Nov 2015 10:44

AW: Spring4D: Nullables
 
TField.Value ist ein Variant. Und wenn man AsX (X sei der Typ des Felds, also string, Integer o.Ä.) führt bei Null zu einem Fehler. Daher gibts den Overload für Variant, so dass der Variant nicht erst in eine Null exception läuft sondern das "auspacken" dem Nullable überlässt.

Und nein, ein Nullable ist kein Variant! In einen Variant kann ich zur Laufzeit alles (*) reinpacken und der Variant ist fröhlich. In einen Nullable geht nur T oder ein Variant (wobei der Variant auch nur einen T beinhalten darf, es wird hier keine Konvertierung durchgeführt). Dass das nunmal nicht zur Compiletime geht liegt daran, dass es nicht im Compiler eingebaut ist. Dafür musst du dich an Embarcadero wenden.

(*) was in einen Variant passt

Wenn du in deinem Code die stellen aufdecken willst, die den Variant overload nutzen, dann schlag ich vor, pack nen deprecated an diesen Overload und du siehst beim Kompilieren jede Stelle, die den nutzt.

Sir Rufo 16. Nov 2015 10:49

AW: Spring4D: Nullables
 
Zitat:

Zitat von Dejan Vu (Beitrag 1321568)
Zitat:

Zitat von Sir Rufo (Beitrag 1321550)
Ein
Delphi-Quellcode:
Nullable<T>
soll eben nicht alles beinhalten, sondern typsicher einen Wert vom Typ
Delphi-Quellcode:
T
oder eben nichts.

Ach so. Und es geht darum, das man einem typsicheren
Delphi-Quellcode:
Nullable<Integer>
auch einen String zuweisen kann, ohne das es knallt (also eher 'ein bisschen typsicher'). Und das der Wert dann 0 ist.

Na ja. Ein etwas besseres 'VarToInt' (aka convert) tut's ja auch. Also: Ich weise einem Variant zu, was ich will und erst beim Auslesen interpretiere ich, was da drin steht. Hmm. Vom Verhalten sehe ich jetzt nicht so den Unterschied zu normalen Variants, aber egal.

Nach meinem Verständnis (und auch meiner Implementierung) kann einem
Delphi-Quellcode:
Nullable<Integer>
eben kein
Delphi-Quellcode:
string
zugewiesen werden. Mein
Delphi-Quellcode:
Nullable<T>
hat auch keinen impliziten Cast von einem
Delphi-Quellcode:
Variant
, denn nach meinem Verständnis soll ein
Delphi-Quellcode:
Nullable<T>
eben nicht alles beinhalten, sondern typsicher den angegebenen Typen
Delphi-Quellcode:
T
oder eben nichts.

Genau das steht auch schon in meinen Beiträgen hier ...

Und wie immer ist dieses Konstrukt einfach nur zum Vereinfachen gedacht:
Delphi-Quellcode:
var
  a,b,c : Nullable<Integer>;
  d : Integer;
begin
  a := Nullable.Null;
  b := 42;
  c := a+b; // c => Null
  d := a.ValueOrDefault() + b.ValueOrDefault(); // d => 42
end;

Stevie 16. Nov 2015 10:59

AW: Spring4D: Nullables
 
Dann mach doch deinen Nullable open Source, Günther kann ihn nutzen und wir ersparen uns die ewige Im-Kreis-Dreherei. :roll:

P.S. Was macht eigtl dein Add overload bei Typen, bei denen es keine Addition gibt?

Der schöne Günther 16. Nov 2015 11:10

AW: Spring4D: Nullables
 
Lass uns noch ein bisschen drehen :spin2:
Ein bisschen.

Zitat:

Zitat von Stevie (Beitrag 1321574)
Daher gibts den Overload für Variant, so dass der Variant nicht erst in eine Null exception läuft sondern das "auspacken" dem Nullable überlässt.

Das sehe ich ja voll und ganz ein. Nur nicht, warum es implizit sein muss.

Ist es explizit, kann man weiterhin alle
Delphi-Quellcode:
TField.Value
reinstecken. Oder
Delphi-Quellcode:
IXMLNode.Value
. Oder was auch immer. Was würde man dadurch verlieren?

Sir Rufo 16. Nov 2015 11:14

AW: Spring4D: Nullables
 
Zitat:

Zitat von Stevie (Beitrag 1321576)
P.S. Was macht eigtl dein Add overload bei Typen, bei denen es keine Addition gibt?

Das war einfach nur Wunschdenken und ich wollte auch mal komische Sachen schreiben. Liegt wohl am Wetter :stupid:

Stevie 16. Nov 2015 11:43

AW: Spring4D: Nullables
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1321577)
Lass uns noch ein bisschen drehen :spin2:
Ein bisschen.

Zitat:

Zitat von Stevie (Beitrag 1321574)
Daher gibts den Overload für Variant, so dass der Variant nicht erst in eine Null exception läuft sondern das "auspacken" dem Nullable überlässt.

Das sehe ich ja voll und ganz ein. Nur nicht, warum es implizit sein muss.

Ist es explizit, kann man weiterhin alle
Delphi-Quellcode:
TField.Value
reinstecken. Oder
Delphi-Quellcode:
IXMLNode.Value
. Oder was auch immer. Was würde man dadurch verlieren?

Guck dir einfach die Doku zu implicit und explicit Operator overloads an denn du scheinst offensichtlich miszuverstehen, was implizit und explicit bedeutet.
Der Fakt, dass ein string in einen Variant gecastet wird und dann an den Variant Overload übergeben wird, hat nix mit dem Overload zu tun, sondern damit, wie Variants funktionieren.

Zitat:

Zitat von Sir Rufo (Beitrag 1321578)
Zitat:

Zitat von Stevie (Beitrag 1321576)
P.S. Was macht eigtl dein Add overload bei Typen, bei denen es keine Addition gibt?

Das war einfach nur Wunschdenken und ich wollte auch mal komische Sachen schreiben. Liegt wohl am Wetter :stupid:

Schade, dachte du hättest da einen Trick gefunden. Bei einem im Compiler eingebauten nullable werden die ja die Operatoren des parameter Typs ge"lifted".

Dejan Vu 16. Nov 2015 19:59

AW: Spring4D: Nullables
 
Zitat:

Zitat von Sir Rufo (Beitrag 1321575)
meinem ... meiner ... Mein ... meinem ... meinen

Laut Titel geht es um Spring4D: Nullables. :roll:

Seitdem ich Nullables in C# entdeckt habe, trauere ich den Variants hinterher. Auf der anderen Seite brauche ich sie eigentlich nie.

Sir Rufo 16. Nov 2015 20:34

AW: Spring4D: Nullables
 
Zitat:

Zitat von Dejan Vu (Beitrag 1321617)
Zitat:

Zitat von Sir Rufo (Beitrag 1321575)
meinem ... meiner ... Mein ... meinem ... meinen

Laut Titel geht es um Spring4D: Nullables. :roll:

Jupp, und dem aufmerksamen Leser ist auch nicht entgangen, das wir - wenigstens der größte Teil - hier über Sinn und Zweck der ein oder anderen Teile des Spring.Nullable diskutieren und Stevie schon seine Bereitschaft zur Überarbeitung des Spring.Nullable mitgeteilt hat.

Wenn einem die eine oder andere Funktionalität nicht zusagt, dann kommentiert man die einfach aus (Open Source lässt grüßen).

Mein Beitrag hierzu war den Grund zu erläutern, warum es so einen Variant Cast gibt - ich persönlich den aber nicht mag - und wie ich es bei mir persönlich gelöst habe, um eine Alternative aufzuzeigen.

Das nennt man dann Austausch von Gedanken und Erfahrungen. Mag seltsam klingen, mir aber egal.

Dejan Vu 17. Nov 2015 06:56

AW: Spring4D: Nullables
 
Sag mal, hast Du Anteile an Bold-Schriften erworben oder wieso spickst Du deine Ausführungen ständig damit?

Das fette 'Mein..Meine...meins' Zitat sollte eher darauf hinweisen, das man es mit der Betonung der EIGENEN Meinung auch ÜBERTREIBEN kann, ABER DAS SCHEINT NICHT ANGEKOMMEN ZU SEIN !!!!!11!!!!11!1!EINS!!!1!!ELF!!!

Wink. Zaun. Pfahl. Netiquette. Blinzel. Knick-Knack. Say No more.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.
Seite 3 von 4     123 4      

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