Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida al Visual Basic .NET - IDE  Alcune semplici funzioni da usare sempre

Guida al Visual Basic .NET

Capitolo 108° - IDE Alcune semplici funzioni da usare sempre

<< Precedente Prossimo >>

I capitoli di questa ultima parte non riguardano strettamente il codice o le tecniche da usare, ma si occupano di descrivere l'ambiente di sviluppo, in particolare il compilatore Visual Basic Express 2005/2008/2010. Ecco uno screenshot del mio schermo con aperto il progetto che uso per scrivere gli esempi della guida:

VBNet_2_E1_1.jpg

Panoramia dell'IDE


Nel capitolo prenderò in esame quegli strumenti che possono essere utili nello sveltire le operazioni e aiutare il programmatore nella stesura del codice.

Solution Explorer

Nella finestra del Solution Explorer vengono visualizzati tutti i file che compongono il progetto corrente, o, in caso si tratti di una soluzione, anche tutti i suoi progetti. Da qui è possibile accedere in modo rapido ad ogni risorsa possibile. Tutti i sorgenti (quindi tutti i file con estensione *.vb) riportati sono raggiungibili mediante un doppio click e, per i form, con il menù contestuale. Sul lato superiore della finestra sono visibili cinque pulsanti, nell'ordine:

  • Proprietà del progetto: una scorciatoia che porta direttamente alle proprietà di progetto
  • Show All Files : visualizza tutti i file realmente esistenti nella cartella, fra cui le risorse, i riferimenti e i codici di design dei form. Ad esempio:

    VBNet_2_E1_6.jpg
    Show All Files

    Come si può facilmente notare dall'immagine, ci sono molte più cose di quante ce ne se aspettasse:
    • My Project : sotto questa voce vengono raggruppati tutti i sorgenti che formano il namespace My nelle sue classi modificabili. Infatti nella figura si osservano Application.myapp (che forma My.Application), Resources.resx (che forma My.Resources) e Settings.settings (che forma My.Settings). Il file manifest usa la sintassi XML per comunicare al sistema operativo altre informazioni sottaciute all'utente, quali i permessi concessi, la versione minima richiesta e altri dati sulla sicurezza
    • References: contiene tutti i riferimenti aggiunti
    • bin : questo elemento è solo una riproduzione della vera cartella bin presente nella cartella del progetto. Per mezzo di questa si possono vedere i file contenuti in Debug e Relase, ma non è niente di più che un semplice browser
    • obj : contiene file con l'elenco delle risorse associate a ogni form o controllo. Inoltre contiene anche un indice di tutti i file inclusi nel progetto e necessari al suo funzionamento
    • Resources : cartella delle risorse. Bisogna evidenziare che è colorata in giallo. Cartelle di questo tipo sono creabili anche dal programmatore per mezzo del menù contestuale [Nome progetto]->Add->New folder e servono per organizzare meglio l'applicazione
  • View Code : se il file selezionato è un sorgente, visualizza il codice relativo
  • View Designer : se il file selezionate è un form o un controllo, visualizza l'anteprima di design

 

Proprietà di progetto

Questa sezione permette di impostare tutte le specifiche possibili e immaginabili riguardanti il progetto corrente, dallo splash screen iniziale, agli aggiornamenti, alle informazioni dell'assembly. Ecco una panoramica di tutte le schede non ancora esaminate:

VBNet_2_E1_2.jpg

Proprietà - Application


La scheda "Application" permette di selezionare i comportamenti dell'applicazione. Ecco una lista dei campi con annessa spiegazione:

  • Assembly name : il nome dell'assembly generato. Se il progetto è una libreria di classi, si riferisce al nome che la DLL di output dovrà avere, altrimenti si riferisce al nome dell'eseguibile (sia nella cartella Release che in quella Debug)
  • Root namespace : il namespace del progetto. Di default, è composto prendendo il nome iniziale dato al progetto in fase di salvataggio e "normalizzandolo", ossia eliminando tutti quei caratteri che non possono comporre un identificatore Visual Basic (ossia una variabile). Può essere utile cambiarlo anche solo per un fatto estetico: una volta modificata la textbox, il compilatore esegue una ricerca nei sorgenti e sostituisce tutte le occorrenze, senza quindi dare alcun fastidio durante la sostituzione del nome
  • Application type : il tipo di assembly prodotto in output. Si possono scegliere tre valori: Windows Application, Class Library e Console Application
  • Icon : l'icona dell'eseguibile prodotto (se il progetto è di tipo Class Library, non si potrà cambiare l'icona associata alla DLL). È valido qualsiasi file *.ico compatibile, preferibilmente di dimensioni ridotte, come 32x32 o 48x48
  • Enable XP Visual Style : abilita la visualizzazione in stile Windows XP su sistemi operativi compatibili
  • Save My.Settings on shutdown : determina se salvare le impostazioni definite in My.Settings quando l'applicazione è in chiusura. Equivale a impostare My.Application.SaveMySettingsOnExit
  • Shutdown mode : indica quando terminare l'applicazione, se alla chiusura del primo form (ossia del form principale), oppure alla chiusura dell'ultimo form visibile, indipendentemenete dal suo ruolo
  • Splash screen : imposta lo splash screen dell'applicazione. È valido un qualsiasi form definito nel progetto: esso viene visualizzato prima di ogni altra cosa all'avvio dell'applicazione per alcuni secondi



VBNet_2_E1_3.jpg

Proprietà - Compile


La finestra compile permette di impostare alcuni settaggi riguardanti la compilazione. La prima casella di testo in alto specifica dove salvare l'assembly compilato. Le tre combobox appena sotto, invece, impostano le opzioni di compilazione, già esposte nel capitolo relativo. Il DataGridView centrale, invece, fa stabiliare all'utente come comportarsi in alcuni casi particolari: definisce se una certa situazione debba essere segnalata oppure no, e se sì in forma di errore o di semplice warning. Queste azioni sono, nell'ordine, dall'alto in basso:

  • Conversioni implicite fra tipi. Ad esempio:
    Dim I As Int32 = 34.78 
  • Late binding, ossia richiamare membri da una variabile Object. Ad esempio:
    Private Click(ByVal sender As Object, ByVal e As EventArgs)
        'sender è un generico Object: non si è sicuri che
        'a runtime possa risultare proprio di tipo Control
        sender.Enabled = False
    End Sub 
  • Dichiarazioni di variabili senza la specificazione del tipo (nelle versioni 2005 e anteriori, si assume che siano Object). Ad esempio:
    Dim S 
  • La variabile viene usate prima che gli sia stato assegnato un valore. Vale sia nel caso di valori Value che Reference:
    Dim I As Int16
    'I non è inizializzata: sarà 0 e produrrà un errore
    Dim K As Int16 = 10 / I
    
    '...
    
    Dim Str As StringBuilder
    'L'oggetto Str non è inizializzato, poiché manca il suo
    'costruttore nella dichiarazione. Questo codice produrrà un
    'errore NullReferenceException a runtime
    Str.Append("Ciao") 
    Il compilatore riesce ad individuare anche i casi in cui una struttura di controllo impedisce a un valore di essere sempre assegnato con certezza. Il seguente codice produce un warning in compilazione e potrebbe produrre un errore a runtime:
    Dim I As Int16
    
    If K >= 26 Then
        I = 2 * K + 1
    End If
    
    'Se K < 26, I varrà 0
    K /= I 
  • Dichiarazione di funzioni od operatore che non restituiscono alcun tipo. Ad esempio:
    Public Function GetName(ByVal Text As String)
        '...
    End Function
    
    'Oppure
    Public Shared Operator +(ByVal P1 As Person, ByVal P2 As Person)
        '...
    End Operator 
  • Variabile locale non utilizzata
  • Si accede a un campo statico attraverso un'istanza di classe anziché attraverso la classe stessa. Ad esempio:
    Dim S, K As String
    
    '...
    
    'IsNullOrEmpty è una funzione statica del tipo String. 
    'Poiché è pur sempre un membro pubblico, diventa 
    'accessibile anche dai singoli oggetti. Ma, come già 
    'ripetuto molte volte, non costituisce un membro appartenente 
    'all'istanza, ma alla classe in sé. Qualsiasi valore di S, 
    'pertanto, verrà trascurato. La versione corretta è
    'If String.IsNullOrEmpty(K) Then ...
    If S.IsNullOrEmpty(K) Then
        '...
    End If 
  • Il compilatore ha rilevato una chiamata ricorsiva, ossia che fa riferimento a se stessa. Errori del genere potrebbero portare a loop e crash del programma durante l'esecuzione. Ecco un esempio:
    Private _Name As String
    Public ReadOnly Property Name() As String
        Get
            'Questo statement deve ottenere il valore della 
            'proprietà Name, della quale si sta definendo ora 
            'il corpo. In questo modo si richiederà il blocco 
            'Get, che a sua volta richiamerà se stesso un 
            'numero infinito di volte
            Return Name
        End Get
    End Property 
  • Blocchi Catch uguali

Le due checkbox in fondo, invece, permettono o di sopprimere ogni warning, oppure di trattare ogni warning come se fosse un errore.

La scheda Debug ha pochissime funzionalità. La prima textbox permette di inserire dei parametri da riga di comando direttamente all'avvio per testare l'applicazione, mentre la seconda stabilisce la directory in cui lavora il programma.

VBNet_2_E1_4.jpg

Proprietà - References


La schermata dei riferimenti consente al programmatore di importare velocementi componenti COM o assembly .NET. La listview centrale visualizza tutti i riferimenti attualmente presenti nel progetto, mentre la CheckedListBox in basso è una scorciatoia per aggiungere velocemente assembly .NET provenienti dalla Global Assembly Cache. Il pulsante Refrence Paths aggiunge un'intera cartella, dalla quale si inseriranno tutti i componenti ivi contenuti. Il pulsante di fianco, invece, "Unused refrences", trova nei sorgenti i riferimenti inutilizzati e permette di rimuoverli.

La scheda Security stabilisce se il programma debba essere considerato una Full Trust Application ("Applicazione completamente affidabile") o una Partial Trust Application ("Application non completamente affidabile"): la prima garantisce una sicurezza massima, non interferisce in meccanismi delicati e perciò ottiene dal sistema operativo tutti i permessi necessari a operare sulla macchina; la seconda agisce su parti sensibili del sistema e potrebbe causare errori, perciò Windows non gli concede tutti i permessi. La DataGridView appena sotto definisce quali permessi siano richiesti e quali no, mentre il pulsante Properties apre una finestra in cui si possono definire i permessi R-W delle variabili d'ambiente.

VBNet_2_E1_5.jpg

Proprietà - Publish


La scheda Publish consente di pubblicare il programma come setup eseguibile: questo viene costruito dal compilatore sulla base delle informazioni immesse. Una volta avviato, installa il programma in una locazione sconosciuta e non modifica il menù Installazione Applicazioni. In questo modo l'utente non può disinstallarlo e se si verificano problemi, non può ricorrere a nessun supporto poiché i file necessari sono nascosti chissà dove. Per tutti i motivi appena esposti, sconsiglio vivamente la creazione del setup con l'editor predefinito: maggiori informazioni saranno fornite nel capitolo sui pacchetti d'installazione. Ecco una lista dei campi:

  • Publishing location : percorso della cartella dove depositare il setup
  • Installation URL : percorso della cartella dove installare il software
  • Application files : apre una finestra di dialogo che permette di selezionare quali file includere nel setup
  • Prerequisites : seleziona i prerequisiti ed eventualmente la locazione o il sito da dove scaricarli se non presenti sul computer dell'utente
  • Updates : imposta le modalità di controllo degli aggiornamenti, il periodo di tempo ogni quanto eseguire un controllo per verificarne l'esistenza, la versione minima richiesta all'aggiornamento e, ovviamente, l'indirizzo dove controllare
  • Options : opzioni dell'assembly
  • Publish version : versione di pubblicazione del programma
  • Publish wizard : uno wizard guida il programmatore attarverso la creazione del setup. Vengono proposte le stesse opzioni che è possibile impostare nella scheda
  • Publish Now : crea immediatamente il setup

 

Object Browser

L'Object browser è una versione molto (ma molto!) più sofisticata e dettagliata del nostro Browser per Assembly, scritto nell'ultimo capitolo sulla Reflection. Permette di navigare tra gli assembly del progetto, sia quelli creati dall'utente (controlli utente, form, moduli, classi, namespace), sia quelli generati dal compilatore (namespace My e relative sottoclassi) sia quelli depositati nella GAC (ad esempio System.Data o System.Xml). Visualizza tutte le proprietà, i metodi, i campi, gli enumeratori, le strutture, le interfacce, le classi, i costruttori, i distruttori e gli operatori creati, ossia ogni possibile informazione su un dato tipo. Il riquadro in basso mostra anche la dichiarazione del membro e, se si tratta di una procedura o di una funzione, anche la signature, la descrizione del funzionamento e di ogni singolo parametro.

VBNet_2_E1_7.jpg

Object Browser


Dopo aver navigato un pò per i tipi, si sarà notato che queste informazioni non sono disponibili per gli oggetti creati dal programmatore, ma la spiegazione è semplice: non si è creata una documentazione adatta per quei membri. Consultare il capitolo relativo per maggiori dettagli.Si può osservare che:

  • I membri statici non vengono riportati, tranne i moduli
  • Tutta la documantazione viene trasferita correttamente nel riquadro della descrizione
  • I tipi vengono esposti fuori dalla classe con l'operatore punto (ad esempio Documentazione.Struttura)
  • Strutture, delegate, interfacce ed enumeratori, poiché derivati dalle classi basi System.Structure, System.Delegate e System.Enumerator, espongono molti metodi addizionali
  • I membri privati hanno una piccola icona a forma di lucchetto in basso a destra
  • I membri friend hanno una piccola icona a forma di rombo azzurro in basso a sinstra

 

IntelliSense

C'è un altro modo per raggiungere velocemente la documentazione di un membro, ed è usare l'IntelliSense. Questa tecnologia legge quello che il programmatore ha digitato nel codice e, in corrispondenza di certi simboli (come lo spazio o il punto), fornisce dei suggerimenti tramite un menù a cascata. Ecco un esempio:

VBNet_2_E1_9.jpg

IntelliSense in azione!


Oltre a visualizzare informazioni sulla classe selezionata, permette di scorrere velocemente tutti i membri con le frecce direzionali: per attivare l'autocompletamento, basta digitare il carattere punto (se ci si deve addentrare più all'interno nella gerarchia), spazio (se si deve continuare l'espressione) o invio (se una volta completato, si termina l'espressione). Così facendo, dichiaro un nuovo StringBuilder digitando questi tasti:

dim Str as new sys.te.s[Invio] 

E ottengo lo stesso risultato in un tempo notevolmente inferiore. Usando questa tecnica si possono indagare anche i parametri dei metodi aprendo le parentesi:

VBNet_2_E1_10.jpg

IntelliSense in azione!


Oltre ad ottenere la descrizione del parametro e il tipo richiesto, è possibile vedere anche tutte le versioni modificate con overloading scorrendole con le freccette direzioni indicate (anche da tastiera).
Un altro pregio dell'IntelliSense consiste nel poter rilevare la dichiarazione di una variabile quando il mouse ci passa sopra.

Altri strumenti utili

In questo paragrafetto cito due strumenti di minor importanza, ma molto utili. Il primo è il Code Snippet, che permette di inserire all'interno del sorgente frammenti di codice già scritti. Per inserire un frammento esistente, basta selezionare "INSERT IGNORE Snippet" dal menù contestuale dell'editor di codice. Dopodiché apparirà una lista contenente delle cartelle con nomi in inglese: sono le categorie di codice disponibili. Ad esempio, per creare in modo veloce una proprietà, si seleziona questo:

VBNet_2_E1_11.jpg

Code Snippet


Il compilatore genererà un codice in cui sono evidenziate delle parti in verde: se se ne modifica una, quelle corrispondenti vengono modificate a loro volta con lo stesso valore.
L'altro strumento è un tool di rinominazione. Se si clicca col destro su un indentificatore e si sceglie "Rename", lo si può rinominare e il compilatore rinomina anche tutti i suoi riferimenti altrove.

<< Precedente Prossimo >>
A proposito dell'autore

C#, TypeScript, java, php, EcmaScript (JavaScript), Spring, Hibernate, React, SASS/LESS, jade, python, scikit, node.js, redux, postgres, keras, kubernetes, docker, hexo, etc...