FreeBASIC – commenti

Un commento è una parte di testo inserita nel nostro codice che viene ignorata dal compilatore FreeBASIC.

Commentare il proprio codice è necessario, e farlo bene è molto importante.

Perché è necessario commentare il codice?

Nel momento in cui scriviamo una parte magari abbastanza complessa del nostro codice, è molto probabile che il suo funzionamento ci appaia chiaro ed evidente in quanto lo abbiamo concepito e analizzato in maniera approfondita proprio in quei minuti in cui siamo alla tastiera del nostro computer. Che bisogno c’è quindi di inserire un commento?

Il fatto è che, a distanza di tempo, qualora dovessimo rimettere mano a quella parte del codice, quello che ci era così chiaro ed evidente diventa oscuro e intricato. Facciamo fatica a ricordare la logica sottesa a certi passaggi e il perché di certe scelte.

Ecco allora che un commento sintetico è molto di aiuto nel recupero dei ragionamenti che avevamo a suo tempo sviluppato per arrivare alla scrittura di una specifica parte del codice.

Figuriamoci poi se a metterci le mani dovesse essere qualche altro sfortunato programmatore.

Caratteristiche di un buon commento

Come non commentare è sbagliato, così è un errore commentare tutto:

Se un certo passaggio è autoesplicativo, non c’è alcun bisogno di commentarlo.

Commentiamo quindi soltanto quei passaggi che possono presentare una certa complessità o che magari rappresentano dei punti chiave del nostro codice.

Tipi di commento

Il compilatore FreeBASIC riconosce diversi tipi di commento.

Commento su una sola linea

Per scrivere un commento su una sola linea, lo si fa precedere dal simbolo apice ():

'Questo è un commento su una sola linea.
print "ciao" 'Anche questo è un commento su una sola linea.

oppure al posto dell’apice si può utilizzare la parola rem.

Nota: inserendo un doppio apice al posto del singolo apice , si evita che il compilatore FreeBASIC analizzi comunque il commento alla ricerca, per esempio, di qualche meta-comando quale per esempio #include (i meta-comandi possono infatti essere scritti all’interno di un commento). In pratica tutto ciò che segue il doppio apice viene totalmente ignorato dal compilatore.

Commento su più linee

Per scrivere un commento su più linee lo si racchiude tra i simboli /’ … ‘/:

/'Questo è un commento
su più linee'/

Nel mondo della Tecnologia dell’Informazione (Information Technology) la lingua franca è l’inglese, è bene quindi che ci sforziamo di scrivere i commenti, i nomi delle variabili e delle funzioni in questa lingua.

A rileggerci al prossimo articolo. 🙂

FreeBASIC – librerie

In ambito informatico esiste un modo di dire che più o meno recita così:

Dobbiamo sempre sforzarci di evitare di reinventare la ruota.

Tradotto significa che se qualcuno ha già scritto del software per svolgere un determinato compito e l’ha messo a disposizione della comunità degli sviluppatori tramite una libreria, è buona pratica utilizzarlo all’interno del proprio progetto senza mettersi a riscriverlo per proprio conto da zero.

In FreeBASIC sono disponibili molti files di intestazione che ci permettono di utilizzare agevolmente delle funzioni presenti sia in librerie esterne incluse in FreeBASIC, sia in librerie scritte in FreeBASIC dagli stessi membri della Comunità FreeBASIC.

Le librerie possono essere di due tipi: statiche o dinamiche (DLL).

Nel precedente articolo abbiamo visto come includere i files di intestazione in un file sorgente (o modulo).

Nota: alcune librerie utilizzabili non sono distribuite insieme al compilatore FreeBASIC. Occorre quindi scaricarle e leggere la documentazione di base per poterle utilizzare. È probabile invece che le maggiori librerie standard siano già presenti nel proprio computer.

Files di intestazione di uso frequente

Ci sono alcuni files di intestazione specifici per il compilatore FreeBASIC che capiterà spesso di dover includere nei propri progetti. Ecco di seguito una breve lista:

  • datetime.bi (per lavorare con le date e le ore)
  • dir.bi (per lavorare con le cartelle)
  • file.bi (per lavorare con i files)
  • fbgfx.bi (per lavorare con la grafica)
  • string.bi (per lavorare con la formattazione delle stringhe)

Nel prossimo articolo vedremo come creare una libreria statica.

FreeBASIC – tipi di files

Vi avverto: questo sarà un articolo abbastanza noioso, ma, allo stesso tempo, anche indispensabile per affrontare con più consapevolezza la programmazione in FreeBASIC.

Cominciamo.

Dovete sapere che in FreeBASIC ci sono tre tipologie di files. Due delle quali abbastanza scontate, ma la terza… che dire… è un po’ strana.

I. File sorgente (o modulo)

Questi files contengono il nostro codice sorgente e hanno estensione .bas. Un semplice programma può essere scritto interamente anche in un solo file, ma se il programma che stiamo sviluppando è di una certa complessità, allora è preferibile organizzarlo su più files sorgente.

II. File eseguibile

Il processo di compilazione crea un file eseguibile contenente sia il codice oggetto ricavato a partire da uno o più files di codice sorgente, che eventuali collegamenti a una o più librerie. Negli ambienti Windows questi files hanno estensione .exe.

III. File di intestazione

Eccoci arrivati al terzo tipo di file, quello strano.

Abbiamo detto che quando ci troviamo a dover sviluppare un programma complesso è bene organizzarlo in più files di codice sorgente. Ebbene, in questi casi, è spesso conveniente anche scrivere un particolare tipo di file sorgente che viene appunto chiamato file di intestazione e che ha come estensione .bi. Questo particolare file contiene generalmente soltanto alcuni specifici tipi di informazioni, quali, per esempio:

  • dichiarazioni di variabili o costanti
  • definizioni di funzioni

La presenza di questo tipo di file aiuta i programmatori ad avere una visione complessiva delle variabili, delle costanti, delle funzioni, ecc., che possono essere utilizzate senza dover prendere visione ogni volta di tutti i files sorgente.

Incastrare tutti i pezzi come in un puzzle

Per utilizzare più files sorgenti o più files di intestazione occorre includerli nel file sorgente che si sta scrivendo attraverso la direttiva #include che informa il compilatore FreeBASIC sul percorso e sul nome della risorsa da includere durante il processo di compilazione.

Nota: un file di intestazione può a sua volta includere altri files di intestazione.

Avendo a che fare con un grande progetto contenente molti files sorgente (magari non tutti scritti da noi), e magari anche più files di intestazione, potrebbe capitare il caso che più files contengano una direttiva di inclusione per la stessa risorsa. Onde evitare un lavoro inutile al compilatore è bene utilizzare la direttiva #include in questa sua variante:

#include once "percorso e nome della risorsa"

Riguardo alla scrittura del percorso, ovvero della sequenza delle cartelle sino ad arrivare a quella che contiene la nostra risorsa, è bello sapere che:

Il compilatore FreeBASIC converte in automatico i simboli di separazione delle cartelle (la barra / negli ambienti Linux, la barra rovesciata \ negli ambienti Windows) in base al sistema operativo dove viene utilizzato.

Evviva! Ce l’abbiamo fatta.

La prossima settimana daremo uno sguardo nel magico mondo delle librerie. 🙂

FreeBASIC – do-loop

Dopo aver visto come funziona l’istruzione for-next, oggi facciamo la conoscenza di una seconda struttura di controllo dedicata sempre alla iterazione: l’istruzione do-loop.

Sintassi

do [ { until | while } condizione ]
    [blocco istruzioni]
loop

oppure:

do
    [blocco istruzioni]
loop [ { until | while } condizione ]

Semantica

Le due modalità di scrittura dell’istruzione differiscono nel fatto che, nella seconda tipologia, il blocco di istruzioni viene eseguito almeno una volta.

Utilizzando la parola-chiave until, il ciclo si ripete fino a che (until) la condizione assume valore vero (true), una volta che questo accade si esce dal ciclo.

Con la parola-chiave while, invece, il ciclo si ripete mentre (while) la condizione ha valore vero (true); quando la condizione assume valore falso (false) il ciclo si interrompe.

Esempio

dim c as integer
c = 0
'il ciclo stampa i numeri da 0 a 9
do while c < 10
    print "Il valore della condizione è pari a: "; c
    c += 1 'incrementa di uno
loop

Nel prossimo articolo parleremo dei diversi tipi di files gestiti dal compilatore FreeBASIC.

FreeBASIC – for-next

Dopo aver parlato della struttura di controllo if-then-else utile per gestire le alternative, oggi incontriamo un’altra struttura di controllo che viene utilizzata per l’iterazione (o ciclo): l’istruzione for-next.

Questa è la sua sintassi:

for iteratore [as tipo dati] = valIniz to valFinale [step valPasso]
  [blocco istruzioni]
next iteratore

In pratica all’inizio del ciclo la variabile iteratore assume il valore valIniz, dopodiché il blocco delle istruzioni viene eseguito sino a che il valore della variabile iteratore non raggiunge il valore valFinale procedendo per passi della lunghezza pari a valPasso:

' stampa il valore della variabile i da 0 a 10 con passo 2
for i as integer = 0 to 10 step 2
    print "La variabile iteratore ora vale: "; i
next i

Alcune cose che è bene sapere:

  • la variabile iteratore può anche essere dimensionata all’esterno del ciclo;
  • il passo, oltre a poter assumere valori interi, può anche essere un valore decimale;
  • se il valore del passo non viene specificato, questo assumerà il valore predefinito 1;
  • i valori valIniz e valFinale possono essere anche delle espressioni;
  • il valore valFinale può anche essere minore di valIniz, in questo caso il passo deve avere un valore negativo.

Nel prossimo articolo parleremo di un’altra struttura iterativa, il ciclo do-loop.

FreeBASIC – if-then-else

Nel precedente articolo abbiamo imparato come immettere dati grazie alla istruzione input. Ora che abbiamo questa possibilità e quella di stampare a video delle informazioni, possiamo permetterci di scrivere il nostro primo programma contenente una struttura di controllo: la struttura if-then-else che permette di scegliere tra diverse alternative.

'Programma con struttura di controllo
dim t as string
input "Come ti chiami "; t
if t = "ciuchina" then
    print "Benvenuta "; t
elseif t = "ciuchino" then
    print "Benvenuto "; t
else
    print "Ciao, non ti conosco "; t
end if

Semplice, no? 🙂

Nota anche la presenza di un commento all’inizio del programma.

I commenti sono molto utili per fornire informazioni a chi leggerà il nostro codice, ma anche per noi stessi una volta che andremo a rileggere i nostri programmi a distanza di tempo.

Per inserire un commento su una singola riga basta anteporre il simbolo apice () al testo del nostro commento.

Nel prossimo articolo parleremo di un’altra struttura di controllo adatta a gestire l’ iterazione: l’istruzione for-next.

FreeBASIC – input

Ben ritrovati. 🙂

Dopo aver parlato di come si stampa a video, e aver imparato come si dichiara una variabile, passiamo ora ad analizzare come funziona l’istruzione input.

Questa istruzione permette di leggere una lista di valori immessi da tastiera.

dim as integer a, b
input "Immetti la base e l'altezza separati da una virgola ", a, b
print "L'area del quadrato vale: "; a * b

Se al posto della virgola, subito dopo la frase di richiesta, fosse stato inserito un punto e virgola, allora sarebbe comparso in automatico un punto di domanda alla fine della frase.

Se si immettono meno valori rispetto a quelli attesi, le variabili verranno comunque valorizzate: con zero per le variabili numeriche, e con un testo vuoto nel caso di variabili stringa.

Occorre precisare che la frase è opzionale e la lista delle variabili potrebbe anche ridursi ad una sola variabile:

input a

Immissione di un testo contenente delle virgole

Se abbiamo necessità di inserire una stringa contenente delle virgole, allora possiamo utilizzare l’istruzione line input:

dim t as string
line input "Inserisci un testo con virgole: ", t
print "Hai inserito il testo: "; t

Ci leggiamo al prossimo articolo dove faremo la conoscenza della nostra prima struttura di controllo adatta a gestire quelle situazioni in cui ci troviamo di fronte ad una alternativa: l’istruzione if-then-else 🙂

FreeBASIC – dim

Dopo aver incontrato l’istruzione print, è arrivato il momento di introdurre il concetto di variabile.

Una variabile è un’etichetta che identifica un ben determinato spazio di memoria che utilizzeremo per archiviare specifici valori.

Data questa definizione si può intuire una cosa molto importante: la tipologia dei valori che vogliamo memorizzare determina la quantità di spazio occorrente.

Ecco allora che risulta evidente che la prima cosa da fare è dichiarare (vedi: lista completa dei tipi di dati standard) il tipo di variabile. Questa dichiarazione dimensiona automaticamente lo spazio in memoria necessario (vedi: limiti dei tipi di dati standard).

In BASIC l’istruzione che fa tutto questo è l’istruzione dim:

dim x as integer, y as integer, t as string

oppure:

dim as integer x, y
dim as string t

Soltanto dopo aver definito un identificativo per la nostra variabile, e la sua tipologia, possiamo assegnargli un valore:

x = 3
y = 5
t = "casa"

Regole per la definizione degli identificativi

Per identificare una variabile – ovvero per darle un nome – occorre rispettare due semplici regole. Regole che valgono non soltanto per le variabili, ma anche per le funzioni e le procedure. Ovvero:

  1. gli identificativi possono contenere soltanto caratteri alfabetici (a-z, A-Z), numeri (0-9), il carattere underscore (_), il punto (.)
  2. il primo simbolo può soltanto essere o un carattere alfabetico o il carattere underscore (_)

Nota: il compilatore FreeBASIC non fa distinzioni tra lettere minuscole e maiuscole. Ciò significa che scrivere pippo equivale a scrivere piPPo.

Bene, siamo ora pronti per passare al prossimo argomento: l’input dei valori tramite tastiera.

FreeBASIC – print

Nel precedente articolo abbiamo imparato ad eseguire un file BASIC compilato.

Ora iniziamo a sperimentare i nostri primi programmi.

Sebbene potremmo sfruttare l’editor di testo che troviamo normalmente di default sul nostro computer, io consiglio di utilizzare sin da subito il semplice editor di testo Geany che, essendo multipiattaforma, possiamo usare indifferentemente in ambienti Windows, Linux, macOS e altri. Inoltre, avendo delle funzioni elementari tipiche di un IDE (ambiente di sviluppo integrato), ci permetterà, per esempio, di compilare e mandare in esecuzione i nostri programmi con più facilità:

  • tasto F8 per compilare il file sorgente .bas
  • tasto F5 per eseguire il file compilato

Bene, cominciamo!

Istruzione print

Quando ci si approccia ad un qualsiasi linguaggio di programmazione non si può evitare di tirare subito in ballo l’istruzione print per la stampa a video.

Nota: il BASIC è un linguaggio di programmazione che non tiene conto se scriviamo le istruzioni con le lettere maiuscole o minuscole.

In FreeBASIC abbiamo due modi per scriverla:

print "Ciao mondo!"

oppure:

? "Ciao mondo!"

Personalmente preferisco il primo modo perché il punto di domanda mi sembra un po’ troppo ambiguo.

Come organizzare la stampa a video

Per separare le parole di un determinato numero di spazi n si utilizza l’istruzione spc():

print "Ci dividono"; spc(4); "4 spazi."

Avrai forse notato l’uso del punto e virgola. Bene, devi sapere che con il punto e virgola si concatenano le parole e che lo stesso risultato lo ottieni utilizzando i segni + e &:

print "Questo"; "testo" + "mi" & "soffoca."

Per incolonnare il testo si utilizza invece la virgola:

print "Fammi", "spazio!"

Per organizzare il testo in maniera tabellare si utilizza l’istruzione tab():

print "Nome"; tab(20); "Data di nascita"; tab(40); "Residenza"
print "ciuchino"; tab(20); "13 dicembre 2018"; tab(40); "Web"

Un’ultima cosetta riguarda la possibilità di stampare direttamente il risultato di una operazione:

print "4 x 3 ="; 4 * 3

Facile, no? 🙂

Per oggi chiudiamo qui. Ci leggiamo al prossimo articolo dove parleremo del dimensionamento o dichiarazione delle variabili.

FreeBASIC – esecuzione

Dopo aver imparato come installare il compilatore FreeBASIC, vediamo adesso insieme la semplice procedura, in due soli passi, per compilare un file sorgente contenente il nostro codice BASIC e quindi eseguire il file compilato.

Ambienti Windows

  • Aprire un semplice editor di testo e scrivere la seguente istruzione:
print "Ciao mondo!"
  • Salvare il file con il nome: ciao.bas
  • Spostarsi nella cartella dove si è salvato il file ciao.bas e compilare il file con il seguente comando:
fbc ciao.bas
  • Se il compilatore non segnala errori – nel qual caso occorrerà correggerli – troveremo nella stessa cartella un file eseguibile denominato ciao.exe che possiamo lanciare semplicemente con il comando:
ciao

Ambienti Linux

  • Aprire un semplice editor di testo e scrivere la seguente istruzione:
print "Ciao mondo!"
  • Salvare il file con il nome: ciao.bas
  • Spostarsi nella cartella dove si è salvato il file ciao.bas e compilare il file con il seguente comando:
fbc ciao.bas
  • Se il compilatore non segnala errori – nel qual caso occorrerà correggerli – troveremo nella stessa cartella un file eseguibile denominato semplicemente ciao che possiamo lanciare con il comando:
./ciao

Bene! Ora siamo pronti per sperimentare dal prossimo articolo la programmazione in FreeBASIC. Cominceremo a farlo con l’istruzione print. 🙂