The Power of Swift

von Hubert Schmid vom 2014-07-13

Der Vortrag JRuby: The power of Java and Ruby von Ola Bini enthält ein häufig zitiertes Beispiel, das die Ausdrucksstärke von Sprachen wie Ruby denen wie Java gegenüberstellen soll. Dieses Beispiel hole ich nun hervor und zeige im Vergleich dazu eine Implementierung in Swift – der designierten Programmiersprache für Apples Plattformen.

Die Ruby-Implementierung aus dem Vortrag ist im folgenden Listing zu sehen. Die zugehörige Java-Variante umfasste dagegen mit allem Boilerplate über 25 Zeilen.

list = ['Ola', 'Charles', 'Tom', 'Marcin', 'Nick', 'Mentalguy', 'Bill', 'Vladimir'] puts list.sort_by(&:length).join(", ")

Das Programm enthält im Wesentlichen ein Listen-Literal bestehend aus einigen Vornamen sowie eine Anweisung für ihre Ausgabe. Dabei werden die Zeichenketten zunächst nach Anzahl der UTF‑16-Code-Units (sic) sortiert und anschließend mit der Zeichenkette ", " konkateniert.

Eine entsprechende Swift-Implementierung zeigt folgendes Listing. Anzumerken ist, dass sie bereits in dieser Form vollständig ist. Die beiden Anweisungen lassen sich entweder direkt im Swift-Playground ausführen und sind für sich genommen bereits der vollständige Code eines Konsolenprogramms.

let list = [ "Ola", "Charles", "Tom", "Marcin", "Nick", "Mentalguy", "Bill", "Vladimir" ] println(join(", ", sorted(list) { countElements($0) < countElements($1) }))

Die Swift- und Ruby-Implementierungen sind erstaunlich ähnlich. Erstere ist ein wenig länger, da die Sortierfunktion der Swift-Bibliothek eine Vergleichs- statt einer Schlüsselfunktion erwartet. Dafür ist sie aber auch statisch typisiert und weist nicht das absurde Verhalten bezüglich UTF‑16-Code-Units auf.

Was sagt dieses Beispiel nun über Swift aus? Praktisch nichts! Denn ein genauerer Blick zeigt: Abgesehen vom Listen-Literal verwendet die Implementierung eigentlich kein Feature, das Swift als moderne und bemerkenswerte Programmiersprache auszeichnet. Stattdessen stellt das Beispiel mal wieder nur sich selbst in Frage.