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 siano 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 può avere anche valore negativo;
  • 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.

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 🙂