Az Objective-C programozási nyelv

Alprogramok, modulok

Szintaxis

Lehetőségeit tekintve a C nyelvhez nagyon hasonló metódusokat definiálhatunk, ám szintaktikailag meglehetősen kevés megegyezés fedezhető fel. Az Objective-C metódusainak szignatúrája a következő formájú :

[metódus típus]([visszatérési típus]) [metódus név]: ([paraméter1 típus]) [paraméter1 név]: ([paraméter2 típus]) [paraméter2 név];

A metódus típusa mondja meg, hogy az eljárás osztály szintű (+) vagy példány szintű (-). A visszatérési típus határozza meg a metódus visszatérési típusát. Amennyiben void lenne, azaz nincs visszatérési értéke, úgy eljárásnak definiáltuk a metódust - minden más esetben függvénynek.

Paraméterátadás

A C nyelvhez hasonlóan itt is csak érték szerinti átadást végezhetünk ténylegesen. Természetesen itt is lehetőség van, hogy paraméterként pointert adjunk át, amivel ezen korlátokat átléphetjük.

Változó paraméterszámú függvény

A C nyelvű megoldáshoz hasonlóan itt is három pont jelzi, ha nem tudjuk előre megadni a paraméterek számát. A paramétereken való végigiterálást egy típus és három makró segíti: Mindhárom makró a va_list típus segítségével működik. A va_start makró állítja be a a paraméterek elejére a listát, A va_arg makró segítségével továbbléphetünk a következő paraméterre. Itt meg kell adnunk a paraméter típusát is. Alapvetően Objective C-ben majdnem minden pointer így akkor sem fogunk elcsúszni, ha nem típushelyesen hívták meg a függvényt (a fordító nem tudja megmondani előre, hogy a függvényünket milyen típusú paraméterekkel kell meghívni!). Egyedüli problémánk csúszással akkor lehet, ha double-t, vagy hozzá hasonló nem pointer méretű típust használunk. Végül a va_end makró zárja le a listát.

+ (NSNumber *) addValues:(int) count, ... { va_list args; va_start(args, count); //masodik parametere a fuggveny utolso nevesitett parametere NSNumber *value; double retval; for( int i = 0; i < count; i++ ) { value = va_arg(args, NSNumber *); retval += [value doubleValue]; } va_end(args); return [NSNumber numberWithDouble:retval]; }

A példában szereplő függvény meghívása:

NSNumber sum = [NSNumber addValues: 5, 1, 2, 3, 4, 5];

Modulok

Lehetőség van önálló fordítási egységek létrehozására. A C nyelvhez hasonló módon ez fej- és implementációs állományból tevődik össze. A fejállományok .h, míg a megvalósítást tartalmazó fájl .m kiterjesztésűek. Fejállományra az alábbi módon hivatkozhatunk:

#import “header.h”

Az #import annyiban különbözik az Objective C-ben is használható #include-tól, hogy egy fájlt csak egyszer nyit meg, így nincs szükség az #include-nál megszokott őrszemekre a header állományok elején.

Mivel ebben a nyelvben megtalálhatóak az osztályok, ezért a fejállományba helyezzük el az @interface direktívához tartozó részt, ami lényegében az osztály deklarálása. Az @implementation részt a megvalósítási állományba helyezzük, ahol a fejállományban deklaráltakat implementáljuk.