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>;


Katso myös

Ulkopuoliset linkit