Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Les foncteurs

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Utiliser un objet comme une fonction[modifier | modifier le wikicode]

Voici la définition d'un foncteur selon wiktionary :

Foncteur[modifier | modifier le wikicode]

Entité qui réunit les qualités d’objet et de fonction dans le cadre d’une programmation par objets.

https://fr.wiktionary.org/wiki/foncteur

Description[modifier | modifier le wikicode]

C'est un objet qui se comporte comme une fonction. C'est plus puissant qu'une simple fonction car, un foncteur étant un objet, il permet de stocker des paramètres dans ses attributs (propriétés, variables internes).

Toute fonction peut être transformée en foncteur. Le code est ainsi bien organisé.

Exemple[modifier | modifier le wikicode]

Voici un exemple avec des opérations arithmétiques.

La classe de base s'appelle "COperator". Elle représente un opérateur (+, -, *, /, ...).

' Gambas class file

' COperator

Property Read OperatorName As String

Private $sOperatorName As String

Public Sub _compare(hOther As COperator) As Integer

  Return String.Comp(Me.OperatorName, hOther.OperatorName, gb.IgnoreCase)

End

Private Function OperatorName_Read() As String

  Return $sOperatorName

End

Public Sub SetOperatorName(Value As String)

  $sOperatorName = Value

End

Static Public Sub _call(iLeft As Integer, iRight As Integer) As Integer

  Error.Raise("Not implemented. You have to implement a new class with inheritance! ")

End

Je spécialise la classe en créant la classe dérivée COperatorPlus représentant l'opérateur + servant à faire des additions.

' Gambas class file

' COperatorPlus

Inherits COperator

' constuctor
Public Sub _new()

  Me.SetOperatorName("+")

End

Static Public Sub _call(iLeft As Integer, iRight As Integer) As Integer

  Return iLeft + iRight

End

Enfin, voici une utilisation possible dans le code :

Public Sub Main()

  Dim addition As New COperatorPlus
  Dim result As Integer

  result = addition(3, 4)
  Print result

End

Que de progrès les amis !