Gambas 3/Gambas3LeLangage/L'orienté objet avec Gambas/Créer une collection personnalisée

Créer une collection personnalisée avec Gambas

modifier

Vous savez déjà instancier et utiliser l'objet Collection. Peut-être aurez-vous besoin un jour de créer une classe pour représenter une collection personnalisée ?

Si tel est le cas, il suffit de créer une classe qui contient un tableau ou une collection privée puis d'écrire les méthodes spéciales :

  • _next()
  • _get()
  • _put()

qui ont été prévues à cet effet.  :-)

' Gambas class file

' GambasIterable

' En Gambas, il y a un itérateur implicite qui : 
' - met Enum.Index à Null et qui
' - appelle _next()
' - appelle _get()

Private $col As New Collection

' _next() est une des méthodes spéciale de Gambas ...
' _next() renvoie un Variant qui est l'identifiant du prochain élément.

Public Function _next() As Variant

  If IsNull(Enum.Index) Then
    Enum.Index = 0 ' select first item ... 
  Else
    Inc Enum.Index
  Endif
  If Enum.Index >= $col.Count Then
    Enum.Stop
    Return
  Endif

  Return $col[Enum.Index]

End

' _get() est une des méthodes spéciale de Gambas ...
' _get() renvoie un élément de la collection selon l'identifiant
Public Function _get(Index As Integer) As String

  Return $col[CStr(Index)]

End

Public Sub _put(Value As Variant, Index As Integer)

  If Index <= $col.Count Then
    $col[CStr(Index)] = Value
  Else
    Error.Raise("Out of range or Wrong Key format (Integer wanted)!")
  Endif

End