Zum Inhalt springen

BlitzMax: Methoden

Aus Wikibooks

Method

[Bearbeiten]
Type Person
   Field Vorname:String
   Field Nachname:String
   Field Geburtstag:Datum
EndType
Type Datum 
   Field Tag:Byte
   Field Monat:Byte
   Field Jahr:Short
EndType

Das Beispiel der vorigen Seite hat jedoch einen Nachteil: Man muss immer wenn man eine neue Instanz von "Person" erstellt auch eine Instanz von "Datum" erstellen:

Local Test:Person           'Variable definieren
Test = New Person           'Instanz von "Person" erstellen
Test.Geburtstag = New Datum 'Instanz von "Datum" erstellen

Hierfür gibt es jedoch eine einfachere Lösung: Mit dem Keyword Method kann man in "Person" ein Unterprogramm erstellen, mit dem die Erstellung von "Datum" programmgesteuert realisieren kann. Dieses Unterprogramm wird mit EndMethod beendet:

Type Person
   Field Vorname:String
   Field Nachname:String
   Field Geburtstag:Datum
   Method DatumErstellen()
      Geburtstag = New Datum
   EndMethod
EndType
Type Datum 
   Field Tag:Byte
   Field Monat:Byte
   Field Jahr:Short
EndType

Local Test:Person           'Variable definieren
Test = New Person           'Instanz von "Person" erstellen
Test.DatumErstellen()       'Instanz von "Datum" erstellen

Zugegeben, viel einfacher ist es dadurch nicht geworden, da immer noch die Methode aufgerufen werden muss. Aber das kommt jetzt: Es gibt eine reservierte Methode, die automatisch aufgerufen wird, Wenn eine Instanz erstellt wird, sofern sie vorhanden ist. Diese Methode hat den Namen New() (nicht zu verwechseln mit dem Operator New, hinter dem keine Klammern stehen). Eine solche automatisch Wenn eine Instanz neu erstellt wird, so wird automatisch bei Erstellung einer Instanz aufgerufene Methode bezeichnet man als Konstruktor:

Type Person
   Field Vorname:String
   Field Nachname:String
   Field Geburtstag:Datum
   Method New()
      Geburtstag = New Datum
   EndMethod
EndType
Type Datum 
   Field Tag:Byte
   Field Monat:Byte
   Field Jahr:Short
EndType

Local Test:Person           'Variable definieren
Test = New Person           'Instanz von "Person" erstellen

Jetzt kann auf die manuelle Erstellung von "Datum" verzichtet werden. Beachtenswert ist noch, dass in der Methode die Eigenschaft "Geburtstag" wie eine normale Variable angesprochen wird.

Aber mit Methoden geht noch mehr, dazu wird eine weitere Beispiel-Methode eingefügt

Type Datum 
   Field Tag:Byte
   Field Monat:Byte
   Field Jahr:Short
   Method Setzen(Tag:Byte, Monat:Byte, Jahr:Short)
      Self.Tag = Tag
      Self.Monat = Monat
      Self.Jahr = Jahr
   EndMethod
EndType

Die Methode "Setzen" des Type "Datum" hat als 3 lokale Variablen aus Parametern, die die gleichen Namen haben, wie die Eigenschaften des Type. Mit Self.Identifer werden in der Methode die Type-Eigenschaften verwendet, während nur der Identifer die Lokalen Variablen der Methode auswählt. Die Definition mit gleichen Namen ist möglich, weil sich der Gültigkeitsbereich der Variablen nicht überschneidet: Die mit Field definierten Type-Eigenschaften gelten nur im Type, während die Parameter der Methode nur in der Methode gültig sind. Mit Self greift man also vom lokalen Bereich der Methode in den übergeordneten lokalen Bereich des Type. {{Navigation h