# Xojo

Xojo è un IDE ed un linguaggio di programmazione basato su un dialetto BASIC orientato agli oggetti, sviluppato e commercializzato da Xojo, azienda con sede ad Austin (Texas), per macOS, Microsoft Windows, Linux, Raspberry Pi, iOS e web.

## Storia

REALbasic è stato creato da Andrew Barry. Il nome originariamente era CrossBasic, per sottolineare la sua capacità di compilare lo stesso codice di programmazione per Mac OS e Java (anche se l'ambiente di sviluppo integrato era solo Mac). Nel 1997 CrossBasic fu acquistato da FYI Software, che cambiò il suo nome in REALbasic e il nome dell'azienda stessa in REAL Software. Fu in questo periodo che venne abbandonato il target Java e furono aggiunti il target Windows ed il supporto database. L'IDE è ora disponibile per Microsoft Windows, macOS, e Linux 32-bit x86 e può compilare applicazioni per Windows (Windows 2000 e superiore), Mac OS X (PowerPC, Intel, e Universal Binary) e Linux 32-bit x86. In aprile 2009 è uscito il nuovo IDE, RealStudio, che permette di creare anche applicazioni web.
Da giugno 2013, la società ha cambiato nome in Xojo, Inc ed il nome del linguaggio di programmazione è stato cambiato in Xojo. Offre una serie di nuove funzionalità ed è distribuito con una nuova politica di licenze.

## Caratteristiche del linguaggio

Anche se il nome originale del linguaggio di programmazione includeva la parola "basic", il linguaggio di programmazione non segue lo standard ANSI per il linguaggio di programmazione BASIC. Ad esempio, il codice sorgente ANSI Standard di semplici programmi demo in TrueBASIC non compilerà senza una riscrittura completa. Xojo non supporta l'operatore standard mat che rende ANSI BASIC uno strumento utile per l'insegnamento di concetti di programmazione introduttivi. Xojo è un linguaggio fortemente tipizzato con una conversione automatica di tipo ridotta al minimo, che supporta ereditarietà singola e interfacce, metodi e proprietà di classe, gestione della memoria automatica tramite il conteggio dei riferimenti, e il sovraccarico degli operatori. Una funzione importante è la capacità di estendere (non solo ereditare) classi esistenti, come le categorie Objective-C. Questa particolarità riduce considerevolmente il bisogno di Abstract factory pattern, che complicano l'uso di Framework applicativi in Java e C++. Xojo include anche la funzione delegate, l'introspezione, e il supporto a namespace, che consentono ai moduli di contenere classi, interfacce e altri moduli.

## Caratteristiche del framework

Il framework incluso supporta:
* dizionari,
* dichiarazioni a librerie esterne (dll, dylib),
* compatibilità con i tipi di dato Visual Basic,
* supporto completo Unicode,
* espressioni regolari,
* API per compilare librerie in C su tutte le piattaforme supportate,
* supporto ActiveX e supporto di base OLE (su Windows); gli oggetti COM non sono completamente supportati,
* icone di notifica (su Windows),
* Windows registry (su Windows),
* thread comparativi,
* linguaggio di scripting integrato nei programmi RB attraverso RBScript,
* analisi sintattica e generazione XML,
* supporto applicazione console e service (solo per la Professional Edition),
* Apple events (su Mac),
* Contatti (su Mac),
* Keychain (su Mac),
* Spotlight (su Mac),
* QuickTime (su Mac e Windows),
* suono,
* grafica 3D Real Time,
* comunicazione seriale,
* sockets (sia TCP, che UDP) e IPC,
* SSL (solo per la professional Edition),
* HTTP, POP3, SMTP and SOAP.
La funzionalità framework può anche essere estesa con la creazione di plugin usando il Plugin SDK Archiviato il 7 luglio 2019 in Internet Archive. ufficiale. I plugin sono creati usando C/C++ con una varietà di compilatori supportati, inclusi Xcode, Microsoft Visual Studio e GCC e possono supportare tutte le piattaforme supportate dal compilatore, fatta eccezione per iOS, come indicato nella documentazione per l'SDK.

## Formato file

Il formato del file sorgente contiene dati per la disposizione di finestre e controlli. proprietario, anche se l'importazione e l'esportazione in formato XML sono supportate. Tutto il codice sorgente può essere contenuto in un file di progetto, ma è possibile anche avere classi/moduli in file separati nella stessa maniera in cui possono farlo la maggior parte degli altri linguaggi e dialetti. Xojo compila direttamente in codice macchina per ogni piattaforma supportata. A partire da REALbasic 2006 Release 3, è possibile salvare il codice come testo, per consentire l'utilizzo di strumenti di controllo della versione quali Subversion o CVS.

## Edizioni dell'IDE

L'IDE Xojo può essere usato liberamente per imparare e sviluppare. Compilare applicazioni con Xojo richiede una licenza. Le versioni offerte dell'IDE comprendono:
* Xojo Pro permette di compilare per desktop, web, console e iOS, con una licenza che è valida per tre dispositivi
* Xojo Pro Plus estende la licenza a sei dispositivi per utente

## Caratteristiche dell'IDE

L'IDE permette di costruire l'interfaccia utente grafica dell'applicazione trascinando i controlli dalla barra degli strumenti alla finestra che li contiene. Il posizionamento dei controlli è agevolato dall'IDE, che permette di allinearli (sia in orizzontale che in verticale) e fornisce informazioni sulla distanza tra i controlli o tra un controllo e i bordi della finestra.
Come molti IDE moderni, l'editor di codice supporta strumenti personalizzabili come l'evidenziazione della sintassi, il completamento automatico e il refactoring della struttura del codice. L'IDE include anche editor per menù e schemi di database, ed un visualizzatore per file multimediali come immagini, filmati o audio.
Xojo supporta la compilazione incrementale, attraverso cui il compilatore può ricompilare solo quelle parti di un progetto che sono state modificate. Per esempio, se soltanto il corpo di un metodo viene modificato, allora solo la voce del progetto contenente quel metodo necessita di essere ricompilata.

## Codice di esempio

Questo è un esempio di sovraccarico dell'operatore (operator overloading) per un'ipotetica classe Complex che permette di sommare un numero reale con un numero complesso, e di sommare due numeri complessi.
La stessa funzione può essere definita per accettare valori Double. Il seguente codice mostra come usare la classe Complex per sommare un numero reale con un numero complesso.