Difference between revisions of "Program/fi"
(Created page with "{{Program}} '''Program''' on joko suoritettava ohjelma, eli täydellinen ajettava sovellus, tai se on Pascal Sour...") |
|||
Line 4: | Line 4: | ||
== Pääohjelma == | == Pääohjelma == | ||
− | Sana <syntaxhighlight lang="pascal" | + | Sana <syntaxhighlight lang="pascal" inline>program</syntaxhighlight> on [[Reserved word/fi|varattu sana]] |
sillä voidaan esitellä klassisen ohjelman lähdekoodin: | sillä voidaan esitellä klassisen ohjelman lähdekoodin: | ||
<syntaxhighlight lang="pascal" highlight="1"> | <syntaxhighlight lang="pascal" highlight="1"> | ||
Line 16: | Line 16: | ||
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. | 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. | ||
− | Tiedoston kuvauksen luettelo jätetään kokonaan huomiotta, paitsi [[Mode iso|<syntaxhighlight lang="pascal" | + | Tiedoston kuvauksen luettelo jätetään kokonaan huomiotta, paitsi [[Mode iso|<syntaxhighlight lang="pascal" inline>{$mode ISO}</syntaxhighlight>]]. |
− | [[Text|<syntaxhighlight lang="pascal" | + | [[Text|<syntaxhighlight lang="pascal" inline>Text</syntaxhighlight>]] [[Variable/fi|muuttujat]] {{Doc|package=RTL|unit=system|identifier=input|text=<syntaxhighlight lang="pascal" inline>input</syntaxhighlight>}}, {{Doc|package=RTL|unit=system|identifier=output|text=<syntaxhighlight lang="pascal" inline>output</syntaxhighlight>}} ja {{Doc|package=RTL|unit=system|identifier=stderr|text=<syntaxhighlight lang="pascal" inline>stderr</syntaxhighlight>}} avataan aina ja niiden nimiä ei voi muuttaa muissa tiloissa. (vrt. {{Doc|package=RTL|unit=system|identifier=sysinitstdio|text=<syntaxhighlight lang="pascal" inline>SysInitStdIO</syntaxhighlight>}} |
kutsutaan aina [https://svn.freepascal.org/cgi-bin/viewvc.cgi/tags/release_3_0_4/rtl/linux/system.pp?view=markup#l367 <tt>rtl/linux/system.pp</tt>]) | kutsutaan aina [https://svn.freepascal.org/cgi-bin/viewvc.cgi/tags/release_3_0_4/rtl/linux/system.pp?view=markup#l367 <tt>rtl/linux/system.pp</tt>]) | ||
Line 31: | Line 31: | ||
Ohjelmatiedoston on noudatettava tiettyä [[Program Structure|rakennetta]]. | Ohjelmatiedoston on noudatettava tiettyä [[Program Structure|rakennetta]]. | ||
# Program otsikko (Riippuen käytetystä kääntäjästä. Voi olla mahdollisesti valinnainen). | # Program otsikko (Riippuen käytetystä kääntäjästä. Voi olla mahdollisesti valinnainen). | ||
− | # Käytössä voi olla enintään yksi [[Uses/fi|<syntaxhighlight lang="pascal" | + | # Käytössä voi olla enintään yksi [[Uses/fi|<syntaxhighlight lang="pascal" inline>uses</syntaxhighlight>-lauseke]] ja sen on oltava ohjelman yläosassa heti ohjelman otsikon (program) jälkeen. |
− | # Vain yksi [[Block|lohko]], joka päättyy <syntaxhighlight lang="pascal" | + | # Vain yksi [[Block|lohko]], joka päättyy <syntaxhighlight lang="pascal" inline>end.</syntaxhighlight> (huomaa [[period/fi#Modulin loppu|piste]]). Tämä lohko voi sisältää - toisin kuin tavallisissa lohkoissa - <syntaxhighlight lang="pascal" inline>resourcestring</syntaxhighlight>-osion(osiot) |
− | Eri osioiden tarkka järjestys ja lukumäärä (vapaaehtoinen) <syntaxhighlight lang="pascal" | + | Eri osioiden tarkka järjestys ja lukumäärä (vapaaehtoinen) <syntaxhighlight lang="pascal" inline>uses</syntaxhighlight>-lausekkeen jälkeen, kunnes lopullinen kokoomalauseke [[Begin|<syntaxhighlight lang="pascal" inline>begin</syntaxhighlight>]]…[[End|<syntaxhighlight lang="pascal" inline>end.</syntaxhighlight>]] on vapaa. |
On kuitenkin joitakin huomioitavia näkökohtia. | On kuitenkin joitakin huomioitavia näkökohtia. | ||
− | * [[Type/fi|<syntaxhighlight lang="pascal" | + | * [[Type/fi|<syntaxhighlight lang="pascal" inline>type</syntaxhighlight>-osio]] tulee ennen kaikkia niitä osioita, jotka voivat käyttää tyyppejä, esim. [[Var/fi|<syntaxhighlight lang="pascal" inline>var</syntaxhighlight>-osiot]] tai [[Routine/fi|rutiinien]] määrittelyt. |
− | * Koska [[Goto|<syntaxhighlight lang="pascal" | + | * Koska [[Goto|<syntaxhighlight lang="pascal" inline>goto</syntaxhighlight>]] tunnetaan ''paholaisen'' työkaluna, [[Label|<syntaxhighlight lang="pascal" inline>label</syntaxhighlight>-osio]], jos sellainen on, on mahdollisimman lähellä lausekehystä, jonka sen on tarkoitus määritellä label:lle |
− | * Yleensä siirrytään yleisistä erityispiirteiseen: Esimerkiksi <syntaxhighlight lang="pascal" | + | * Yleensä siirrytään yleisistä erityispiirteiseen: Esimerkiksi <syntaxhighlight lang="pascal" inline>var</syntaxhighlight>-osio tulee [[Threadvar|<syntaxhighlight lang="pascal" inline>threadvar</syntaxhighlight>-osion]] eteen. [[Const/fi|<syntaxhighlight lang="pascal" inline>const</syntaxhighlight>-osio]] tulee ennen [[Resourcestring/fi|<syntaxhighlight lang="pascal" inline>resourcestring</syntaxhighlight>-osiota]]. |
− | * <syntaxhighlight lang="pascal" | + | * <syntaxhighlight lang="pascal" inline>resourcestring</syntaxhighlight>-osiot voivat olla joko staattisia tai globaaleja, mikä tarkoittaa, että niiden pitäisi näkyä suhteellisen pian <syntaxhighlight lang="pascal" inline>uses</syntaxhighlight>-lausekkeen jälkeen. |
− | * [[Global variables/fi|Globaalien muuttujien]] suoraa käyttöä rutiineissa (tai jopa pelkkää mahdollisuutta) pidetään huonona tyylinä. Sen sijaan julkista / määritä ne rutiinien <syntaxhighlight lang="pascal" | + | * [[Global variables/fi|Globaalien muuttujien]] suoraa käyttöä rutiineissa (tai jopa pelkkää mahdollisuutta) pidetään huonona tyylinä. Sen sijaan julkista / määritä ne rutiinien <syntaxhighlight lang="pascal" inline>var</syntaxhighlight>-osiossa. (varovaisuus: toista se turvallisesti ja aseta <syntaxhighlight lang="pascal" inline>{$writeableConst off}</syntaxhighlight>). |
− | * [[global compiler directives/fi|Globaalit kääntäjän ohjeet]], erityisesti sellaiset, jotka sallivat tai rajoittavat sitä, mitä voidaan kirjoittaa (esim. <syntaxhighlight lang="pascal" | + | * [[global compiler directives/fi|Globaalit kääntäjän ohjeet]], erityisesti sellaiset, jotka sallivat tai rajoittavat sitä, mitä voidaan kirjoittaa (esim. <syntaxhighlight lang="pascal" inline>{$goto on}</syntaxhighlight> joka sallii goto-käskyn käytön) tai implisiittisesti lisätä yksikköriippuvuuksia, kuten [[Mode ObjFPC|<syntaxhighlight lang="pascal" inline>{$mode objfpc}</syntaxhighlight>]] pitäisi näkyä pian ohjelman otsikon jälkeen. |
− | Kun otetaan huomioon kaikki näkökohdat niin karkea ohjelmarakenne näyttää tältä (paitsi <syntaxhighlight lang="pascal" | + | Kun otetaan huomioon kaikki näkökohdat niin karkea ohjelmarakenne näyttää tältä (paitsi <syntaxhighlight lang="pascal" inline>label</syntaxhighlight> ja [[sGoto|<syntaxhighlight lang="pascal" inline>{$goto on}</syntaxhighlight>]], jotka mainitaan vain täydellisyyden vuoksi): |
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
program sectionDemo(input, output, stderr); | program sectionDemo(input, output, stderr); |
Latest revision as of 17:16, 6 August 2022
│
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]