Object Pascal/Struktura programu, podstawowe elementy języka

Z Wikibooks, biblioteki wolnych podręczników.

Struktura programu[edytuj]

 program nazwa_programu (parametry); //nagłówek
 {część definiująca}
 begin
 {część operacyjna}
 end.

Przykład[edytuj]

 program ;
 {$APPTYPE CONSOLE}
 uses SysUtils;
 var
 a:integer
 begin
 writeln ('podaj liczbe');
 readln (a);
   if a mod 2=0 then writeln ('liczba parzysta')
     else writeln ('liczba nieparzysta')
 end.

Uwagi[edytuj]

Program może występować w dwóch wariantach:

  • tekstowy - tekstowe okno DOSa, obsługiwane przez bibliotekę modułów RTL (runtime library).
  • graficzny - przeznaczony dla środowiska Windows i obsługiwany przez bibliotekę VCL (visual component library).

Podstawowe elementy języka[edytuj]

Słowa kluczowe[edytuj]

Zastrzeżone słowa języka (Object) Pascal. Są integralną częścią języka i nie mogą być definiowane przez programistę:

and | array | as | asm | begin | case | class | const | constructor | destructor | dispinterface |div | do | downto | else | end | except | exports | file | finalization | finally | for | function | goto | if | implementation | in | inherited | initialization | inline | interface | label | library | mod | nil | not | object | of | or | out | packed | procedure | program | property | raise | record | repeat | resourcestring | set | shl | shr | string | then | threadvar | to | try | type | unit | until | uses | var | while | with | xor

Zmienne[edytuj]

Zmienna to identyfikowany przez nazwę tzw. "pojemnik" na wartość wykorzystywaną podczas działania programu. Każdą zmienną należy deklarować (patrz: deklaracja zmiennych), czyli określić jakiego typu ma być zmienna. Każda zmienna w Object Pascalu posiada swoją nazwę (identyfikator) oraz typ. Identyfikator zmiennej zależy tylko od programisty, nie może zawierać słowa kluczowego (zobacz również typy zmiennych, opisane w osobnym dziale:Typy zmiennych).

Każda zmienna musi zostać:[edytuj]

  • zadeklarowana (określenie typu zmiennej i przydzielenie jej pamięci)
  • zainicjalizowana (nadanie zmiennej wartości)

Do wprowadzania wartość "z zewnatrz" do programu służą procedury: read i readln. Wartość zmienniej można również przypisać stosując instrukcję przypisania.

Podział zmiennych:[edytuj]

  • globalne - zdefiniowane na zewnątrz procedury, funkcji czy metody, alokowane w segmencie danych (obszar przydzielany w momencie rozpoczęcia wykonywania programu),
  • lokalne - zdefiniowane wewnątrz procedur, funkcji lub metod, alokowane w segmencie stosowym (obszar przydzielany na czas pracy procedury).

Identyfikatory[edytuj]

Definicja identyfikatora w notacji BNF ma postać:

 <identyfikator> ::= <litera> { <litera> | <cyfra> }
 <litera> ::= A | B | C | D | E | F | G | H | I |J | K | L | M | N |O | P | Q | R | S | T | U | V | W | X | Y | Z 
  a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | _
 <cyfra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7| 8 | 9

Identyfikator to ciąg liter lub cyfr zaczynający się od litery (znak _ zaliczany jest do liter). Długość identyfikatora jest dowolna, ale tylko pierwszych 255 znaków jest znaczące. Identyfikator nie może zaczynać się od cyfry, np. dozwolony jest identyfikator: _11 natomiast nie wolno użyć: 11_. Nie wolno również używać w identyfikatorach słów kluczowych.

Identyfikatory służą do oznaczania programów, procedur, funkcji, metod, parametrów formalnych, modułów, bibliotek DLL, typów, zmiennych, stałych, etykiet (identyfikator etykiety może być też liczbą), pól rekordów i obiektów.

Każdy identyfikator ma określony zakres ważności. Bez wnikania w szczegóły można przyjąć, że zakres ten obejmuje blok, w którym wystąpiła odpowiednia definicja (deklaracja) identyfikatora, łącznie z blokami wewnętrznymi.

Szereg identyfikatorów posiada predefiniowane znaczenie, ich deklaracje są w poszczególnych modułach, nie są jednak słowami zastrzeżonymi. Jeżeli programista zdefiniuje taki identyfikator, to w zakresie jego ważności standardowe znaczenie jest przesłonięte, można je jednak odsłonić używając notacji:

 nazwa-modułu.identyfikator

Dyrektywy języka[edytuj]

Predefiniowane słowa, które nie są zastrzeżone, czyli mogą być zdefiniowane przez programistę. Należą do nich np.
absolute | abstract | assembler | automated | cdecl | deprecated | dynamic | export | exports | external | far | forward | near | overload | override | pascal | platform | private | protected | public | published | read | register | reintroduce | safecall | stdcall | virtual | write

Operatory[edytuj]

Priorytety operatorów[edytuj]

Priorytet Operatory
1. jednoargumentowe (+, -, @, not)
2. multiplikatywne (*, /, div, mod, and, shl, shr, as)
3. addytywne (+, –, or, xor)
4. relacyjne (=, <>, <, >, <=, >=, in, is)

Operatory arytmetyczne[edytuj]

Operatory Typ argumentu Typ wyniku
+, - (jednoargumentowe) całkowity, rzeczywisty Integer, Int64, Extended
+, -, * całkowity, rzeczywisty Integer, Int64, Extended
/ całkowity, rzeczywisty Extended
div, mod całkowity Integer,Int64

Operatory logiczne[edytuj]

Operatory Typ argumentu Typ wyniku
NOT (negacja)
OR (alternatywa) całkowity całkowity
AND (koniunkcja) logiczny logiczny
XOR (różnica symetryczna) całkowity całkowity
SHL (przesunięcie w lewo) całkowity całkowity
SHR (przesunięcie w prawo) całkowity całkowity

Operatory relacyjne[edytuj]

 =,  <>,  <,  <=,  >,  >=

argumenty typu: prostego, łańcuchowego, znakowego, upakowany typ łańcuchowy (packed array [0..x] of char), Pchar (<,<=,>,>=)
wynik typu: Boolean

Uwagi:

  • porównania łańcuchów zgodnie z rozszerzonym kodem ASCII,
  • dwa argumenty upakowanego typu łańcuchowego muszą mieć tę samą liczbę elementów,
  • argumenty typu Pchar można porównywać, gdy wskaźniki dotyczą elementów wewnątrz tej samej tablicy,
  • operacje na wskaźnikach przy typie wskaźnikowym.

Przykłady:

 'abc' < 'bc'						// true
 'Object' + ' ' + 'Pascal' = 'Object Pascal'		// true

Operatory teoriomnogościowe[edytuj]

Operatory Typ argumentu Typ wyniku
+ (suma zbiorów) typ zbiorowy typ zbiorowy
- (różnica zbiorów) typ zbiorowy typ zbiorowy
* (iloczyn zbiorów) typ zbiorowy typ zbiorowy
<= (jest zawarty, jest podzbiorem) typ zbiorowy Boolean
>= (zawiera, jest nadzbiorem) typ zbiorowy Boolean
= (równy) typ zbiorowy Boolean
<> (różny) typ zbiorowy Boolean
in (należy, jest elementem) typ bazowy Boolean

Operator konkatenacji[edytuj]

 +
  • Odpowiada operacji sklejania łańcuchów.
  • Jeżeli oba argumenty są łańcuchami krótkimi, to wynik też będzie łańcuchem krótkim (z ewentualnym obcięciem).
  • Jeżeli przynajmniej jeden argument jest łańcuchem długim, to wynik też jest łańcuchem długim.

Przykład

 'Object ' + 'Pascal' = 'Object Pascal'

Komentarze[edytuj]

Komentarze są to ciągi wyrazów, znaków nie mających wpływu na przebieg programu, oznacza się je w następujące sposoby:

 {komentarz}
 (*komentarz*)
 //komentarz

Zapis liczb[edytuj]

  • Liczba całkowita dziesiętna musi być z przedziału :

[-2 147 483 648, 2 147 483 647]

  • Liczba całkowita szesnastkowa (należy użyć symbolu $ i liter od A do F dla oznaczenia cyfr szesnastkowych) powinna być z przedziału:

[-$80000000, $7FFFFFFF]

  • Liczba rzeczywista składa się z:
    • mantysy – jest to liczba dziesiętna postaci:
 część-całkowita [. część-ułamkowa]
    • opcjonalnie:
      • litery E (lub e) – oznacza że podstawą wykładnika jest liczba 10
      • cechy – jest to liczba całkowita
  • Procedury: write i writeln pozwlają na wyprowadzanie liczb w postaci sformatowanej, z określoną liczbą cyfr przed i po kropce dziesiętnej:
 writeln(liczba:szerokość_pola:liczba_miejsc_dziesiętnych

należy pamiętać, że w skład pola przeznaczonego na liczbę wchodzi również jej znak i kropka dziesiętna, a wykładnik zawsze posiada znak i wiodące zera. Przykład:

 liczba:=123.123456789;
 writeln(liczba:6:5);

pokaże w programie liczbę: 123.12345.

Łańcuchy[edytuj]

Łańcuch jest to ciąg znaków (maksymalnie 255) zapisanych w jednej linii i ujętych w apostrofy, znaków sterujących oraz znaków w postaci dziesiętnej i szesnastkowej poprzedzonych znakiem #.

Przykład:

  • 'Object Pascal'
  • #125

Deklaracje[edytuj]

Deklaracja modułów[edytuj]

 uses lista_nazw_modułów;

Deklaracja etykiet[edytuj]

 label lista_etykiet;

Deklaracja stałych[edytuj]

 const sekwencja_definicji_stałych;

Przykład:

 const
   a=3-1;
   imie='Anna';
   s= sqrt(25);
   z:integer=2;

Deklaracja typów[edytuj]

 type identyfikator_typu_1= opis_typu
      identyfikator_typu_2= opis_typu
      ...
      identyfikator_typu_n= opis_typu

Deklaracja zmiennych[edytuj]

 var sekwencja deklaracji;

Przykład:

 var
 a,b:real;
 c,d,e:integer;
 begin
 {dalszy ciąg programu}

Deklaracja zmiennych powinna się znajdować po nagłówku programu w części definiującej a przed słowem kluczowym begin. Składnia języka zabrania deklarowania zmiennych w treści programu.