Syntaxe

Déclare une fonction qui appartient à un TYPE. À l’intérieur, SELF est l’enregistrement sur lequel la méthode est appelée.

METHOD <method>([<parameter>, …])
  SELF.<field>
  EXITMETHOD [<value>]
  RETURN [<value>]
ENDMETHOD
<record>.<method>([<argument>, …])

S’écrit aussi : ENDMETHOD, EXITMETHOD, SELF

Les éléments

<method>Le nom de la méthode. La casse ne compte pas. New et Delete sont particulières : voir NEW et DELETE.
<parameter>Un paramètre, écrit comme pour une FUNCTION : typé, avec valeur par défaut, OPTIONAL, REF ou variadique.
<field>Un champ de l’enregistrement, ou une autre méthode : SELF.Reset().
<value>La valeur rendue par la méthode. Facultative.
<record>N’importe quel enregistrement : une variable, une case de tableau (counters(2)), l’élément courant d’une liste (counters()).
<argument>Une valeur passée au paramètre correspondant.

À savoir

  • Une méthode se déclare dans son TYPE, parmi les champs. Les parenthèses sont obligatoires, même vides : METHOD Reset().
  • Écrire SELF.value modifie l’enregistrement sur lequel la méthode est appelée, y compris une case de tableau ou un élément de liste.
  • EXITMETHOD <value> et RETURN <value> quittent la méthode avec une valeur. ENDMETHOD ne prend pas de valeur, contrairement à ENDFUNCTION.
  • Une méthode n’a pas de type de retour : METHOD Half() AS integer est refusé (« Invalid field in BASIC type »). Convertissez la valeur vous-même avant de la rendre.
  • Refusés à la compilation : une METHOD hors d’un TYPE (« METHOD requires a containing TYPE »), une METHOD dans une METHOD, deux méthodes de même nom dans un TYPE, une valeur après ENDMETHOD, et END METHOD en deux mots.
  • Ne nommez pas une méthode Length, Find, Sort, Insert ou Remove. Ces noms appartiennent aux membres des tableaux, et l’appel arrête le programme.
  • Une copie d’un enregistrement a les mêmes méthodes. Dans un programme avec DO … LOOP, une variable du programme utilisée par une méthode doit être déclarée GLOBAL, comme pour toute FUNCTION.

Exemple

TYPE Counter  value AS integer  METHOD Add(amount AS integer)    SELF.value = SELF.value + amount    EXITMETHOD SELF.value  ENDMETHOD  METHOD Reset()    SELF.value = 0  ENDMETHODENDTYPEc AS CounterConsole(Str(c.Add(5)))   ' 5Console(Str(c.Add(3)))   ' 8c.Reset()Console(Str(c.value))    ' 0