Sign in Join
Wiki copytemporary

Program/fi: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11**Program** on joko [[Executable program/fi|suoritettava ohjelma]], eli täydellinen ajettava [[Application/fi|sovellus]], tai se on [[Pascal/fi|Pascal]] [[Source code/fi|-lähdekooditiedoston]] tai tiedostojen osa, jotka voidaan kääntää ja joita ei määritelty [[Unit/fi|käännösyksikköksi (unit)]] tai [[Library|kirjastoksi]]. Tätä kutsutaan joskus pääohjelmaksi.
22
33## Pääohjelma
44
55Sana `program` on [[Reserved word/fi|varattu sana]] sillä voidaan esitellä klassisen ohjelman lähdekoodin:
66
77``` pascal
88program hiWorld(input, output, stderr);
99
1010begin
1111 writeLn('Hi!');
1212end.
1313```
1414
1515Koska [[FPC/fi|FPC]] *hylkää* ohjelman otsikon, eli ensimmäisen rivin. Käännöstiedoston nimi määräytyy lähdekooditiedoston nimen perusteella. Ohjelman nimestä tulee kuitenkin varattu [[Identifier/fi|tunniste]]. Jos edellä olevassa esimerkissä, esim. yritetään määritellä joku muu hiWorld-niminen tunniste niin se aiheuttaa kaksoiskappale [[Compile time/fi|käännösaikaisen]] virheen.
1616
1717Tiedoston kuvauksen luettelo jätetään kokonaan huomiotta, paitsi [[Mode iso|{$mode ISO}]]. [[Text]] [[Variable/fi|muuttujat]] [`input`](https://www.freepascal.org/docs-html/rtl/system/input.html), [`output`](https://www.freepascal.org/docs-html/rtl/system/output.html) ja [`stderr`](https://www.freepascal.org/docs-html/rtl/system/stderr.html) avataan aina ja niiden nimiä ei voi muuttaa muissa tiloissa. (vrt. [`SysInitStdIO`](https://www.freepascal.org/docs-html/rtl/system/sysinitstdio.html) kutsutaan aina [`rtl/linux/system.pp`](https://svn.freepascal.org/cgi-bin/viewvc.cgi/tags/release_3_0_4/rtl/linux/system.pp?view=markup#l367))
1818
1919Näin ollen FPC:ssa seuraava kokonainen lähdekoodin esimerkki kääntyy identtisesti kuten edellinen esimerkki.
2020
2121``` pascal
2222begin
2323 writeLn('Hi!');
2424end.
2525```
2626
2727## Ohjelman rakenne
2828
2929Ohjelmatiedoston on noudatettava tiettyä [[Program Structure|rakennetta]].
3030
31311. Program otsikko (Riippuen käytetystä kääntäjästä. Voi olla mahdollisesti valinnainen).
32322. Käytössä voi olla enintään yksi [[Uses/fi|uses-lauseke]] ja sen on oltava ohjelman yläosassa heti ohjelman otsikon (program) jälkeen.
33333. Vain yksi [[Block|lohko]], joka päättyy `end.` (huomaa [[period/fi|piste]]). Tämä lohko voi sisältää - toisin kuin tavallisissa lohkoissa - `resourcestring`-osion(osiot)
3434
3535Eri osioiden tarkka järjestys ja lukumäärä (vapaaehtoinen) `uses`-lausekkeen jälkeen, kunnes lopullinen kokoomalauseke [[Begin|begin]]…[[End|end.]] on vapaa. On kuitenkin joitakin huomioitavia näkökohtia.
3636
3737- [[Type/fi|type-osio]] tulee ennen kaikkia niitä osioita, jotka voivat käyttää tyyppejä, esim. [[Var/fi|var-osiot]] tai [[Routine/fi|rutiinien]] määrittelyt.
3838- Koska [[Goto|goto]] tunnetaan *paholaisen* työkaluna, [[Label|label-osio]], jos sellainen on, on mahdollisimman lähellä lausekehystä, jonka sen on tarkoitus määritellä label:lle
3939- Yleensä siirrytään yleisistä erityispiirteiseen: Esimerkiksi `var`-osio tulee [[Threadvar|threadvar-osion]] eteen. [[Const/fi|const-osio]] tulee ennen [[Resourcestring/fi|resourcestring-osiota]].
4040- `resourcestring`-osiot voivat olla joko staattisia tai globaaleja, mikä tarkoittaa, että niiden pitäisi näkyä suhteellisen pian `uses`-lausekkeen jälkeen.
4141- [[Global variables/fi|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}`).
4242- [[global compiler directives/fi|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|{$mode objfpc}]] pitäisi näkyä pian ohjelman otsikon jälkeen.
4343
4444Kun otetaan huomioon kaikki näkökohdat niin karkea ohjelmarakenne näyttää tältä (paitsi `label` ja [[sGoto|{$goto on}]], jotka mainitaan vain täydellisyyden vuoksi):
4545
4646``` pascal
4747program sectionDemo(input, output, stderr);
4848
4949// global compiler directives ----------------------------
5050{$mode objfpc}
5151{$goto on}
5252
5353uses
5454 sysutils;
5555
5656const
5757 answer = 42;
5858
5959resourcestring
6060 helloWorld = 'Hello world!';
6161
6262type
6363 primaryColor = (red, green, blue);
6464
6565procedure doSomething(const color: primaryColor);
6666begin
6767end;
6868
6969// M A I N -----------------------------------------------
7070var
7171 i: longint;
7272
7373threadvar
7474 z: longbool;
7575
7676label
7777 42;
7878begin
7979end.
8080```
8181
82-<small>\[Esimerkissä tietoisesti jätetään huomiotta mahdollisuus kirjoittaa “typed constants”, eli tartutaan pikemminkin perinteisiin käsitteisiin kuin tarpeettomasti sekoitetaan aloittelijoita\]</small>
82+\[Esimerkissä tietoisesti jätetään huomiotta mahdollisuus kirjoittaa “typed constants”, eli tartutaan pikemminkin perinteisiin käsitteisiin kuin tarpeettomasti sekoitetaan aloittelijoita\]
8383
8484## Katso myös
8585
8686- [[Unit/fi|Käännösyksikkö (unit)]]
8787- [[Library|library]]
8888
8989---
9090*From the Free Pascal wiki, page "Program/fi", as it stood on 2022-08-06 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history