# IntelliSense

IntelliSense è una forma di completamento automatico resa popolare dall'IDE di Microsoft Visual Studio. Serve inoltre come documentazione per i nomi delle variabili, delle funzioni e dei metodi usando metadati e riflessioni.

## Panoramica

L'uso dell'Intellisense è un metodo conveniente per visualizzare la descrizione delle funzioni, in particolar modo la lista dei loro parametri. Questa tecnologia riesce a velocizzare lo sviluppo del software riducendo la quantità di input attraverso la tastiera richiesto. Riduce inoltre il bisogno di appoggiarsi a documentazione esterna dato che molte informazioni come firme dei metodi, lista dei parametri e altro appaiono in automatico sul focus dell'attenzione dello sviluppatore.
«Per rendere più semplice il riferimento ai membri di un oggetto o di una classe, l'IntelliSense mostra una lista di membri disponibili per quella classe o oggetto dopo aver digitato il nome della classe o dell'oggetto e un punto.»
(Murach's C#, 2005, p. 56)
Il meccanismo funziona accedendo a un database automaticamente generato in memoria di classi, nomi di variabili e altri costrutti definiti o referenziati dall'applicazione che si sta sviluppando. La "classica" implementazione dell'IntelliSense funziona intercettando caratteri chiave come un punto, che dipendono dal linguaggio usato. Non appena lo sviluppatore digita uno di questi caratteri subito dopo un'entità contenente uno o più membri accessibili (come le variabili contenute o le funzioni), l'IntelliSense mostra i suggerimenti di completamento attraverso una finestra pop-up. Lo sviluppatore può sia accettare il suggerimento premendo un tasto di completamento (<Tab> o <Invio> o un terminatore specifico come il punto e virgola in C++) o continuare a digitare il nome. Alla fine IntelliSense determinerà esattamente quale variabile o funzione lo sviluppatore desidera, fornito un numero sufficiente di informazioni. Il meccanismo permette inoltre allo sviluppatore di scegliere tra i vari overload delle funzioni, nei linguaggi che supportano la programmazione orientata agli oggetti. L'IntelliSense può inoltre mostrare una breve descrizione della funzione in una finestra pop-up (questa caratteristica è dipendente dalla quantità di informazioni contenute nel codice sorgente).
Questo meccanismo fu incluso in VB 5.0 e si trova in tutte le ultime versioni di Visual Studio. L'IntelliSense supporta C++, C#, J#, Visual Basic, XML, HTML and XSLT tra gli altri. Altri prodotti Microsoft che includono l'IntelliSense sono FrontPage, Expression Web (nella vista codice), gli IDE per VBA in Microsoft Office e altri ancora.
Funzionalità simili sono apparse in altri editor di codice. Per esempio, Vim (dalla versione 7.0) supporta omnicompletion: una forma di autocompletamento programmabile simile a l'IntelliSense. Molti editor e IDE che incorporano funzionalità simili usano ctags per creare la loro lista di parole contestuali (UltraEdit ad esempio). Altri come Borland e l'IDE di Sun Microsystems usano database interni.

## Esempio di utilizzo

Sia data un'applicazione C++ dotata di una classe Foo con alcuni metodi:
Quando viene inizializzata un'istanza di classe, ad esempio, Foo foo, non appena viene digitato foo., il sistema di IntelliSense mostra automaticamente l'elenco dei metodi disponibili (in questo caso bar e foo_bar) e, se disponibile, mostra una breve descrizione della funzione membro recuperata dalla documentazione del codice sorgente. L'IntelliSense indica anche i parametri richiesti in un'altra finestra a comparsa mentre vengono digitati, suggerendo anche le potenziali variabili da usare. Man mano che vengono digitati i parametri, IntelliSense evidenzia il parametro corrente.
È possibile "forzare" l'IntelliSense a mostrare la sua lista fuori dal contesto premendo <Ctrl>+<spazio>. In Visual Studio questa mostra l'intero object model del dominio dell'applicazione disponibile allo sviluppatore.

## Storia

L'IntelliSense fu originariamente introdotto come una caratteristica di un prodotto mainstream Microsoft nel 1996, con Visual Basic 5.0 Control Creation Edition, che era essenzialmente un prototipo disponibile al pubblico di Visual Basic 5.0. Anche se inizialmente la caratteristica era stata pensata per l'IDE di Visual Basic, l'IntelliSense fu velocemente incorporato in Visual FoxPro e Visual C++ in Visual Studio 97 (una revisione dopo che fu visto per la prima volta in Visual Basic). Poiché era basato sulle capacità introspettive del COM, le versioni dell'IntelliSense di Visual Basic erano sempre più robuste e complete delle corrispettive versioni 5.0 e 6.0 (97 e 98 nella sequenza di nomi di Visual Studio ) di Visual C++, che non aveva il beneficio di essere completamente basato sul COM. Queste limitazioni (criticate da molti sviluppatori VC++ sin dalla versione 97) sono state rimosse nella linea seguente di prodotti-.NET. Per esempio, una delle più richieste caratteristiche mancanti dai prodotti pre-.NET era il supporto per i template, che adesso è disponibile.
L'IntelliSense è entrato in una nuova fase di sviluppo con l'unificazione dei prodotti in Visual Studio .NET pubblicato nel 2001, migliorato da una più potente introspezione e dalle capacità di documentazione del codice del .NET framework. Con Visual Studio 2005, l'IntelliSense è attivato di default quando lo sviluppatore inizia a scrivere, anziché richiedere caratteri particolari (anche se questo comportamento può essere disattivato). L'IDE ha una maggiore capacità di contestualizzazione basata su quello che lo sviluppatore sta digitando, al punto che persino i costrutti base del linguaggio come for e while sono inclusi nella lista delle scelte.