iPhone Objective-C: equivalenza nella sintassi

La sintassi con le parentesi quadre in Objective-C è uno dei motivi di maggior frustazioni per chi proviene da altri linguaggi (ad oggetti). Tuttavia, fatta l’abitudine, ci si rende conto di quanto il codice diventi ugualmente leggibile con questa il mix della sintassi classica e quella più spiccatamente Smalltalk. Ad esempio vediamo come la stessa procedura può essere scritta in entrambe le sintassi. Prendiamo l’inizializzazione di un UIAlertView:

1
2
3
4
5
6
7
8
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo"
                                            message:@"Messaggio"
                                            delegate:self
                                            cancelButtonTitle:@"Annulla"
                                            otherButtonTitles:@"Ok",nil];
myAlert.tag = 1;
[myAlert show];
[myAlert release];

L’impostazione del tag potavamo farla anche così:

1
2
3
4
5
6
7
8
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo"
                                            message:@"Messaggio"
                                            delegate:self
                                            cancelButtonTitle:@"Annulla"
                                            otherButtonTitles:@"Ok",nil];
[myAlert setTag:1];
[myAlert show];
[myAlert release];

Stessa cosa in lettura durante l’evento:

1
2
3
4
5
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if( alertView.tag == 1 ) { // ...
    // oppure
    if ([alertView tag] == 1) { // ...
}

Nota bene: non tutte le proprietà o metodi hanno questa duplice sintassi. Nel caso dell’UIAlertView abbiamo questa doppia funzionalità. Per altri oggetti o in altri casi, invece, potrebbero funzionare una sola delle due… ma non chiedetevi perchè (dipende da come gli sviluppatori hanno definito l’interfaccia).

Non ci sono commenti per questo Post

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


Stop SOPA