Da Actionscript ad Objective-C

Ho pensato che potrebbe essere utile a chi si è avvicinato da poco allo sviluppo di applicazioni per Apple iPhone, confrontare Adobe Actionscript – il linguaggio utilizzato in Adobe Flash e Adobe Flex, più diffuso tra i neo-programmatori – e Objective-C, il linguaggio utilizzato da Apple per sviluppare le sue applicazioni. Objective-C è a tutti gli effetti un linguaggio ad oggetti nel senso puro, non che Actionscript non lo sia, ma Objective-C ha sicuramente una marcia in più in quanto è un’estensione dell’ANSI C e la sua sintassi è un mix tra C/C++ e Smalltalk; è un vero OO (Object-oriented language). Moltissime caratteristiche dell’Objective-C non sono presenti in Actionscript che, nell’ultima release 3.0, ha dimostrato di poter crescere nonostante sia ancora lontano dal profilo di un buon linguaggio di sviluppo ad oggetti.

Classi

Ad esempio vediamo come vengono diversamente strutturate le definizioni delle classi in Actionscript e Objective-C.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// pakage - per il namespacing di Adobe
pakage {
    // definizione della classe vera e propria
    public class MyClass {
        // definizione delle proprietà (pubbliche o private)
        public var myPropertyVar:String;
        // costruttore
        public function MyClass() {
            // todo
        }
        // metodo pubblico
        public function myMethod():void {
            // todo
        }
    }
}

In Objective-C la prima differenza (ereditata dal C) è la separazione tra le “definizioni” e l’implementazione. In Objective-C avrete sempre a che fare con due tipi di file distinti: .h e .m (in C avremmo .h e .c). I file .h (header file) contengono solo le definizioni, quindi nessuna impostazione o implementazione.

1
2
3
4
5
6
7
8
// myClass.h
@interface myClass : NSObject {
    @public NSString *myPropertyVar;
}

- (void)myMethod;

@end

Nel file .m abbiamo invece:

1
2
3
4
5
6
7
// myClass.m
@implementation myClass

- (void) myMethod {
    // todo
}
@end

Objective-C gestisce le proprietà e i metodi in modo abbastanza differente da Actionscript. Ad esempio il metodo myMethod visto in precedenza viene chiamato (o invocato) in questo modo:

1
[self myMethod];

Si parla, infatti, di Sending Message, più che di chiamata ad un metodo!

Nota: questa caratteristica è reale. Quando si invoca un metodo in Objective-C non si chiama un indirizzo fisico o puntatore a funzione. In Objective-C si spedisce effettivamente all’oggetto un vero e proprio messaggio dove gli si chiede di eseguire un particolare “metodo”

La sintassi con le parentesi quadre, forse la cosa più difficile da digerire anche per gli sviluppatori ANSI C, risulta più chiara e semplice se consideriamo che:

1
2
3
4
5
6
7
myClass.myMethod();
// è uguale a
[myClass myMethod];
// oppure
myClass.myPropertyVar = 1978;
// uguale a
[myClass setMyPropertyVar:1978];

Per quanto riguarda la creazione di oggetti, quindi la creazione di una instanza di una classe, abbiamo:

1
var istanceMyClass:MyClass = new MyClass();
1
2
3
4
5
6
MyClass *istanceMyClass = [[MyClass alloc] init];
// o più semplicemente
MyClass *istanceMyClass = [MyClass alloc];
// Objective-C non supporta in realtà un unico costruttore, come
// avviene invece in Actionscript: vedi ad esempio initWithName,
// initWithFrame o semplicemente init

Tutto questo è solo un semplice aiuto, che lascia inesplorate moltissime altre funzionalità dell’Objective-C; ci sono concetti come i puntatori (simili ai riferimenti in Actionscript – ma non uguali), i protocolli, le categorie e molto altro ancora. Se siete proprio sconfortati nell’affrontare Objective-C, come ho già consigliato altre volte, partite dall’ANSI C, lasciate stare – per adesso – Actionscript, Javascript o PHP! Quest’ultimi, conoscendo bene l’ANSI C, li riscoprirete sotto una luce davvero differente.

Un commento a: “ ”

  1. 18 giu, 2009 Undolog.com» Actionscript trace, Objective-C NSLog():

    [...] il post Da Actionscript ad Objective-C (dove si mettevano a confronto il codice e la sintassi Actionscript e Objective-C), in Actionscript [...]

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL