Einführung in Apples neue Programmiersprache Swift, Teil 1

Sprachen  –  65 Kommentare
(Bild: mikelane45 (CanStockPhoto))

Die Vorstellung der neuen Programmiersprache Swift auf der diesjährigen WWDC gehörte sicherlich zu den großen Überraschungen der Konferenz, die trotz ihres Namens eher für innovative Hardwareankündigungen bekannt ist. Swift verspricht Entwicklern spürbare Erleichterungen beim Entwickeln von Applikationen für Cocoa und Cocoa Touch.

Die zweiteilige Artikelserie über Swift möchte einen guten Einstieg in die Sprache und ihre Konzepte vermitteln.

  • Teil 1 gibt zunächst einen ersten Überblick und taucht danach tiefer in die Materie ein. Die Leser lernen die wichtigsten Komponenten des Typsystems kennen, inklusive Strukturen und Klassen.
  • Teil 2 rundet die Tour ab und behandelt die etwas komplexeren Themen, zum Beispiel Vererbung, Protokolle, Erweiterungen, parametrisierte Datentypen, Speicherverwaltung, Closures und Optionals.

Wie alles begann

Vor rund vier Jahren nahm die Entwicklung der neuen Sprache ihren Anfang. Damals startete Apple interne Aktivitäten, um eine Alternative für Objective-C zu schaffen. Als Chris Lattner im Juli 2010 mit der Swift-Entwicklung begann, wussten nur wenige Personen von dem Projekt – Lattner leitet heute die Abteilung für Entwicklerwerkzeuge. Erst spät im Jahr 2011 beteiligten sich weitere Apple-Entwickler an der Realisierung. Im Juli 2013 rückte Swift dann verstärkt in den Fokus der Entwicklungsabteilung.

Der jüngste Spross unter den C-basierten Programmiersprachen hat nicht das Ziel, dem altehrwürdigen Objective-C den Todesstoß zu versetzen, sondern mit ihm harmonisch zu koexistieren. So zumindest die öffentliche Lesart. Swift versteht sich mit Objective-C-Code, was auch nötig ist, weil sonst der Zugriff auf wichtige Bibliotheken wie Cocoa nicht oder nur über Umwege möglich wäre. Immerhin sind die meisten iOS- und OS-X-Entwickler mit diesen Bibliotheken so vertraut, dass ein kompletter Neubeginn kontraproduktiv wäre.

Bei näherer Analyse der noch etwas unhandlichen Dokumentation, die übrigens kostenlos zur Verfügung steht (entweder als Buch im Apple Book Store oder als Tutorial "A Swift Tour"), kommt unweigerlich die Patchwork-Metapher in den Sinn. Denn Swift nimmt Anleihen aus vielen Sprachen, beispielsweise aus Scala, C, Objective-C, Ruby, Java, C# und Haskell. Bei Sprachen gilt übrigens das Übernehmen von bewährten Konzepten anderer Sprachen nicht als ehrenrührig, ganz im Gegenteil.

Wer sich momentan mit Swift beschäftigt, sollte aber bedenken, dass sich Swift noch im Reifungsprozess befindet. Bis zur finalen Freigabe im Herbst gibt es mit Sicherheit noch Änderungen und Erweiterungen. Entwickler für iOS und OS X vermelden schon jetzt, dass mit Swift wesentlich kompaktere Anwendungen entstehen. Die Performance soll ebenfalls besser sein, wenn man den Bloggern Glauben schenkt. Ein weiteres Ziel ist "Safety", also der Schutz von Entwicklern vor gröberen Schnitzern, sprich vor sich selbst. Dieses Ziel erreicht die Sprache gerade im Vergleich zu Objective-C recht gut. Absolute Sicherheit kann es aber nicht geben, da Swift-Anwendungen nicht in einer Sandbox laufen. Daher ist destruktiver Code wie das komplette Löschen der Festplatte auch in Swift-Programmen möglich, was Codebeispiele demonstrieren.

Im Augenblick bietet Apple dem Swift-Einsteiger eine eher bescheidene Anzahl repräsentativer Codebeispiele. Es gibt eine Sprachreferenz und ein Tutorial, aber keine anspruchsvollen Beispiele. Auch die Webseiten der ersten Swift-Pioniere enthalten überwiegend nur leichte Kost – meistens in Gestalt der unvermeidlichen Varianten von "Hello, world". Ansonsten sind bei einer Websuche allenfalls ein Geschicklichkeitsspiel und UI-Beispiele anzutreffen. Das dürfte sich aber bald ändern in Anbetracht der rapide wachsenden Zahl von Webseiten mit Swift-Bezug. Derzeit ist die neue Sprache aus subjektiver Sicht des Autors wesentlich entwicklerfreundlicher als Objective-C, aber wer die Sprache jetzt lernen möchte, fühlt sich ein wenig ins kalte Wasser geworfen.

Von C nach Objective-C – und der moderne Anstrich

Brad J. Cox hatte Objective-C während des Siegeszugs objektorientierter Programmiersprachen Mitte der 80er-Jahre entwickelt. Den damaligen Marktgegebenheiten folgend, stellte die Sprache ursprünglich eine Art Fusion aus dem systemnahen, prozeduralen C mit dem objektorientierten und teilweise funktionalen Smalltalk dar. Dem Mac-OS-Entwickler hat dieser Ansatz nicht immer das Leben erleichtert. Ohne Apples Ritterschlag durch die Ernennung von Objective-C zur Mac-OS/-OS-X-Entwicklungssprache gäbe es Objective-C vermutlich heute nicht mehr. Und da ist die Frage berechtigt, ob es nicht Zeit wäre, die rund 30-jährige Sprache abzulösen. Umso mehr, wenn man dadurch Entwickler anlocken kann, die bisher für andere Plattformen entwickeln. Von "syntaktischem Zucker" abgesehen, dürften sich Java- und C#-Programmierer jedenfalls im Swift-Ökosystem recht schnell heimisch fühlen. Nur noch wenig erinnert an das "Ur-Objective-C" aus der OO-Kreidezeit.

Dem Trend moderner Programmiersprachen folgend, folgt Swift einem Multiparadigmenansatz. Nebst Objektorientierung integriert die Sprache funktionale Elemente wie Closures und "for-Comprehensions", generische Elemente, beispielsweise parametrisierte Typen, und hybride Kombinationen davon, etwa den generischen und funktionalen Maybe-Monaden. Zudem enthält Swift Standardbibliotheken, die unter anderem Collection-Typen enthalten. Darunter übliche Verdächtige wie Dictionaries, Felder und Tupel.

Zur Veranschaulichung des Look & Feel von Swift nachfolgend ein Beispiel aus der Dokumentation. Die Verwandtschaft mit anderen Sprachen ist unübersehbar. Entwicklern mit Java-, C#- oder Scala-Erfahrung müsste sich deshalb der Code einigermaßen erschließen.

class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class."
var anotherProperty: Int = 69105
func adjust() {
simpleDescription += " Now 100% adjusted."
}
}

var a = SimpleClass()

a.adjust()

let aDescription = a.simpleDescription

struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A simple structure"
mutating func adjust() {
simpleDescription += " (adjusted)"
}
}

var b = SimpleStructure()

b.adjust()

let bDescription = b.simpleDescription

Zunächst fällt ein kleines, aber effektives Detail auf. Das Wegoptimieren von Strichpunkten als Trennzeichen entlockt dem Compiler-Bauer nur ein müdes Lächeln, erleichtert aber das Leben der Entwickler. Wer möchte, kann trotzdem Strichpunkte benutzen. Aneinandergereihte Anweisungen in derselben Zeile müssen Entwickler mit einem Komma trennen. Dem "lazy programmer" bietet die Sprache aber noch viele weitere "Abkürzungen".