Swift oder Java

Wer heutzutage Apps für mobile Endgeräte entwickeln möchte, wählt als Zielplattform meist Android oder iOS. Allerdings bieten die beiden Plattformen unterschiedliche Programmiersprachen zur Erstellung von Applikationen an: Während Android schon seit längerer Zeit erfolgreich auf Java setzt, will Apple mit dem Sprung von Objective-C auf das seit etwa 2010 entwickelte Swift die Stärken vieler verschiedener Sprachen miteinander vereinen. Dies soll die Entwicklung bzw. das Programmieren für iOS sowohl einfacher als auch in gewisser Weise intuitiver machen. Swift ist im Vergleich zu Java von 1995 also die deutlich jüngere Sprache. Allerdings würde man Apple Unrecht tun, wenn man behaupten würde. dass Swift eine müde Kopie von Java ist: Es gibt auch beim praktischen Programmieren durchaus einige Unterschiede zwischen den Sprachen für auf Android bzw. iOS basierende Devices.

 

Unterschiede und Gemeinsamkeiten

Sowohl bei Java als auch bei Swift handelt es sich um objektorientierte Programmiersprachen. Diese erlauben z.B. über Klassen eine saubere Kapselung der einzelnen Komponenten der Programmierumgebung. Dies bedeutet im Groben, dass auf die verschiedenen privaten Methoden und Variablen einer Klasse nur innerhalb dieser Klasse zugegriffen werden kann. Da diese von außerhalb unsichtbar sind, werden beim Programmieren versehentliche Änderungen interner Variablen und Methoden von außerhalb der Klasse unmöglich. Dies unterscheidet sich deutlich von der Programmierung in früher entstandenen funktionalen Programmiersprachen wie C, in denen sich beim Programmieren grundsätzlich "private" und "öffentliche" Bestandteile eines Programmteils nicht gegeneinander abgrenzen ließen.

 

Die Kommunikation einer Klasse mit der Außenwelt geschieht z.B. bei der Programmierung für Android in Java ausschließlich über die als öffentlich zugänglich gekennzeichneten Methoden und Variablen. Zur Veranschaulichung ein Beispiel: Die Software zur Ansteuerung des Vibrationsmotors eines unter Android laufenden Telefons hat in der Regel nichts mit der Kamera zu tun. Deshalb müssen diese beiden Komponenten nicht wissen, was die jeweils andere intern erledigt und auch nicht in deren Vorgänge eingreifen. Allerdings können die beiden immer noch über die als öffentlich deklarierten Methoden miteinander kommunizieren, falls dies im Rahmen eines Programmierprojektes (etwa: Ausschalten der Kamera bei Vibration, um verwackelte Bilder zu vermeiden) einmal nötig sein sollte.

 

Das von Google herausgegebene API für Android war bereits seit seinen Anfangstagen für die Nutzung mit Java ausgelegt. Über die verschiedenen importierten Klassen kann über Java in relativ einfacher Weise auf die verschiedenen Komponenten eines auf Android basierenden Geräts zugegriffen werden. So lassen sich Vibrationsmotor, Kamera, GPS und andere Hardware in einheitlicher Weise ansprechen, ohne auf die Besonderheiten des jeweiligen Smartphones Rücksicht nehmen zu müssen: Das offizielle API, um unter Android laufende Geräte in Java zu programmieren, macht es möglich. Durch diese Abstraktionsschicht spielt es beim Schreiben des Quellcodes keine Rolle mehr, ob die eigene App später die Kamera eines auf Android basierenden Geräts von Samsung, Sony oder einem der vielen weiteren Hersteller nutzen soll. Dies erleichtert die Programmentwicklung natürlich erheblich.

 

Dieses Konzept hat sich zum effektiven Arbeiten bewährt und findet sich naturgemäß auch bei der Entwicklung von Apps fürs iOS unter Swift wieder. Denn auch Swift greift in ähnlicher Weise auf eine Schnittstelle für die Programmierung von auf iOS und ähnlichen Betriebssystemen laufenden Geräten zu. Auch hier kann der Quellcode unabhängig vom später genutzten Endgerät entworfen werden. Allerdings gibt es die klare Einschränkung, dass sich mit Swift am besten auf iOS und einigen anderen Betriebssystemen von Apple laufende mobile Devices programmieren lassen. Es gibt zwar neuere Bestrebungen, Swift auch für die Entwicklung abseits von iOS und Co. unter einer Open-Source-Lizenz plattformübergreifend z.B für die Android-Entwicklung nutzbar zu machen, allerdings ist noch abzuwarten, inwieweit es sich hier durchsetzen wird. 

 

Fest steht allerdings bereits jetzt: Im Gegensatz zum früher entstandenen Objective-C (ebenfalls für iOS etc.) enthält die Sprache Swift einige Sicherheitsvorkehrungen, um häufig auftretende Fehler zu vermeiden. Beispielsweise wird die direkte Arbeit mit Zeigern (Angaben, wo im Speicher der gesuchte Wert zu finden ist) in Swift so weit wie möglich vermieden bzw. konzeptionell verbessert, da diese häufig versehentlich mit ungültigen Adresswerten ausgestattet werden. Insbesondere für Einsteiger sind solche Fehler nicht immer einfach zu finden und zu beheben. Dazu mehr im nächsten Abschnitt.

 

Dem im Programmieren mit Java erfahrenen Entwickler fällt ein wesentlicher Unterschied bei der Programmierung für iOS mit Swift sofort ins Auge: Befehle müssen nicht mehr mit einem Semikolon abgeschlossen werden. Funktionsaufrufe wie print("Hallo Welt.") sind in Swift also problemlos möglich. Unveränderliche Variablen werden beim Programmieren für iOS in Swift mit let deklariert, während in Java zu diesem Zweck üblicherweise mit dem Schlüsselwort "const" gekennzeichnete Variablen genutzt werden. Anders als beim Programmieren von Apps für Android in Java ist die explizite Angabe eines Datentyps in Swift weniger essentiell: Inferred Datatypes bieten die Möglichkeit, einer Variablen etwa den Datentyp "String" zuzuweisen, indem man ihr einfach einen String zuweist. Die aus älteren Programmiersprachen wie C bekannten Zeiger werden konzeptionell hier beim Programmieren fürs iOS durch die sogenannten Optionals ersetzt, die weniger schwierig zu handhaben sind.

 

Ähnlich wie beim Programmieren für Android unter Java muss man sich auch unter beim Entwickeln für iOS unter Swift bei einfachen Aufgaben nicht selbst ums Aufräumen kümmern: Speicherinhalte, die vom erstellten Programm nicht mehr benötigt werden, werden beim Programmieren in Swift vom Automatic Reference Counting (ARC) kurzerhand entfernt. Allerdings geschieht dies schon, sobald keine Verweise mehr auf die jeweilige Variable zeigen. Wer sich schon beim Programmieren von Apps für Android also schon einmal über den eher behäbigen internen Garbage Collector aufgeregt hat, wird unter Swift möglicherweise glücklicher werden.

 

Ein weiterer Unterschied bei der Entwicklung von Apps fürs iOS gegenüber dem Programmieren von Apps für Android: Anders als in Java kann der Entwickler sich bei Swift entscheiden, ob ein bestimmter Datentyp als Objektreferenz oder als Wert übergeben werden soll. Letzteres kann bei bestimmten Anwendungen Performancevorteile liefern, da das beim Programmieren in Java übliche Arbeiten mit Objektreferenzen nicht für alle Datentypen gleichermaßen geeignet ist. Abhängig von dem von einer einzelnen Instanz des Objekts belegten Speichers kann durch die Objektreferenzen ein deutlicher Overhead mit den damit verbundenen Leistungseinbußen entstehen.

Was tun, wenn man weder Android noch iOS bevorzugt?

Wenn es keine klare Systempräferenz gibt, können für die Entscheidung für das Programmieren für Android mit Java oder für iOS mit Swift immer noch andere Aspekte entscheidend sein. So kann beispielsweise ein kleines Android-Projekt zur "spielerischen" Einarbeitung in die viel gefragte Programmiersprache Java dienen. Umso schöner, wenn die Arbeit getan ist und man ihre Früchte auf dem eigenen auf Android laufenden Smartphone oder Tablet bewundern kann - und man bei der Erstellung eventuell noch den Grundstein für einen späteren Job als Java-Entwickler gelegt hat. Diese Apps lassen sich so einfach oder so detailliert gestalten, dass sowohl Einsteiger als auch Fortgeschrittene sie zum Selbststudium - wahlweise mit Anleitung - nutzen können. Eine entsprechende Einführung in Konzepte der objektorientierten Programmierung ist prinzipiell natürlich auch mit Swift möglich - hier muss man sich allerdings bei einem etwaigen späteren Umstieg auf Java (oder eine andere Sprache) erst wieder an eine etwas andere, neue Syntax gewöhnen.

 

Wer bereits weiß, dass er in der Zukunft einen großen Teil seiner Arbeitszeit mit dem Programmieren in Java verbringen wird, sollte daher vielleicht besser gleich in die Android-Entwicklung mit Java einsteigen. Andererseits werden die meisten Entwickler sowieso früher oder später weitere Programmiersprachen lernen müssen. Das Programmieren mit Swift bietet einige interessante Konzepte, die sich auch in anderen modernen Sprachen wie z.B. Haskell wiederfinden lassen. Hier wird man also vielleicht beim Programmieren später noch einigen alten Bekannten begegnen.

 

 

Fazit

Ob man sich nun fürs Programmieren von Apps für iOS oder Android entscheidet, mit Java und Swift stehen zwei leistungsstarke objektorientierte Programmiersprachen zur Auswahl. Auch wenn Swift dabei momentan größtenteils zur Entwicklung von Apps für iOS genutzt wird, bleibt abzuwarten, wie die Zukunft dieser vielversprechenden Programmiersprache abseits der mobilen Endgeräte aussehen wird. Auch Google zieht die Sprache zur Entwicklung unter Android seit 2017 bereits in Erwägung, was dem Entwickler eine sehr effektive gleichzeitige Einarbeitung in die Programmierung für die derzeit beiden größten mobilen Plattformen erlauben würde.

 

Weitere Infos zum Thema gibt es hier: