Einführung in Apples neue Programmiersprache Swift, Teil 1

Seite 5: Fazit

Inhaltsverzeichnis

Eigenschaften von Klassen und Strukturen können in verschiedenen Geschmacksrichtungen auftreten. Unter persistenten Eigenschaften (Stored Properties) sind die ganz gewöhnlichen Definitionen von Variablen und Konstanten gemeint, die der Artikel bereits vorgestellt hat.

Sogenannte Lazy Stored Properties haben als Präfix die Annotation @lazy. Hierbei handelt es sich in der Regel um externe Daten, die viel Zeit zum Laden benötigen. Das Laufzeitsystem initialisiert solche Variablen erst dann, wenn es unbedingt erforderlich ist. Dieses Idiom ist auch als Copy-on-Demand bekannt.

Sogenannte berechnete Eigenschaften enthalten Code für Lese- oder Schreibzugriffe und verhalten sich im Wesentlichen wie ihre persistenten Vettern. Unter der Haube bestehen sie aus Setter- und Getter-Funktionen. Sie müssen aber nicht beides haben; eine Nur-lese-Eigenschaft braucht kein set. Natürlich kann die berechnete Eigenschaft in der Implementierung mit einer persistenten Eigenschaft verknüpft sein. Notwendig ist es aber nicht, wie vehicle demonstriert.

var vehicle : State {
get { // liefere Status zurück
return motor.state()
}
set(activate) {
if activate // Motor aktivieren
motor.turnOn()
else // Motor deaktivieren
motor.turnOff()
}
}

In der berechneten Eigenschaft heißt Schreiben der Eigenschaft, den Motor ein- oder ausschalten, je nach Wert von activate und vorherigem Zustand. Lesen der Eigenschaft liefert den aktuellen Status des Motors zurück. Dass es sich um eine berechnete Eigenschaft handelt, bleibt dem Nutzer der Klasse verborgen. Zum Glück, denn sonst wären Implementierungsdetails unnötig sichtbar.

Ein interessantes Konzept von Swift sind Eigenschaftsbeobachter (Property Observers), die auf Änderungen einer Eigenschaft reagieren. Betrachtet sei dazu wieder ein Beispiel:

class Aktie {
let stopLoss = 10.0
var kursWert : Double = 25.2 {
willSet(neuerKurs) {
if neuerKurs <= stopLoss
verkaufen(self)
}
didSet {
println("Der Kurs hat sich von \(oldvalue) auf↵
\(kursWert) geändert")
}
}

}

willSet wird aufgerufen, bevor sich die Eigenschaft ändert, didSet danach. Mit oldValue lässt sich in didSet der ursprüngliche Wert vor der Änderung ermitteln. Wichtig dabei: Beobachter sind erst nach der ersten Initialisierung der Eigenschaft aktiv. Befürchtungen, sie könnten schon bei der Initialisierung auftreten, sind also unnötig.

Die Programmiersprache Swift hat viele Gemeinsamkeiten mit anderen Sprachen, zum Beispiel mit Java und C#. Allerdings gibt es auch teils gravierende Unterschiede, derer sich die Entwickler bewusst sein sollten. Die Lernkurve für Java- oder .NET-Erfahrene dürfte trotzdem relativ steil verlaufen, bei den Bibliotheken dann schon flacher. Das Delta gegenüber dem "Oldtimer" Objective-C ist jedenfalls groß. Trotzdem lohnt es sich auch für eingeschworene Objective-C-Versteher, mehr als einen Blick auf Swift zu wagen, das mit Typsicherheit, kompakteren Code und modernen Konzepten glänzen kann. Noch dazu ist es Entwicklern möglich, ohne große Mühe Code aus beiden Welten zu kombinieren. Was Swift sonst noch zu bieten hat, zeigt der zweite Teil.

Michael Stal
ist bei der Corporate Technology der Siemens AG als Program Manager und Certified Senior Software Architect tätig. Er beschäftigt sich mit verteilten Systemen und Softwarearchitekturen und ist unter anderem Koautor der Buchserie Pattern-Oriented Software Architecture.
(ane)