Come molti programmatori usano fare, anch’io mi costruisco le mie librerie di funzioni pronte per essere riutilizzate in più progetti e in più contesti. Lasciatemi passare il titolo di questo post, forse un po’ azzardato ma, tuttavia, come vedremo, non lontano dalla realtà.
In Objective-C è possibile scrivere e chiamare codice C/C++, compreso l’assembly se è per questo. Questa sua caratteristica lo rende un linguaggio davvero versatile e, per certi aspetti, fenomenale. Da un lato, infatti, è possibile utilizzare e apprezzare la sintassi prettamente Objective-C, dall’altro è possibile eseguire velocemente porting di codice scritto in ANSI C (magari per Digital Unix o Sun) e utilizzarlo comodamente nelle nostre applicazioni iPhone o iPad; per non parlare di tutto il Kernel BSD già disponibile su Mac OS X!
Una delle attività che qualsiasi sviluppatore – anche alle prime armi – dovrebbe fare, è quella di semplificarsi la scrittura del codice, soprattutto semplificare la chiamate a quelle funzioni che utilizza più spesso. Su Apple iPhone/iPad, ad esempio, una qualsiasi applicazione o presto o tardi dovrà fare uso dell’oggetto UIAlertView, strumento comodissimo per informare l’utente di un evento o, eventualmente, per chiedere la conferma o meno ad un’azione. Questo oggetto è utilizzato al pari dell’alert() di Javascript, per intenderci.
Ebbene, una sua chiamata, nella forma più semplice, viene risolta dal codice:
1 2 3 4 5 6 7 8 | UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Corpo del messaggio" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; [alert autorelease]; |
Ora, non sarebbe bello poter scrivere in Objective-C una cosa simile?:
1 | alert(@"Titolo", @"Corpo del messaggio", @"Ok"); |
Ebbene, la cosa è fattibile e semplicissima da implementare. Tutto il codice non appartenente alla classe, come ad esempio accade per le dichiarative #define, va inserito prima di @interface, nel caso del file .h e prima di @implementation, nel caso dei file di implementazione .m.
Possiamo quindi crearci una nostra personale libreria (con codice addirittura misto quindi) con le nostre funzioni – commodity – aggiuntive. A titolo di esempio creiamo due file phpFunctions.h e phpFunctions.m.
Nel file header phpFunctions.h scriviamo:
Nel file di implementazione phpFunctions.m scriviamo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // phpFunctions.m #import "phpFunctions.h" void alert(NSString* title, NSString* message, NSString* dismissButtonTitle) { UIAlertView* alert = [[UIAlertView alloc] initWithTitle: title message: message delegate:nil cancelButtonTitle: dismissButtonTitle otherButtonTitles:nil]; [alert show]; [alert autorelease]; } |
Fatto! Da questo momento in poi, se in un view controller includiamo phpFunctions.h, saremo in grado di scrivere più semplicemente:
1 2 3 4 5 6 7 8 9 10 11 | #import "phpFunctions.h" // ... - (void)mioMessaggio:(int)valore { if(valore > 10) { alert(@"Informazioni", @"Valore maggiore di 10", @"Bravo"); } else { alert(@"Informazioni", @"Valore minore di 10", @"Meno bravo"); } } |
Questa procedura può essere applicata a tante funzioni e funzionalità. Come ulteriore esempio, proviamo a riscrivere la funzione explode() di PHP, che scompone una data stringa in base ad un determinato separatore, restituendo un array di stringhe. In Objective-C questa funzionalità è relaizzata da:
1 2 3 4 5 |
In questo caso procediamo esattamente come prima, ampliando la nostra libreria. Nel file phpFunctions.h aggiungete:
Nel file .m aggiungete:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // phpFunctions.m #import "phpFunctions.h" /*! @function explode() @abstract PHP style @discussion Scompone una strimnga in base ad un delimitatore @param delimiter Stringa delimitatore @param string Stringa da scomporre @result array di stringhe */ NSArray * explode(NSString *delimiter, NSString *string) { return [string componentsSeparatedByString:delimiter]; } |
Il guadagno di codice, in questo caso particolare, non è tantissimo, tuttavia, per chi come me sviluppa in PHP, Javascript, ActionScript e Objective-C, può tornare utile ricrearsi una certa uniformità, o famigliarità, di funzioni. Risulta sicuramente più menomico explode() – se provenite da PHP – che componentsSeparatedByString.
Abbiamo ora due comode funzioni da utilizzare nei nostri progetti. Da questo momento in poi, se dovete scomporre una stringa, potrete scrivere:
1 2 3 4 5 6 |
A voi non rimane altro che far crescere questa libreria, così da velocizzare la scrittura di magnifiche applicazioni per iPhone, iPad e Mac OS o, più in generale, per iOS.








4
Non ci sono commenti per questo Post
Lascia un commento