Come utilizzare le funzioni e le procedure in Delphi

Ti sei mai trovato a scrivere lo stesso codice più volte per eseguire alcune attività comuni all'interno gestori di eventi? Sì! È tempo che tu impari a conoscere i programmi all'interno di un programma. Chiamiamo quelle subroutine di mini-programmi.

Introduzione alle subroutine

Le subroutine sono una parte importante di qualsiasi linguaggio di programmazione, eDelphi non fa eccezione. In Delphi, ci sono generalmente due tipi di subroutine: una funzione e una procedura. La solita differenza tra una funzione e una procedura è che una funzione può restituire un valore e una procedura generalmente non lo farà. Una funzione viene normalmente chiamata come parte di un'espressione.

Dai un'occhiata ai seguenti esempi:

procedura Di Ciao(const sWhat:corda); inizio
ShowMessage ('Hello' + sWhat); fine; funzione Anni(const Anno di nascita: intero): intero; var
Anno, mese, giorno: parola; inizio
DecodeDate (Data, Anno, Mese, Giorno); Risultato: = Anno - Anno di nascita; fine; 

Una volta definite le subroutine, possiamo chiamarle una o più volte:

instagram viewer
procedura TForm1.Button1Click (Mittente: TObject); inizio
SayHello ('Utente Delphi'); fine; procedura TForm1.Button2Click (Mittente: TObject); inizio
SayHello ("Zarko Gajic"); ShowMessage ('You are' + IntToStr (YearsOld (1973)) + 'years old!'); fine; 

Funzioni e procedure

Come possiamo vedere, sia le funzioni che le procedure agiscono come mini-programmi. In particolare, possono avere il proprio tipo, costanti e dichiarazioni variabili al loro interno.

Dai un'occhiata più da vicino a una funzione (varie) SomeCalc:

funzione SomeCalc. (const SSTR: corda; const iYear, iMonth: intero; var iDay: intero): booleano; inizio...fine; 

Ogni procedura o funzione inizia con a intestazione che identifica la procedura o la funzione ed elenca il file parametri la routine usa se presente. I parametri sono elencati tra parentesi. Ogni parametro ha un nome identificativo e di solito ha un tipo. Un punto e virgola separa i parametri in un elenco di parametri l'uno dall'altro.

vengono chiamati sStr, iYear e iMonth parametri costanti. I parametri costanti non possono essere modificati dalla funzione (o dalla procedura). L'iDay viene passato come a parametro vare possiamo modificarlo all'interno della subroutine.

Le funzioni, poiché restituiscono valori, devono avere a tipo di ritorno dichiarato alla fine dell'intestazione. Il valore di ritorno di una funzione è dato dall'assegnazione (finale) al suo nome. Poiché ogni funzione ha implicitamente una variabile locale Result dello stesso tipo delle funzioni restituiscono valore, l'assegnazione a Result ha lo stesso effetto che l'assegnazione al nome della funzione.

Posizionamento e chiamata di subroutine

Le subroutine sono sempre collocate nella sezione di implementazione dell'unità. Tali subroutine possono essere chiamate (utilizzate) da un gestore eventi o subroutine nella stessa unità definita dopo di essa.

Nota: la clausola usi di un'unità indica quali unità può chiamare. Se vogliamo che una subroutine specifica in un'unità 1 sia utilizzabile dai gestori di eventi o subroutine in un'altra unità (ad esempio unità2), dobbiamo:

  • Aggiungi Unit1 alla clausola use di Unit2
  • Inserire una copia dell'intestazione della subroutine nella sezione dell'interfaccia dell'Unità1.

Ciò significa che sono le subroutine le cui intestazioni sono riportate nella sezione dell'interfaccia portata globale.

Quando chiamiamo una funzione (o una procedura) all'interno della sua stessa unità, usiamo il suo nome con qualunque cosa parametri sono necessari. D'altra parte, se chiamiamo una subroutine globale (definita in un'altra unità, ad esempio MyUnit), utilizziamo il nome dell'unità seguito da un punto.

... // La procedura SayHello è definita all'interno di questa unità
SayHello ('Utente Delphi'); // La funzione YearsOld è definita all'interno dell'unità MyUnit
Manichino: = MyUnit. YearsOld (1973);... 

Nota: le funzioni o le procedure possono avere le proprie subroutine incorporate al loro interno. Una subroutine incorporata è locale alla subroutine del contenitore e non può essere utilizzata da altre parti del programma. Qualcosa di simile a:

procedura TForm1.Button1Click (Mittente: TObject); funzione È piccolo(const SSTR:corda): Boolean; inizio// IsSmall restituisce True se sStr è in minuscolo, False altrimenti
Risultato: = LowerCase (sStr) = sStr; fine; inizio// IsSmall può essere utilizzato solo all'interno dell'evento Button1 OnClickSe IsSmall (Edit1.Text) poi
ShowMessage ('Tutti i maiuscoletti in Edit1.Text')
altro
ShowMessage ('Non tutti i maiuscoletti in Edit1.Text'); fine;