Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Les foncteurs
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 !