L#011 – Da VB.Net a Objective-C: Prime considerazioni
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.

















L’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