Variable/fi: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Variable/fi
| Old | New | Line | |
|---|---|---|---|
| 1 | + | # Muuttuja | |
| 2 | + | ||
| 3 | + | **Muuttuja** on [[Identifier/fi|tunniste]], joka liittyy muistiin, joka voidaan tarkastaa (tai lukea) ja käsitellä [[runtime|ajon aikana]]. | |
| 4 | + | ||
| 5 | + | ## Määrittely | |
| 6 | + | ||
| 7 | + | Muuttujat määritellään [[Var|var-osiossa]]. [[Pascal/fi|Pascalissa]] jokaisella muuttujalla on [[Data type/fi|tietotyyppi]], joka on jo tunnettu käännösaikana (Tai sen [[Variant|data typpi on variant]]). Muuttuja ilmoitetaan (tunniste, tietotyyppi) parina, erotettuna [[Colon|kaksoispisteellä]]. Muuttujat määritellään [[Var/fi|var osiossa]]. | |
| 8 | + | ||
| 9 | + | ``` pascal | |
| 10 | + | var | |
| 11 | + | foo: char; | |
| 12 | + | ``` | |
| 13 | + | ||
| 14 | + | 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 [[Global variables/fi|globaaleista]] tai [[Local variables/fi|paikallisista]] muuttujista. | |
| 15 | + | ||
| 16 | + | ## Käsittely | |
| 17 | + | ||
| 18 | + | Muuttujien arvoja käsitellään [[Becomes/fi|saa arvokseen operaattorilla :=]] Tämän lisäksi on joukko sisäänrakennettuja aliohjelmia jotka määrittää implisiittisesti arvot muuttujalle: | |
| 19 | + | ||
| 20 | + | - input/output rutiinit kuten, `get` ja `put`, [[Read/fi|read]] ja `readLn`, `assign` ja `close` | |
| 21 | + | - `new` ja `dispose` kun käsitellään [[Pointer/fi|osoittimia]] ja [[Object/fi|olioita]] | |
| 22 | + | - `setLength` kun käsitellään [[Dynamic array|dynaamisia taulukoita]] | |
| 23 | + | ||
| 24 | + | ## Määrittely | |
| 25 | + | ||
| 26 | + | Muuttuja voidaan määritellä niin että se on esitelty ja alustettu yhdellä lausekkeella seuraavasti: | |
| 27 | + | ||
| 28 | + | ``` pascal | |
| 29 | + | var | |
| 30 | + | x: integer = 42; | |
| 31 | + | ``` | |
| 32 | + | ||
| 33 | + | 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. | |
| 34 | + | ||
| 35 | + | ## Saatavuus | |
| 36 | + | ||
| 37 | + | Muuttuja on saatavilla, mikä tarkoittaa sitä, että viitataan viitattuun muistipaikkaan arvoon yksinkertaisesti määrittelemällä sen tunnus (missä tahansa lauseketta odotetaan). | |
| 38 | + | ||
| 39 | + | 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 `{$modeSwitch autoDeref+}` (ei suositella), myös tyypitetyt osoittimet poistetaan hiljaa ilman, että [[^/fi|^ ("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. | |
| 40 | + | ||
| 41 | + | Yleensä muuttujan muistipalaa tulkitaan sen tietotyypin mukaan, jossa se on määritelty. [[Typecast/fi|'Typecastauksen']] avulla voidaan muuttaa tietyn muuttujan muistilohkoa (ilmaisua kohti). | |
| 42 | + | ||
| 43 | + | ## Muisti alias | |
| 44 | + | ||
| 45 | + | [[Keyword/fi|Avainsanan]] [[Absolute/fi|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: | |
| 46 | + | ||
| 47 | + | ``` pascal | |
| 48 | + | var | |
| 49 | + | x: byte; | |
| 50 | + | c: char absolute x; | |
| 51 | + | ``` | |
| 52 | + | ||
| 53 | + | Tässä muistialiasta käytettiin yhtenä strategiana vakuuttamaan [[Compiler/fi|kääntäjä]] sallimaan [[Char/fi|char type]]-tyyppiä koskevat toiminnot, kun taustalla oleva muisti oli alunperin varattu [[Byte/fi|byte]]-tyyppiselle arvolle. Tämä ominaisuus on valittava viisaasti. Se edellyttää että on tietoa tietotyypin muistirakenteesta, joka ei aiheuta minkäänlaista käyttöoikeusvirhettä. | |
| 54 | + | ||
| 55 | + | 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. | |
| 56 | + | ||
| 57 | + | ## Katso myös | |
| 58 | + | ||
| 59 | + | - [[Constant/fi|vakiot]] | |
| 60 | + | ||
| 61 | + | --- | |
| 62 | + | *From the Free Pascal wiki, page "Variable/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).* |
