BlitzMax: Methoden
Method
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.
Self
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