Difference between revisions of "Type Helper/de"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{Type Helper}} Zurück zu den reservierten Wörtern.<br> <br> =Type Helper= Mit dieser Funktion kann man Bezeichner um Funktionen erweitern.<br> Die Fu...")
 
 
(2 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
=Type Helper=
 
=Type Helper=
 
Mit dieser Funktion kann man Bezeichner um Funktionen erweitern.<br>
 
Mit dieser Funktion kann man Bezeichner um Funktionen erweitern.<br>
Die Funktion '''Type Helper''' wird zum Teil auch bei Standard-Typen von FPC verwendet. ZB. <code>'''String.Spitt'''</code> <br>
+
Die Funktion '''Type Helper''' wird zum Teil auch bei Standard-Typen von FPC verwendet. ZB. <code>'''String.Split'''</code> <br>
 
'''Type Helper''' steht erst ab FPC 3.0 zu Verfügung.
 
'''Type Helper''' steht erst ab FPC 3.0 zu Verfügung.
  
 
==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;
  
{$modeswitch typehelpers}
+
{$modeswitch typehelpers}                     // "Type Helper" aktivieren.
  
 
type
 
type
   TVector2f = array[0..1] of Single;
+
   TVector2f = array[0..1] of Single;           // Ein einfacher Vektor.
  
   TVector2fHelper = Type Helper for TVector2f
+
  // Type-Helper für TVector2f.
     procedure Scale(x, y: Single);
+
   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;
 
   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;
+
   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);
+
   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>
 
  
 
== Siehe auch ==
 
== Siehe auch ==

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