Jak korzystać z funkcji i procedur w Delphi

Czy kiedykolwiek zdarzyło Ci się pisać ten sam kod w kółko, aby wykonać jakieś typowe zadanie programy obsługi zdarzeń? Tak! Nadszedł czas, aby dowiedzieć się o programach w ramach programu. Nazwijmy te podprogramy miniprogramów.

Wprowadzenie do podprogramów

Podprogramy są ważną częścią każdego język programowania, iDelfy nie jest wyjątkiem. W Delphi istnieją zasadniczo dwa rodzaje podprogramów: funkcja i procedura. Zwykła różnica między funkcją a procedurą polega na tym, że funkcja może zwrócić wartość, a procedura na ogół tego nie zrobi. Funkcja jest zwykle wywoływana jako część wyrażenia.

Spójrz na następujące przykłady:

procedura Powiedz cześć(const sWhat:strunowy); zaczynać
ShowMessage („Hello” + sWhat); koniec; funkcjonować Lat(const BirthYear: integer): integer; var
Rok, miesiąc, dzień: słowo; zaczynać
DecodeDate (data, rok, miesiąc, dzień); Wynik: = rok - rok urodzenia; koniec; 

Po zdefiniowaniu podprogramów możemy wywołać je jeden lub więcej razy:

procedura TForm1.Button1Click (Sender: TObject); 
instagram viewer
zaczynać SayHello („Użytkownik Delphi”); koniec; procedura TForm1.Button2Click (Sender: TObject); zaczynać SayHello („Zarko Gajic”); ShowMessage („You are” + IntToStr (YearsOld (1973)) + „years old!”); koniec;

Funkcje i procedury

Jak widać, zarówno funkcje, jak i procedury działają jak miniprogramy. W szczególności mogą mieć w sobie własny typ, stałe i deklaracje zmiennych.

Przyjrzyj się bliżej (różnej) funkcji SomeCalc:

funkcjonować SomeCalc. (const sStr: strunowy; const iYear, iMonth: liczba całkowita; var iDay: integer): boolean; zaczynać...koniec; 

Każda procedura lub funkcja zaczyna się od nagłówek, który identyfikuje procedurę lub funkcję i wyświetla listę parametry rutyna używa, jeśli w ogóle. Parametry są wymienione w nawiasach. Każdy parametr ma nazwę identyfikującą i zwykle ma typ. Średnik oddziela parametry na liście parametrów od siebie.

sStr, iYear i iMonth są nazywane stałe parametry. Stałe parametry nie mogą być zmieniane przez funkcję (lub procedurę). IDay jest przekazywany jako parametr vari możemy wprowadzić w nim zmiany w ramach podprogramu.

Funkcje, ponieważ zwracają wartości, muszą mieć znak typ zwrotu zadeklarowane na końcu nagłówka. Zwracana wartość funkcji jest podawana przez (ostateczne) przypisanie do jej nazwy. Ponieważ każda funkcja ma niejawnie zmienną lokalną Wynik tego samego typu, co funkcje zwracające wartość, przypisanie do wyniku ma taki sam efekt, jak przypisanie do nazwy funkcji.

Podprogramy pozycjonowania i wywoływania

Podprogramy są zawsze umieszczane w sekcji implementacji urządzenia. Takie podprogramy mogą być wywoływane (używane) przez procedurę obsługi zdarzeń lub podprogram w tej samej jednostce, która jest zdefiniowana po nim.

Uwaga: klauzula use jednostki informuje, do których jednostek może zadzwonić. Jeśli chcemy, aby określony podprogram w Jednostce 1 był użyteczny przez procedury obsługi zdarzeń lub podprogramy w innej jednostce (powiedzmy Jednostka 2), musimy:

  • Dodaj Unit1 do klauzuli uses Unit2
  • Umieść kopię nagłówka podprogramu w sekcji interfejsu Unit1.

Oznacza to, że podprogramami, których nagłówki podano w sekcji interfejsu, są zasięg globalny.

Kiedy wywołujemy funkcję (lub procedurę) w jej własnej jednostce, używamy jej nazwy z czymkolwiek parametry są potrzebne. Z drugiej strony, jeśli wywołujemy globalny podprogram (zdefiniowany w innej jednostce, np. MyUnit), używamy nazwy jednostki, po której następuje kropka.

... // Procedura SayHello jest zdefiniowana wewnątrz tego urządzenia
SayHello („Użytkownik Delphi”); // Funkcja YearsOld jest zdefiniowana w jednostce MyUnit
Manekin: = MyUnit. YearsOld (1973);... 

Uwaga: funkcje lub procedury mogą mieć wbudowane własne podprogramy. Wbudowany podprogram jest lokalny dla podprogramu kontenera i nie może być używany przez inne części programu. Coś jak:

procedura TForm1.Button1Click (Sender: TObject); funkcjonować Jest mały(const sStr:strunowy): boolean; zaczynać// IsSmall zwraca True, jeśli sStr jest pisane małymi literami, w przeciwnym razie False
Wynik: = LowerCase (sStr) = sStr; koniec; zaczynać// IsSmall może być używany tylko w zdarzeniu Button1 OnClickgdyby IsSmall (edycja1. Tekst) następnie
ShowMessage („Wszystkie małe litery w Edit1.Text”)
jeszcze
ShowMessage („Nie wszystkie małe litery w Edit1.Text”); koniec;