AGB  ·  Datenschutz  ·  Impressum  







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

Null als Property

Ein Thema von IntelliSoft · begonnen am 8. Apr 2021 · letzter Beitrag vom 9. Apr 2021
Antwort Antwort
IntelliSoft

Registriert seit: 8. Apr 2021
9 Beiträge
 
Delphi 10.3 Rio
 
#1

Null als Property

  Alt 8. Apr 2021, 09:51
Delphi-Version: 5
Hallo
Zu aller erst, möchte ich HALLO sagen!
Ich bin neu in eurer Gemeinde & bin voller Vorfreude.

Eine kurze Vorstellung, vor der Frage, finde ich als angebracht.
Ich komme von Visual Basic. NET zu Delphi. Grund dafür ist, dass MS, Visual Basic fallen gelassen hat & nicht dieses umständliche C# lernen möchte...
Ich arbeite in VB.Net seit der ersten .NET Generation (also 2001) und davor auch schon mit einigen anderen Basic Sprachen.
Jetzt bin ich hier, bei Delphi angekommen & versuche die Handhabung so gut es geht im Selbststudium zu meistern.
Doch leider gibt es nicht auf alles eine schnelle & einfache Antwort - Deshalb hier zu meiner Frage:

In der .NET Welt gibt es Nullable(of ...).
Damit kann man Datentypen deklarieren, die keinen Wert aufweisen sollen.
Soweit ich das verstanden habe, kennt Delphi (im Moment) dieses Konzept nicht. Deshalb die Frage: Wie geht man in Delphi damit um?

Als kleines, praxisorientiertes Beispiel:


Ich habe 3 Properties:
Staerke1: Float
Staerke2: Float
Achse: 0..180

Jetzt ist es so, dass die Property Achse nur dann einen Wert haben darf, wenn Staerke2 <> 0 ist, wobei es "0" als Staerke2 gar nicht gibt...
Das heißt, die Rückgabe von Achse darf nur dann einen Wert haben (zwischen 0 und 180) wenn Staerke2 nicht "0" ist.
Wenn Staerke2 "0" wäre, dann darf die Achse keinen Rückgabewert haben & auch Staerke2 müsste "NIL" sein

Ich hoffe, das war logisch...

DANKE für Tips!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.873 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Null als Property

  Alt 8. Apr 2021, 09:58
Mit Delphi 5 wirst Du da Probleme haben. In neueren Delphiversionen gibt es die Möglichkeit per generics:

Delphi-Quellcode:
unit Nullable;

interface

uses
  Classes, SysUtils;

type
  TNullable<T> = record
  private
    FHasValue: Boolean;
    FValue: T;
    function GetValue: T;
    procedure SetValue(AValue: T);
  public
    procedure Clear;
    property HasValue: Boolean read FHasValue;
    property Value: T read GetValue write SetValue;
    class operator Implicit(A: T): TNullable<T>;
    class operator Implicit(A: Pointer): TNullable<T>;
  end;

implementation

{ TNullable }

function TNullable<T>.GetValue: T;
begin
  if FHasValue then
     Result := FValue
  else
    raise Exception.Create('Variable has no value');
end;

procedure TNullable<T>.SetValue(AValue: T);
begin
  FValue := AValue;
  FHasValue := True;
end;

procedure TNullable<T>.Clear;
begin
  FHasValue := False;
end;

class operator TNullable<T>.Implicit(A: T): TNullable<T>;
begin
  Result.Value := A;
end;

class operator TNullable<T>.Implicit(A: Pointer): TNullable<T>;
begin
  if A = nil then Result.Clear
  else raise Exception.Create('Pointer value not allowed');
end;

end.
Markus Kinzler
  Mit Zitat antworten Zitat
IntelliSoft

Registriert seit: 8. Apr 2021
9 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Null als Property

  Alt 8. Apr 2021, 10:01
Hallo

1) Danke für die schnelle Antwort
2) Das mit Version 5 von Delphi hatte ich gar nicht eingestellt... -> Habe es aber geändert: Ich arbeite mit 10.3 Communitiy Edition
3) Das von Dir gezeigt Beispiel funktioniert aber erst ab 10.4, soweit ich da gelesen habe!?

DANKE
  Mit Zitat antworten Zitat
IntelliSoft

Registriert seit: 8. Apr 2021
9 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Null als Property

  Alt 8. Apr 2021, 10:04
OH
Hab es gerade getestet, scheint auch super in der Version 10.3 zu funktionieren!

DANKE - Ich werde das mal testen!!!!

SUPER!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.873 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Null als Property

  Alt 8. Apr 2021, 10:06
Sollte eigentlich mit allen Versionen mit Generics funktionieren. (ab D2009)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Null als Property

  Alt 8. Apr 2021, 10:49
Wollte Delphi nicht auch nativ Nullable-Typen demnächst eingebaut haben? (dachte da war mal was in 10.2/3/4 geplant)


Jetzt ab 10.4 würde die Initialisation des Managed-Records sich gut machen, um den Wert automatisch "sauber" zu haben.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Apr 2021 um 10:51 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.873 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Null als Property

  Alt 8. Apr 2021, 10:50
Geplant war/ist viel ...
Markus Kinzler
  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 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz