iOS/MacOS: moderne Objective-C Syntax für besser leserlichen Code

Den Themenschwerpunkten
„einfach zu lesender Objective-C Code“ und „neue Features des llvm Clang Compilers „ reiht sich auch dieser Artikel ein und geht dabei kurz auf die Neuerungen der aktuellen Clang-Compiler Versionen 3.1 (Xcode 4.3) und 4.0 (Xcode 4.4) im Hinblick auf die Erweiterungen der Programmiersprache Objective-C ein. Auch das demnächst offiziell verfügbare Xcode 4.5 bringt einige nennenswerte Source-Code relevante Neuerungen mit sich.

In dem folgenden „zusammenhangslosen“ Code-Schnipsel habe ich versucht ausschließlich auf die Neuerungen einzugehen ohne eine sinnhafte Code-Sematik zu präsentieren.

 

  • Properties (im Code-Beispiel „doubleNumber“) müssen nicht mehr im @implementation-Block mit einem @synthesize bestätigt werden. Das „automatische“ Generieren der getter und setter Methoden inkl. der Hinzufügung einer entsprechenden iVar (Instanzvariable, im Code-Beispiel „_doubleNumber „) wird mittlerweile vom Compiler automatisch übernommen. Die mit dem Property-verknüpften Instanzvariablen werden, wie bei Apple schon lange als Konvention empfohlen, mit einem Unterstrich/Underscore zum Propertynamen voran geführt.
  • Methoden müsen nicht mehr vor ihrer Benutzung deklariert werden, sondern können nun „frei“ im @implementation-Block nach logischer Zugehörigkeit platziert werden.
  • Neben NSStrings (@“text“) können nun auch NSNumber, NSArray und NSDictionary Objekte elegant „inline“ deklariert werden. (sogenannte „literals“). Die Syntax ist hierbei sehr stark an JSON orientiert, und eignet sich somit sehr gut um lesbare JSON-Strings direkt im Source-Code nachzuahmen bevor die Umwandlung in valides JSON mit beispielsweise NSJSONSerialization erfolgt
  • Der syntaktisch „sehr sprechende“ lesende und schreibende Zugriff auf Objekte die einen Container bzw. einen Collection-ähnlichen Charakter haben (container[x]) führt Apple gerade erst in XCode ein. Eigene Klassen, die mit dieser tollen Syntax (sogenanntes „subscripting“, bekannt aus Java und weiteren C-orienterten Sprachen) bereits angesprochen werden sollen, müssen lediglich eine Methode implementieren; Je nachdem ob lesend, schreibend, indexorientiert oder key-orientiert Zugriff auf diese erlaubt werden soll:

//NSArray: – (id)objectAtIndexedSubscript:(NSUInteger)idx;
//NSMutableArray: – (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;

//NSDictionary: – (id)objectForKeyedSubscript:(id)key;
//NSMutableDictionary: – (void)setObject:(id)obj forKeyedSubscript:(id);

  • Apple führt erst in einer kommenden iOS bzw. MacOS SDK-Version die NSArray und NSDictionary-Klassen mit dieser schönen subscription-Syntax aus. Eigene Klassen können heute schon davon profitieren.
  • Eine nette Sache ist auch die baldige Einführung von 2 Makros: NS_ENUM und NS_OPTIONS. Diese erlaubt dem Kompiler und XCode (z.b. in switch statements) besser den Gültigkeits-Wertebereich einer Enumeration zu erkennen um somit Programmierfehler bereits früh zu erkennen.

 

Die erwähnten Neuerungen hat Apple mit „Modern Objective-C Syntax“ getauft und bietet sogar einen Assistenten in XCode an, der ein bestehendes Projekt in diese sehr sprechende Syntax umwandelt.
Modern Objective-C Syntax Converter

Der Umstieg auf einen besser lesbaren und somit besser wartbaren Code kann beginnen. 😉

Bewerte diesen Beitrag
Please follow and like us:
Facebook
Facebook
YouTube
YouTube
0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

  Newsletter abonnieren (Jederzeit wieder abbestellbar)