Program/fi
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
Bahasa Indonesia (id) │
italiano (it) │
português (pt) │
русский (ru) │
Program on joko suoritettava ohjelma, eli täydellinen ajettava sovellus, tai se on Pascal -lähdekooditiedoston tai tiedostojen osa, jotka voidaan kääntää ja joita ei määritelty käännösyksikköksi (unit) tai kirjastoksi. Tätä kutsutaan joskus pääohjelmaksi.
Pääohjelma
Sana program
on varattu sana
sillä voidaan esitellä klassisen ohjelman lähdekoodin:
program hiWorld(input, output, stderr);
begin
writeLn('Hi!');
end.
Koska FPC hylkää ohjelman otsikon, eli ensimmäisen rivin. Käännöstiedoston nimi määräytyy lähdekooditiedoston nimen perusteella. Ohjelman nimestä tulee kuitenkin varattu tunniste. Jos edellä olevassa esimerkissä, esim. yritetään määritellä joku muu hiWorld-niminen tunniste niin se aiheuttaa kaksoiskappale käännösaikaisen virheen.
Tiedoston kuvauksen luettelo jätetään kokonaan huomiotta, paitsi {$mode ISO}
.
Text
muuttujat input
, output
ja stderr
avataan aina ja niiden nimiä ei voi muuttaa muissa tiloissa. (vrt. SysInitStdIO
kutsutaan aina rtl/linux/system.pp)
Näin ollen FPC:ssa seuraava kokonainen lähdekoodin esimerkki kääntyy identtisesti kuten edellinen esimerkki.
begin
writeLn('Hi!');
end.
Ohjelman rakenne
Ohjelmatiedoston on noudatettava tiettyä rakennetta.
- Program otsikko (Riippuen käytetystä kääntäjästä. Voi olla mahdollisesti valinnainen).
- Käytössä voi olla enintään yksi
uses
-lauseke ja sen on oltava ohjelman yläosassa heti ohjelman otsikon (program) jälkeen. - Vain yksi lohko, joka päättyy
end.
(huomaa piste). Tämä lohko voi sisältää - toisin kuin tavallisissa lohkoissa -resourcestring
-osion(osiot)
Eri osioiden tarkka järjestys ja lukumäärä (vapaaehtoinen) uses
-lausekkeen jälkeen, kunnes lopullinen kokoomalauseke begin
…end.
on vapaa.
On kuitenkin joitakin huomioitavia näkökohtia.
type
-osio tulee ennen kaikkia niitä osioita, jotka voivat käyttää tyyppejä, esim.var
-osiot tai rutiinien määrittelyt.- Koska
goto
tunnetaan paholaisen työkaluna,label
-osio, jos sellainen on, on mahdollisimman lähellä lausekehystä, jonka sen on tarkoitus määritellä label:lle - Yleensä siirrytään yleisistä erityispiirteiseen: Esimerkiksi
var
-osio tuleethreadvar
-osion eteen.const
-osio tulee ennenresourcestring
-osiota. resourcestring
-osiot voivat olla joko staattisia tai globaaleja, mikä tarkoittaa, että niiden pitäisi näkyä suhteellisen pianuses
-lausekkeen jälkeen.- Globaalien muuttujien suoraa käyttöä rutiineissa (tai jopa pelkkää mahdollisuutta) pidetään huonona tyylinä. Sen sijaan julkista / määritä ne rutiinien
var
-osiossa. (varovaisuus: toista se turvallisesti ja aseta{$writeableConst off}
). - Globaalit kääntäjän ohjeet, erityisesti sellaiset, jotka sallivat tai rajoittavat sitä, mitä voidaan kirjoittaa (esim.
{$goto on}
joka sallii goto-käskyn käytön) tai implisiittisesti lisätä yksikköriippuvuuksia, kuten{$mode objfpc}
pitäisi näkyä pian ohjelman otsikon jälkeen.
Kun otetaan huomioon kaikki näkökohdat niin karkea ohjelmarakenne näyttää tältä (paitsi label
ja {$goto on}
, jotka mainitaan vain täydellisyyden vuoksi):
program sectionDemo(input, output, stderr);
// global compiler directives ----------------------------
{$mode objfpc}
{$goto on}
uses
sysutils;
const
answer = 42;
resourcestring
helloWorld = 'Hello world!';
type
primaryColor = (red, green, blue);
procedure doSomething(const color: primaryColor);
begin
end;
// M A I N -----------------------------------------------
var
i: longint;
threadvar
z: longbool;
label
42;
begin
end.
[Esimerkissä tietoisesti jätetään huomiotta mahdollisuus kirjoittaa “typed constants”, eli tartutaan pikemminkin perinteisiin käsitteisiin kuin tarpeettomasti sekoitetaan aloittelijoita]