Difference between revisions of "Variable/fi"
(→Saatavuus: modeswitch) |
|||
Line 7: | Line 7: | ||
== Määrittely == | == Määrittely == | ||
− | Muuttujat määritellään [[Var|<syntaxhighlight lang="pascal" | + | Muuttujat määritellään [[Var|<syntaxhighlight lang="pascal" inline>var</syntaxhighlight>-osiossa]]. [[Pascal/fi|Pascal]]issa jokaisella muuttujalla on [[Data type/fi|tietotyyppi]], joka on jo tunnettu käännösaikana |
− | (Tai sen [[Variant|data typpi on <syntaxhighlight lang="pascal" | + | (Tai sen [[Variant|data typpi on <syntaxhighlight lang="pascal" inline>variant</syntaxhighlight>]]). Muuttuja ilmoitetaan (tunniste, tietotyyppi) parina, erotettuna [[Colon|kaksoispisteellä]]. Muuttujat määritellään [[Var/fi|<syntaxhighlight lang="pascal" inline>var</syntaxhighlight> osiossa]]. |
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
var | var | ||
Line 15: | Line 15: | ||
− | Tietotyypin tilavaatimusten mukaan pino pitää varatun muistin määrän heti, kun vastaava laajuus syötetään. Riippuen siitä, mihin <syntaxhighlight lang="pascal" | + | Tietotyypin tilavaatimusten mukaan pino pitää varatun muistin määrän heti, kun vastaava laajuus syötetään. Riippuen siitä, mihin <syntaxhighlight lang="pascal" inline>var</syntaxhighlight>-osio on sijoitettu, voidaan "puhua" joko [[Global variables/fi|globaaleista]] tai [[Local variables/fi|paikallisista]] muuttujista. |
== Käsittely == | == Käsittely == | ||
− | Muuttujien arvoja käsitellään [[Becomes/fi|saa arvokseen operaattorilla <syntaxhighlight lang="pascal" | + | Muuttujien arvoja käsitellään [[Becomes/fi|saa arvokseen operaattorilla <syntaxhighlight lang="pascal" inline>:=</syntaxhighlight>]] |
Tämän lisäksi on joukko sisäänrakennettuja aliohjelmia jotka määrittää implisiittisesti arvot muuttujalle: | Tämän lisäksi on joukko sisäänrakennettuja aliohjelmia jotka määrittää implisiittisesti arvot muuttujalle: | ||
− | * input/output rutiinit kuten, <syntaxhighlight lang="pascal" | + | * input/output rutiinit kuten, <syntaxhighlight lang="pascal" inline>get</syntaxhighlight> ja <syntaxhighlight lang="pascal" inline>put</syntaxhighlight>, [[Read/fi|<syntaxhighlight lang="pascal" inline>read</syntaxhighlight>]] ja <syntaxhighlight lang="pascal" inline>readLn</syntaxhighlight>, <syntaxhighlight lang="pascal" inline>assign</syntaxhighlight> ja <syntaxhighlight lang="pascal" inline>close</syntaxhighlight> |
− | * <syntaxhighlight lang="pascal" | + | * <syntaxhighlight lang="pascal" inline>new</syntaxhighlight> ja <syntaxhighlight lang="pascal" inline>dispose</syntaxhighlight> kun käsitellään [[Pointer/fi|osoittimia]] ja [[Object/fi|olioita]] |
− | * <syntaxhighlight lang="pascal" | + | * <syntaxhighlight lang="pascal" inline>setLength</syntaxhighlight> kun käsitellään [[Dynamic array|dynaamisia taulukoita]] |
== Määrittely == | == Määrittely == | ||
Line 41: | Line 41: | ||
Huomaa, että on olemassa pari tietotyyppiä, jotka ovat itse asiassa viitteitä, mutta jotka poistetaan automaattisesti, mukaan lukien, mutta ei rajoittuen, [[Class/fi|luokat]], dynaamiset taulukot ja [[AnsiString|ANSI-merkkijonot]]. | Huomaa, että on olemassa pari tietotyyppiä, jotka ovat itse asiassa viitteitä, mutta jotka poistetaan automaattisesti, mukaan lukien, mutta ei rajoittuen, [[Class/fi|luokat]], dynaamiset taulukot ja [[AnsiString|ANSI-merkkijonot]]. | ||
− | Kun <syntaxhighlight lang="pascal" | + | Kun <syntaxhighlight lang="pascal" inline>{$modeSwitch autoDeref+}</syntaxhighlight> (ei suositella), myös tyypitetyt osoittimet poistetaan hiljaa ilman, että [[^/fi|<syntaxhighlight lang="pascal" inline>^</syntaxhighlight> ("hattu symboli")]] on läsnä. |
Tämä tarkoittaa, että ettei välttämättä toimi varsinaiseen muistilohkoon, johon muuttuja on aidosti yhteydessä, mutta jossain muualla. | Tämä tarkoittaa, että ettei välttämättä toimi varsinaiseen muistilohkoon, johon muuttuja on aidosti yhteydessä, mutta jossain muualla. | ||
Line 48: | Line 48: | ||
== Muisti alias == | == Muisti alias == | ||
− | [[Keyword/fi|Avainsanan]] [[Absolute/fi|<syntaxhighlight lang="pascal" | + | [[Keyword/fi|Avainsanan]] [[Absolute/fi|<syntaxhighlight lang="pascal" inline>absolute</syntaxhighlight>]] yhteydessä tunniste voidaan liittää aiemmin varattuun muistiin. Vaikka tavallisesti (tunniste, tietotyyppi)-pari asettaa tietyn määrän muistia syrjään, seuraava <syntaxhighlight lang="pascal" inline>c</syntaxhighlight>:n esittely ei vie mitään lisätilaa, |
− | vaan linkittää tunnisteen <syntaxhighlight lang="pascal" | + | vaan linkittää tunnisteen <syntaxhighlight lang="pascal" inline>c</syntaxhighlight> muistilohkoon, joka on varattu <syntaxhighlight lang="pascal" inline>x</syntaxhighlight>lle: |
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
var | var | ||
Line 56: | Line 56: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Tässä muistialiasta käytettiin yhtenä strategiana vakuuttamaan [[Compiler/fi|kääntäjä]] sallimaan [[Char/fi|<syntaxhighlight lang="pascal" | + | Tässä muistialiasta käytettiin yhtenä strategiana vakuuttamaan [[Compiler/fi|kääntäjä]] sallimaan [[Char/fi|<syntaxhighlight lang="pascal" inline>char</syntaxhighlight> type]]-tyyppiä koskevat toiminnot, |
− | kun taustalla oleva muisti oli alunperin varattu [[Byte/fi|<syntaxhighlight lang="pascal" | + | kun taustalla oleva muisti oli alunperin varattu [[Byte/fi|<syntaxhighlight lang="pascal" inline>byte</syntaxhighlight>]]-tyyppiselle arvolle. Tämä ominaisuus on valittava viisaasti. Se edellyttää että on tietoa tietotyypin muistirakenteesta, |
joka ei aiheuta minkäänlaista käyttöoikeusvirhettä. | joka ei aiheuta minkäänlaista käyttöoikeusvirhettä. | ||
Latest revision as of 17:13, 6 August 2022
│
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
Muuttuja
Muuttuja on tunniste, joka liittyy muistiin, joka voidaan tarkastaa (tai lukea) ja käsitellä ajon aikana.
Määrittely
Muuttujat määritellään var
-osiossa. Pascalissa jokaisella muuttujalla on tietotyyppi, joka on jo tunnettu käännösaikana
(Tai sen data typpi on variant
). Muuttuja ilmoitetaan (tunniste, tietotyyppi) parina, erotettuna kaksoispisteellä. Muuttujat määritellään var
osiossa.
var
foo: char;
Tietotyypin tilavaatimusten mukaan pino pitää varatun muistin määrän heti, kun vastaava laajuus syötetään. Riippuen siitä, mihin var
-osio on sijoitettu, voidaan "puhua" joko globaaleista tai paikallisista muuttujista.
Käsittely
Muuttujien arvoja käsitellään saa arvokseen operaattorilla :=
Tämän lisäksi on joukko sisäänrakennettuja aliohjelmia jotka määrittää implisiittisesti arvot muuttujalle:
- input/output rutiinit kuten,
get
japut
,read
jareadLn
,assign
jaclose
new
jadispose
kun käsitellään osoittimia ja olioitasetLength
kun käsitellään dynaamisia taulukoita
Määrittely
Muuttuja voidaan määritellä niin että se on esitelty ja alustettu yhdellä lausekkeella seuraavasti:
var
x: integer = 42;
Huomaa, että tämä syntaksi ei ole alkuperäistä Pascalia. Siinä esittely ja tehtävät pidetään erillään suunnittelusta. Tämä syntaksi rikkoo tätä periaatetta.
Saatavuus
Muuttuja on saatavilla, mikä tarkoittaa sitä, että viitataan viitattuun muistipaikkaan arvoon yksinkertaisesti määrittelemällä sen tunnus (missä tahansa lauseketta odotetaan).
Huomaa, että on olemassa pari tietotyyppiä, jotka ovat itse asiassa viitteitä, mutta jotka poistetaan automaattisesti, mukaan lukien, mutta ei rajoittuen, luokat, dynaamiset taulukot ja ANSI-merkkijonot.
Kun {$modeSwitch autoDeref+}
(ei suositella), myös tyypitetyt osoittimet poistetaan hiljaa ilman, että ^
("hattu symboli") on läsnä.
Tämä tarkoittaa, että ettei välttämättä toimi varsinaiseen muistilohkoon, johon muuttuja on aidosti yhteydessä, mutta jossain muualla.
Yleensä muuttujan muistipalaa tulkitaan sen tietotyypin mukaan, jossa se on määritelty. 'Typecastauksen' avulla voidaan muuttaa tietyn muuttujan muistilohkoa (ilmaisua kohti).
Muisti alias
Avainsanan absolute
yhteydessä tunniste voidaan liittää aiemmin varattuun muistiin. Vaikka tavallisesti (tunniste, tietotyyppi)-pari asettaa tietyn määrän muistia syrjään, seuraava c
:n esittely ei vie mitään lisätilaa,
vaan linkittää tunnisteen c
muistilohkoon, joka on varattu x
lle:
var
x: byte;
c: char absolute x;
Tässä muistialiasta käytettiin yhtenä strategiana vakuuttamaan kääntäjä sallimaan char
type-tyyppiä koskevat toiminnot,
kun taustalla oleva muisti oli alunperin varattu byte
-tyyppiselle arvolle. Tämä ominaisuus on valittava viisaasti. Se edellyttää että on tietoa tietotyypin muistirakenteesta,
joka ei aiheuta minkäänlaista käyttöoikeusvirhettä.
Tärkeintä on, että tällä tavoin ylimääräisesti viitattu muisti käsitellään ikään kuin se olisi määritelty normaalien sääntöjen mukaisesti.