Nullable types/fi
From Lazarus wiki
Jump to navigationJump to search
│
English (en) │
suomi (fi) │
Tyhjennettävät tyypit (Nullable types) ovat sellaisia tietotyyppejä, joilla ei välttämättä ole arvoa (voidaan määrätä).
Yksi tällainen tyyppi Pascalissa on pointer-tyyppi, jolla voi olla nil
arvo, mikä tarkoittaa, että sitä ei ole osoitettu
mihinkään tiettyyn osoitteeseen. Sama käyttäytyminen voidaan toteuttaa käyttämällä geneerisiä tyyppejä ja advanced record tietueita, joissa on operaattorin ylikuormitus.
unit Nullable;
{$mode delphi}{$H+}
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.
Tyhjennettävät tyypit (Nullable types) voidaan määritellä esimerkiksi näin:
NullableChar = TNullable<Char>;
NullableInteger = TNullable<Integer>;
NullableString = TNullable<string>;