Program/fi

From Free Pascal wiki

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.

  1. Program otsikko (Riippuen käytetystä kääntäjästä. Voi olla mahdollisesti valinnainen).
  2. Käytössä voi olla enintään yksi uses-lauseke ja sen on oltava ohjelman yläosassa heti ohjelman otsikon (program) jälkeen.
  3. 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 beginend. 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 tulee threadvar-osion eteen. const-osio tulee ennen resourcestring-osiota.
  • resourcestring-osiot voivat olla joko staattisia tai globaaleja, mikä tarkoittaa, että niiden pitäisi näkyä suhteellisen pian uses-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]

Katso myös