BlitzMax: Methoden
Method
BearbeitenType 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
BearbeitenAber 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