Sign in Join
Wiki copytemporary

Program/fi: what changed

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

Title: Program/fi

OldNewLine
1+**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.
2+
3+## Pääohjelma
4+
5+Sana `program` on [[Reserved word/fi|varattu sana]] sillä voidaan esitellä klassisen ohjelman lähdekoodin:
6+
7+``` pascal
8+program hiWorld(input, output, stderr);
9+
10+begin
11+ writeLn('Hi!');
12+end.
13+```
14+
15+Koska [[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.
16+
17+Tiedoston 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))
18+
19+Näin ollen FPC:ssa seuraava kokonainen lähdekoodin esimerkki kääntyy identtisesti kuten edellinen esimerkki.
20+
21+``` pascal
22+begin
23+ writeLn('Hi!');
24+end.
25+```
26+
27+## Ohjelman rakenne
28+
29+Ohjelmatiedoston on noudatettava tiettyä [[Program Structure|rakennetta]].
30+
31+1. Program otsikko (Riippuen käytetystä kääntäjästä. Voi olla mahdollisesti valinnainen).
32+2. 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.
33+3. 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)
34+
35+Eri 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.
36+
37+- [[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.
38+- 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
39+- Yleensä siirrytään yleisistä erityispiirteiseen: Esimerkiksi `var`-osio tulee [[Threadvar|threadvar-osion]] eteen. [[Const/fi|const-osio]] tulee ennen [[Resourcestring/fi|resourcestring-osiota]].
40+- `resourcestring`-osiot voivat olla joko staattisia tai globaaleja, mikä tarkoittaa, että niiden pitäisi näkyä suhteellisen pian `uses`-lausekkeen jälkeen.
41+- [[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}`).
42+- [[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.
43+
44+Kun 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):
45+
46+``` pascal
47+program sectionDemo(input, output, stderr);
48+
49+// global compiler directives ----------------------------
50+{$mode objfpc}
51+{$goto on}
52+
53+uses
54+ sysutils;
55+
56+const
57+ answer = 42;
58+
59+resourcestring
60+ helloWorld = 'Hello world!';
61+
62+type
63+ primaryColor = (red, green, blue);
64+
65+procedure doSomething(const color: primaryColor);
66+begin
67+end;
68+
69+// M A I N -----------------------------------------------
70+var
71+ i: longint;
72+
73+threadvar
74+ z: longbool;
75+
76+label
77+ 42;
78+begin
79+end.
80+```
81+
82+<small>\[Esimerkissä tietoisesti jätetään huomiotta mahdollisuus kirjoittaa “typed constants”, eli tartutaan pikemminkin perinteisiin käsitteisiin kuin tarpeettomasti sekoitetaan aloittelijoita\]</small>
83+
84+## Katso myös
85+
86+- [[Unit/fi|Käännösyksikkö (unit)]]
87+- [[Library|library]]
88+
89+---
90+*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