Difference between revisions of "Type Helper/de"

From Free Pascal wiki
Jump to navigationJump to search
 
Line 9: Line 9:
  
 
==Beispiel==
 
==Beispiel==
Hier wird ein Vektor um die Funktion Scale erweitert.
+
Der Vektor wird um folgende Funktionen erweitert
 +
* Vektor skalieren.
 +
* Über '''.x''' auf den Ersten Wert des Vektors zugreifen.
 +
Man sieht, ein '''Type-Helper''' ist eine sehr mächtige Funktion. Dieses Beispiel hier ist für OpenGL eine grosse Hilfe.
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
program Project1;
 
program Project1;
Line 18: Line 21:
 
   TVector2f = array[0..1] of Single;          // Ein einfacher Vektor.
 
   TVector2f = array[0..1] of Single;          // Ein einfacher Vektor.
  
 +
  // Type-Helper für TVector2f.
 
   TVector2fHelper = Type Helper for TVector2f  // Schlüssel "Type Helper" verwenden.
 
   TVector2fHelper = Type Helper for TVector2f  // Schlüssel "Type Helper" verwenden.
 +
  private
 +
    function GetX: Single;                    // Getter für Y
 +
    procedure SetX(AValue: Single);            // Setter für X
 +
  public
 +
    property x: Single read GetX write SetX;  // Property für X
 
     procedure Scale(x, y: Single);            // Die Erweiterungs-Funktion.
 
     procedure Scale(x, y: Single);            // Die Erweiterungs-Funktion.
 
   end;
 
   end;
  
procedure TVector2fHelper.Scale(x, y: Single);
+
function TVector2fHelper.GetX: Single; inline;
 +
begin
 +
  Result := Self[0];
 +
end;
 +
 
 +
procedure TVector2fHelper.SetX(AValue: Single); inline;
 +
begin
 +
  Self[0] := AValue;
 +
end;
 +
 
 +
procedure TVector2fHelper.Scale(x, y: Single); inline;
 
begin
 
begin
 
   Self[0] *= x;
 
   Self[0] *= x;
Line 28: Line 47:
 
end;
 
end;
  
 +
// Hauptprogramm
 
var
 
var
 
   vec: TVector2f;      // Variable normal definieren.
 
   vec: TVector2f;      // Variable normal definieren.
 
begin
 
begin
   vec[0]:= 1.5;
+
   vec[0] := 1.5;
   vec[1]:= 2.5;
+
   vec[1] := 2.5;
  
 
   vec.Scale(2.0, 3.0); // Erweiterte Funktion aufrufen.
 
   vec.Scale(2.0, 3.0); // Erweiterte Funktion aufrufen.
  
   WriteLn(vec[0]:10:5);
+
   WriteLn('X: ', vec[0]:10:5);
   WriteLn(vec[1]:10:5);
+
   WriteLn('Y: ', vec[1]:10:5);
end.
+
  WriteLn;
</syntaxhighlight>
+
  vec.x := vec.x + 1.0;
 +
  WriteLn('X: ', vec[0]:10:5);
 +
end.</syntaxhighlight>
  
 
Ausgabe:
 
Ausgabe:
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
    3.00000
+
X:  3.00000
    7.50000
+
Y:  7.50000
 +
 
 +
X:  4.00000
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Latest revision as of 22:38, 23 January 2018

Template:Type Helper

Zurück zu den reservierten Wörtern.

Type Helper

Mit dieser Funktion kann man Bezeichner um Funktionen erweitern.
Die Funktion Type Helper wird zum Teil auch bei Standard-Typen von FPC verwendet. ZB. String.Split
Type Helper steht erst ab FPC 3.0 zu Verfügung.

Beispiel

Der Vektor wird um folgende Funktionen erweitert

  • Vektor skalieren.
  • Über .x auf den Ersten Wert des Vektors zugreifen.

Man sieht, ein Type-Helper ist eine sehr mächtige Funktion. Dieses Beispiel hier ist für OpenGL eine grosse Hilfe.

program Project1;

{$modeswitch typehelpers}                      // "Type Helper" aktivieren.

type
  TVector2f = array[0..1] of Single;           // Ein einfacher Vektor.

  // Type-Helper für TVector2f.
  TVector2fHelper = Type Helper for TVector2f  // Schlüssel "Type Helper" verwenden.
  private
    function GetX: Single;                     // Getter für Y 
    procedure SetX(AValue: Single);            // Setter für X
  public
    property x: Single read GetX write SetX;   // Property für X
    procedure Scale(x, y: Single);             // Die Erweiterungs-Funktion.
  end;

function TVector2fHelper.GetX: Single; inline;
begin
  Result := Self[0];
end;

procedure TVector2fHelper.SetX(AValue: Single); inline;
begin
  Self[0] := AValue;
end;

procedure TVector2fHelper.Scale(x, y: Single); inline;
begin
  Self[0] *= x;
  Self[1] *= y;
end;

// Hauptprogramm
var
  vec: TVector2f;      // Variable normal definieren.
begin
  vec[0] := 1.5;
  vec[1] := 2.5;

  vec.Scale(2.0, 3.0); // Erweiterte Funktion aufrufen.

  WriteLn('X: ', vec[0]:10:5);
  WriteLn('Y: ', vec[1]:10:5);
  WriteLn;
  vec.x := vec.x + 1.0;
  WriteLn('X: ', vec[0]:10:5);
end.

Ausgabe:

X:  3.00000
Y:  7.50000

X:  4.00000

Siehe auch

  • Übersichtseite Type

Autor: Mathias