Provengo da oltre venti anni di programmazione su windows, e devo dire che per creare la mia prima applicazione su iPhone, ho dovuto imparare non solo una nuova piattaforma ma un intero nuovo linguaggio di programmazione.
La frase “quando si sa programmare, si può programmare con qualsiasi linguaggio” è vera, ma è anche vero che per passare da VB Net a Objective c è richiesto qualche sforzo.
Ho preso come piccolo esempio la classica “prima” applicazione di ogni programmatore “Hello, World!”.
Metodi a confronto
In Objective C le chiamate di metodi rappresentano in realtà messaggi inviati agli oggetti in memoria da un piccolo motore di runtime. Si tratta di una distinzione sottile ma importante, che consente di ottenere un comportamento sorprendentemente dinamico in un linguaggio di programmazione che inizialmente potrebbe sembrare piuttosto formale. Per esempio, se richiamate un metodo su un riferimento a un oggetto che risulta nil non si verifica un crash né un errore: il runtime rileva che l’invio di un messaggio a un oggetto inesistente non avrebbe senso, e perciò non lo invia.
Le classi in Objective-C si sviluppano creando un file header e un file di implementazione, che hanno lo stesso nome ma estensioni diverse (.h .m). Nel file .h (l’header) si inseriscono le parti pubbliche della classe: nomi e tipi delle variabili istanza e segnature dei metodi, che descrivono il tipo del valore di ritorno e i parametri. Nel file di implementazione si implementano i metodi con il codice, dichiarando e utilizzando tutte le variabili locali necessarie che sono relative soltanto all’implementazione e non devono essere visibili ad altre classi.
Vediamo un esempio di codice, come anticipato, il classico “Hello, World!”:
// HelloWorld.h
@interface HelloWorld : object
- (id) hello;
@end
// HelloWorld.m
#import "HelloWorld.h"
@implementation HelloWorld
- (id) hello {
printf("Hello, World!");
}
Per usare la classe appena creata useremo:
HelloWorld *myHello = [[HelloWorld alloc] init];
[myHello hello];
Differente è invece lo stesso caso in Vb.Net:
Public Class HelloWorld
Public Sub Hello
Console.WriteLn("Hello, World!")
End Sub
End Class
Per richiamarlo useremo:
Dim myHello As New HelloWorld
myHello.hello
Una prima differenza rispetto all’Objective-C sta nel fatto che, nel caso del VB.Net, il metodo “hello” può non avere un’implementazione. In questo caso il compilatore produce un avvertimento.
Una possibile soluzione a questo problema, potrebbe essere quella di controllare l’esistenza del metodo, prima del suo richiamo:
Dim myhello As New HelloWorld
If myHello.GetType.GetPropInfo(“Hello”) IsNot Nothing Then myHello.hello
Un’altro modo potrebbe essere quello di trattare l’oggetto appunto come “oggetto”:
Dim myhello As New HelloWorld
Ctype(myhello,object).Hello
Oppure, sempre in VB.Net, potremmo utilizzare gli eventi:
Public Class HelloWorld
Private WithEvents moHelloWorldEventSource As HelloWorldEvents
Public Sub New(eventSource As HelloWorldEvents)
moHelloWorldEventSource = eventSource
End Sub
Private Sub Hello Handles moHelloWorldEventSource.Hello
Console.WriteLn(“Hello World”)
End Sub
End Class
Public Class HelloWorldEventSource
Public Event Hello
Public Sub Hello
RaiseEvent Hello
End Sub
End Class
Per invocare quanto appena scritto useremo:
Dim helloEvents As New HelloWorldEventSource
Dim myhello As New HelloWorld(helloEvents)
helloEvents.Hello
Come vedete l’Objective-C in realtà semplifica non poco le cose. Possiamo tranquillamente affermare che lo sforzo per la migrazione da un linguaggio all’altro viene senz’altro ripagato a dovere.
Ci sarebbe ancora molto da scrivere, per adesso meglio fermarsi qui, non voglio dilungarmi troppo sull’argomento e far diventare questo articolo un trattato noioso.
Alla prossima.
2 Responses to “L#011 – Da VB.Net a Objective-C: Prime considerazioni”
9 Luglio 2010
FrancescoL’articolo è magnifico sopratutto per chi come me e te a tuo tempo , viene da vb.net. Per noi credo che l’approccio a questo linguaggio sia tutt’altro che facile perché leggo e studio da quai due settimane e ho capito poco e niente. Risulta invece molto più chiaro quando si confrontano le cose con le proprie conoscenze di vb.net.
Ti prego scrivine altri , grazie per il magnifico articolo.
Francesco
15 Aprile 2011
VasaMolto interessante, anch’io sto passando da Vb.net a Obj-C. In realtà molti snobbano Vb.net il quale invece ha tantissime qualità e sopratutto il tempo di realizzazione che Obj-C non ha per creare un’appplicazione piu’ evoluta, non solo , ma la sinstassi del Vb.net è Humal Logic ovvero molto vicina ai costrutti mentali del linguaggio umano, cosa che il C ed Obj-c hanno meno.Cio’ non toglei il fatto che tecnicamnete Obj-C abbia anch’esse dei vantaggi sopratutto quello di essere il linguaggio di sviluppo per Mac etc etc.
Probabilmente appena sarà possibile “basic” per Iphone e Ipad (vedi Realbasic ) avverra una grande migrazione di massa, ma fino a quel momento ci toccherà ( con piacere ) studiare Obj-c.
Graie comunque di queste lezioni e articoli