Te-ai găsit vreodată să scrii același cod de mai multe ori pentru a îndeplini anumite sarcini comune în interior manipulatori de evenimente? Da! Este timpul pentru dumneavoastră să aflați despre programe dintr-un program. Haideți să numim aceste sub-programe de mini-programe.
Introducere în subrutine
Subrutinele sunt o parte importantă a oricărei limbaj de programare, șiDelphi nu face excepție. În Delphi, există în general două tipuri de subrutine: o funcție și o procedură. Diferența obișnuită între o funcție și o procedură este că o funcție poate returna o valoare, iar o procedură, în general, nu o va face. În mod normal, o funcție este numită parte a unei expresii.
Aruncați o privire la următoarele exemple:
procedură Spune buna(const sWhat:şir); începe
ShowMessage ('Hello' + sWhat); Sfârșit; funcţie Varsta(const BirthYear: întreg): întreg; var
An, lună, zi: cuvânt; începe
DecodeDate (data, anul, luna, ziua); Rezultat: = Anul - Nașterea Anului; Sfârșit;
După ce au fost definite subrutinele, le putem apela de una sau de mai multe ori:
procedură TForm1.Button1Click (Expeditor: TObject); începe
SayHello („Delphi User”); Sfârșit; procedură TForm1.Button2Click (Expeditor: TObject); începe
SayHello („Zarko Gajic”); ShowMessage ('Sunteți' + IntToStr (YearsOld (1973)) + 'ani!'); Sfârșit;
Funcții și proceduri
După cum vedem, ambele funcții și proceduri acționează ca mini-programe. În special, ele pot avea propriul tip, constante și declarații variabile în interiorul lor.
Aruncați o privire mai atentă la o (diversă) funcție SomeCalc:
funcţie SomeCalc. (const SSTR: şir; const iYear, iMonth: număr întreg; var iDay: întreg): boolean; începe...Sfârșit;
Fiecare procedură sau funcție începe cu a antet care identifică procedura sau funcția și listează lista parametrii rutina folosește dacă este cazul. Parametrii sunt enumerați între paranteze. Fiecare parametru are un nume de identificare și de obicei are un tip. Un punct și virgulă separă parametrii dintr-o listă de parametri unul de altul.
sStr, iYear și iMonth sunt numite parametrii constanți. Parametrii constanți nu pot fi schimbați prin funcție (sau procedură). IDay este trecut ca o parametru varși îi putem face modificări, în interiorul subrutinei.
Funcțiile, întrucât returnează valori, trebuie să aibă o tip retur declarat la sfârșitul antetului. Valoarea de retur a unei funcții este dată de atribuirea (finală) la numele acesteia. Deoarece fiecare funcție are implicit o variabilă locală Rezultat de același tip ca și valoarea returnării funcțiilor, alocarea Rezultatului are același efect ca alocarea numelui funcției.
Poziționarea și apelarea subrutinelor
Subrutinele sunt întotdeauna plasate în secțiunea de implementare a unității. Astfel de subrutine pot fi numite (utilizate) de către un operator de gestionare a evenimentelor sau subrutină din aceeași unitate definită după aceasta.
Notă: clauza de utilizare a unei unități vă spune ce unități poate apela. Dacă dorim ca o subrutină specifică dintr-o unitate 1 să poată fi utilizată de gestionarii de evenimente sau de subrutinele unei alte unități (să spunem unitatea2), trebuie să:
- Adăugați Unit1 la clauza de utilizare a Unit2
- Plasați o copie a antetului subrutinei în secțiunea de interfață a unității1.
Aceasta înseamnă că subrutinele ale căror anteturi sunt date în secțiunea de interfață sunt în domeniul global.
Când apelăm o funcție (sau o procedură) în interiorul propriei unități, folosim numele ei cu orice parametrii sunt necesare Pe de altă parte, dacă numim o subrutină globală (definită într-o altă unitate, de exemplu MyUnit), vom folosi numele unității urmată de o perioadă.
... // Procedura SayHello este definită în cadrul acestei unități
SayHello („Delphi User”); // Funcția YearsOld este definită în unitatea MyUnit
Manechinul: = MyUnit. YearsOld (1973);...
Notă: funcțiile sau procedurile pot avea propriile subrutine încorporate în interiorul lor. O subrutină încorporată este locală a subrutinei containerului și nu poate fi utilizată de alte părți ale programului. Ceva asemănător cu:
procedură TForm1.Button1Click (Expeditor: TObject); funcţie Este mic(const SSTR:şir): Boolean; începe// IsSmall returnează True dacă sStr este în minuscule, False altfel
Rezultat: = LowerCase (sStr) = sStr; Sfârșit; începe// IsSmall poate fi utilizat doar în interiorul evenimentului OnClick Button1dacă IsSmall (Edit1.Text) apoi
ShowMessage („Toate capacele mici din Edit1.Text”)
altfel
ShowMessage („Nu toate capacele mici din Edit1.Text”); Sfârșit;