AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Wert "nicht gesetzt" bei primitiven Datentypen - wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Wert "nicht gesetzt" bei primitiven Datentypen - wie?

Ein Thema von Caps · begonnen am 2. Mai 2018 · letzter Beitrag vom 3. Mai 2018
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 2. Mai 2018, 15:44
Ja, bei Boolean würden Enums noch gehen, aber was mache ich bei String...(?)
In PHP war's so einfach
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 2. Mai 2018, 15:49
Du machst ungefähr sowas:
Delphi-Quellcode:
TNullableString = record
  Value: String;
  IsNull: Boolean;
end
Kann man noch etwas luxuriöser machen mit operator overloading aber ich schätze dafür ist dein Delphi dann auch zu alt.
Ansonsten würde die 08/15-Implementierung der generischen Version die Stevie vorgeschlagen hat ca so aussehen:
Delphi-Quellcode:
TNullable<T> = record
  Value: T;
  IsNull: Boolean;
end

var nullableStr: TNullable<String>;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.050 Beiträge
 
Delphi 12 Athens
 
#3

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 2. Mai 2018, 15:54
Wenn sowieso schon eine so alte Delphi-Version im Spiel ist, dann kann man ja auch gleich auf alte Technik setzen und mit Variants arbeiten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#4

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 2. Mai 2018, 16:00
Ok, danke erstmal, den separaten NULL-Indikator finde ich ganz praktikabel, bei Varianten muss ich mich erst ein wenig mit beschäftigen, damit habe ich noch nicht kreativ gearbeitet ^^.
Ich hatte auch überlegt, ob ich alle Werte in String konvertiere und dann eine Konstante (z.B. "__NULL__") definiere, die garantiert(...!) nie vorkommt - naja... Krücke.
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.201 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 2. Mai 2018, 20:36
Delphi-Referenz durchsuchenVariant kennt diesbezüglich 3 Zustände:
Empty (kein Wert vorhanden)
Null (der Wert "Nichts")
Wert (z.B. True oder False)

Zitat:
Nullable<Boolean> aus Spring4D oder anderen Bibliotheken.
Sollte nicht demnächst auch in Delphi Nullable-Typen "nativ" eingeführt werden?

Aber so oder so, entweder wird es ein größerer Typ, welcher eine zusätzliche Speicherstelle für den zusätzlichen "Wert" besitzt,
oder du nutzt eben einen der vorhandenen Werte und nutzt ihn als "Nullable"-Markierung. (beim String einen bestimmten String und bei nummerischen Typen eben eine bestimmte Zahle)
Nur bei Fließkommazahlen kannst du einen der 3 vordeffinierten Sonderwerte nutzen (NAN, Inf oder NegInf) oder eben bei den Variant-Typen, bzw. eine der vorgeschlagenen Nullable-Deklarationen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 3. Mai 2018 um 02:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 3. Mai 2018, 08:04
Je nach Anwendungsfall könnte auch eine Universallösung sinnvoll sein:
Delphi-Quellcode:
type
  TNullableValue = record
    IsNull: Boolean;
    ValueBool: Boolean;
    ValueInt: Integer;
    ValueString: string;
    { usw. }
  end;
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#7

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 3. Mai 2018, 08:33
Vielen Dank für die Vorschläge!
Ich werde mal drüber meditieren...

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Whookie

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

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 3. Mai 2018, 08:54
Je nach Anwendungsfall könnte auch eine Universallösung sinnvoll sein:
Dann könnte man noch einwenig Platz sparen durch einen varianten Record
Delphi-Quellcode:
type
  TNullableValue = Record
    IsNull: Boolean;
    case Integer of
      0: (ValueBool: Boolean;);
      1: (ValueInt: Integer;);
      2: (ValueString: String;);
      { usw. }
  end;
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.201 Beiträge
 
Delphi 12 Athens
 
#9

AW: Wert "nicht gesetzt" bei primitiven Datentypen - wie?

  Alt 3. Mai 2018, 10:08
Je nach Anwendungsfall könnte auch eine Universallösung sinnvoll sein:
Delphi-Quellcode:
type
  TNullableValue = record
    IsNull: Boolean;
    ValueBool: Boolean;
    ValueInt: Integer;
    ValueString: string;
    { usw. }
  end;
Das nennt sich Variant, bzw. es ist der kleine Bruder davon (oder Schwester oder Geschlechtsunentschiedener)

@Whookie: Nein, "höhere" Typen dürfen/können nicht in variante Teiles des Records rein.

Delphi-Quellcode:
type
  TNullableValue = Record
    case ValueType: {Integer}TEinEnumMitDenNamenDerTypenUndNullIstAuchEinTyp of
      0: (ValueBool: Boolean);
      1: (ValueInt: Integer);
      2: (ValueString: PChar);
      { usw. }
      666: ({IsNull: Boolean = True});
  end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 3. Mai 2018 um 10:13 Uhr)
  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 14:01 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