La Funzione

Abbiamo già visto la struttura, nella forma più semplice, di una funzione quale sia:          

FUNCTION nomefunzione : risultato;

begin

...

end;

Tutto il codice contenuto in una funzione deve concorrere al risultato finale, è raro trovare righe di codice che non c’entrano con il lavoro svolto dalla funzione. L’esempio più banale che possiamo fare è quello di prendere due scritte immesse dall’utente e farle diventare una. Per fare questo però dobbiamo abbandonare il nostro primo progetto e crearne uno ex novo. Quindi per prima cosa chiudete quello su cui abbiamo lavorato fino a ora (File\Close All) e creiamone uno daccapo (File\New\VCL Forms Application...).

Possiamo iniziare con il mettere un pulsante in basso a destra e scrivere nella Caption il solito “Chiudi”, doppio clic sulla superficie, e il codice di chiusura programma “Close;”, fin qui niente di nuovo. Mettiamo due “TEdit” (li trovate nella sezione Standard) e diamogli una allineata. Un altro pulsante sotto le edit ci servirà per lanciare la nostra funzione, quindi lo chiameremo “Calcola”. Infine una “TLabel” di fianco a quest’ultimo ospiterà il risultato dell’operazione. La nostra interfaccia dovrebbe essere come questa, se la vostra è diversa cercate di farla diventare uguale alla mia:

 

 

Ora possiamo salvare il nostro progetto (File\Save Project As...) magari creando una nuova cartella:

 

 

Quindi abbiamo la nostra form con i suoi oggetti posizionati sopra, volendo possiamo anche lanciarla per vedere che effetto fa, se compare in un angolo dello schermo possiamo anche centrarla, come abbiamo fatto in precedenza. Sappiamo fin da subito che l’unica cosa che funziona è il pulsante di chiusura. A runtime potete vedere come nelle due edit abbiamo la possibilità di scrivere qualcosa, ed è quello che fa giusto al nostro caso. Ora passiamo all’azione.

Visualizziamo il codice e creiamo una funzione privata, compresa di implementazione:

 

 

Soffermiamoci un attimo a studiare quello che abbiamo scritto, per quanto riguarda il costrutto, a parte la scritta “Function” al posto di “Procedure”, è tutto uguale a quello che abbiamo già visto, l’unica cosa che c’è in più è “ : String;”. “String” ci dice che questa funzione deve restituire una stringa, i due punti fanno parte della rigida sintassi di questo linguaggio, come anche il punto e virgola dopo ogni comando. Vedete che oltre a restituire un valore ci dice anche di che tipo sarà questo dato, nel nostro caso un valore alfanumerico.

Tornando al nostro problema, dobbiamo fare in modo che premendo il pulsante “Calcola” la “Label1” dovrà mostrare la somma delle due stringhe che l’utente ha battuto nelle edit. Soffermiamoci anche sul fatto che a una funzione, alla fine di tutto, tocca assegnargli un valore. Noi dobbiamo pensare alla funzione come a una variabile, come è stato per i nostri precedenti esempi, così deve essere per la funzione. Assegnare un valore a una funzione significa utilizzare una variabile predefinita del linguaggio chiamata Result. All’interno di una funzione, per assegnare un valore alla stessa bisogna utilizzare Result, quindi se voglio assegnare la stringa ‘vuota’ alla nostra funzione dovrò scrivere come primo comando: Result := ‘vuota’; Pertanto la nostra funzione apparirà così:

FUNCTION TForm1.Calcola : String;

Begin

Result := ‘vuota’;

End;

Fatto questo bisogna creare due variabili che contengano il dato inserito dall’utente e allora, come abbiamo già accennato, se si vogliono usare delle variabili queste vanno dichiarate.

La dichiarazione di una o più variabili va effettuata in un posto specifico, e più precisamente dopo l’intestazione del blocco che la utilizza e dopo aver scritto l’identificativo che indica le dichiarazioni. Var è l’identificativo che si pone prima della lista delle dichiarazioni delle variabili e nel nostro caso va posto proprio sotto il nome:

FUNCTION TForm1.Calcola : String;

VAR ValStr1, ValStr2 : ShortString;

Begin

End;

ValStr1 e ValStr2 sono le variabili che conterranno i dati scritti dall’utente, quindi la prima cosa da fare è assegnare a queste quello che è scritto nelle edit:

FUNCTION TForm1.Calcola : String;

VAR ValStr1, ValStr2 : ShortString;

Begin

ValStr1 := Edit1.Text;

ValStr2 := Edit2.Text;

End;

Abbiamo accennato prima che tutto quello che compare scritto sulla form è una stringa e la proprietà “Text” di una Edit contiene il dato battuto dal codice, quindi lo possiamo assegnare alle nostre due variabili di tipo stringa. Ora bisogna assegnare alla nostra funzione la somma delle due stringhe, quindi, sapendo che la variabile Result della funzione è da considerarsi una variabile a tutti gli effetti, scriveremo così:

FUNCTION TForm1.Calcola : String;

VAR ValStr1, ValStr2 : ShortString;

Begin

ValStr1 := Edit1.Text;

ValStr2 := Edit2.Text;

Result := ValStr1+’ ‘ +ValStr2;

End;

L’ultima cosa che manca per vedere in funzione questo codice e richiamarlo dal pulsante Calcola.

procedure TForm1.Button2Click(Sender: TObject);

begin

Label1.Caption := Calcola;

end;

Nell’evento del pulsante basta modificare la scritta della label con il valore restituito della nostra funzione. Ripetiamo che il valore restituito da una funzione è del tutto simile a quello di una variabile, e il tipo invece (stringa o numerico) è indicato dall’identificatore posto dopo i due punti, subito dopo il nome della funzione (Calcola : String;).

Lanciate il programma e fate un po’ di prove, magari scrivendo anche qualche numero. A proposito dei numeri, potremmo fare un esempio utilizzando dei numeri al posto delle stringhe, magari usando un altro pulsante e un’altra funzione.

Pertanto partiamo dal posizionamento di un nuovo pulsante sotto quello con la scritta Calcola, e modifichiamo la Caption in “Somma”, la funzione invece questa volta deve poter accettare due parametri di tipo stringa e restituire sempre un valore di tipo stringa. Ecco come deve apparire:

 

 

 

Ora il problema che si pone è come trasformare il valore numerico stringa battuto dall’utente in un numero, per poter effettuare una somma aritmetica. E non solo, il risultato deve essere poi riconvertito in una stringa e passata alla funzione. Per fare questo possiamo usare una delle tantissime funzioni già pronte di Delphi, che ci permetterà di assolvere a questi due compiti in modo semplice e veloce.

La funzione che mi permette di trasformare una stringa in un numero è StrToInt(numerostringa), mentre quella che permette di convertire un numero in una stringa e IntToStr(numero). Come vedete dal nome si può ricavare facilmente quello che fanno, l’acronimo Str sta per stringa mentre Int sta per intero, a indicare un numero. Allora implementiamo la nostra funzione con queste nuove conoscenza:

FUNCTION TForm1.Somma(S1,S2 : String) : String;

VAR Val1,Val2 : Integer;

Begin

Val1 := StrToInt(Edit1.Text);

Val2 := StrToInt(Edit2.Text);

End;

Val1 e Val2 sono le due variabili numeriche che riceveranno il valore convertito in numero. Si nota chiaramente che le funzioni di Delphi si utilizzano come quelle che realizziamo noi, e in realtà sono comuni funzioni che qualcuno ha fatto per noi.

Se ricordate quello che abbiamo detto all’inizio, tutto il codice che scriviamo o che è stato scritto sarà contenuto in procedure o funzioni. Pertanto anche la marea di codice scritto dai programmatori Delphi per facilitarci i compiti è scritto in questo modo. Se avrete modo di sfogliare il codice sorgente anche degli oggetti che noi mettiamo sulla form, vedrete che è fatto di procedure e funzioni.

Ritornando alla nostra funzione, ora tocca effettuare una somma e passare il risultato a un’altra variabile, poi riconvertire questo risultato in una stringa che assegneremo alla variabile della funzione, Result.

FUNCTION TForm1.Somma(S1,S2 : String) : String;

VAR Val1,Val2 : Integer;

ValTot : Integer;

Begin

Val1 := StrToInt(Edit1.Text);

Val2 := StrToInt(Edit2.Text);

ValTot := Val1+Val2; //qui avviene la somma

Result := IntToStr(ValTot); //qui viene convertita e assegnata

End;

Per finire bisogna richiamare la nostra funzione dal pulsante Somma, passando come parametro i valori delle edit:

procedure TForm1.Button3Click(Sender: TObject);

begin

Label1.Caption := Somma(Edit1.Text,Edit2.Text);

end;

Provate il tutto ma state attenti a non inserire caratteri diversi dai numeri, infatti la nostra procedura effettua una somma tra numeri, se inserite delle lettere le procedure Delphi di conversione sollevano un errore e compare un messaggio.

Struttura di un Progetto

Indietro  Guide