Difference between revisions of "Nil/fi"

From Free Pascal wiki
Jump to navigationJump to search
 
Line 1: Line 1:
 
{{Nil}}
 
{{Nil}}
  
[[Reserved word/fi|Varattu sana]] <syntaxhighlight lang="pascal" enclose="none">nil</syntaxhighlight> edustaa osoittimen muuttujan erityistä [[Constant|vakio]] arvoa, joka ei osoita mihinkään erityiseen ([[Variable/fi|muuttujaan]]).  
+
[[Reserved word/fi|Varattu sana]] <syntaxhighlight lang="pascal" inline>nil</syntaxhighlight> edustaa osoittimen muuttujan erityistä [[Constant|vakio]] arvoa, joka ei osoita mihinkään erityiseen ([[Variable/fi|muuttujaan]]).  
[[FPC/fi|FPC]]:ssa se toteutetaan osoittimena <syntaxhighlight lang="pascal" enclose="none">pointer(0)</syntaxhighlight> (numeerinen arvo nolla), mutta ohjelmoijan ei ole tarkoitus käyttää tätä tosiasiaa.
+
[[FPC/fi|FPC]]:ssa se toteutetaan osoittimena <syntaxhighlight lang="pascal" inline>pointer(0)</syntaxhighlight> (numeerinen arvo nolla), mutta ohjelmoijan ei ole tarkoitus käyttää tätä tosiasiaa.
 
Muissa ohjelmointikielissä, esimerkiksi C: ssä, kirjoitetaan null:a. Termejä "nollaosoitin" tai "nil-osoitin" käytetään vaihtelevasti, jopa [[Standard Pascal/fi|Pascal]]-ohjelmoijien keskuudessa.
 
Muissa ohjelmointikielissä, esimerkiksi C: ssä, kirjoitetaan null:a. Termejä "nollaosoitin" tai "nil-osoitin" käytetään vaihtelevasti, jopa [[Standard Pascal/fi|Pascal]]-ohjelmoijien keskuudessa.
  
Sanan <syntaxhighlight lang="pascal" enclose="none">nil</syntaxhighlight> etymologiota (sanan alkuperän suuntia) on kaksi. Toinen sanoo, että se on lyhennys latinalaiselle sanalle "nihil", joka tarkoittaa "ei mitään". Ja toinen viittaa siihen,
+
Sanan <syntaxhighlight lang="pascal" inline>nil</syntaxhighlight> etymologiota (sanan alkuperän suuntia) on kaksi. Toinen sanoo, että se on lyhennys latinalaiselle sanalle "nihil", joka tarkoittaa "ei mitään". Ja toinen viittaa siihen,
että <syntaxhighlight lang="pascal" enclose="none">NIL</syntaxhighlight> on englanninkielinen lyhenne sanoista “not in list” ("ei luettelossa").  
+
että <syntaxhighlight lang="pascal" inline>NIL</syntaxhighlight> on englanninkielinen lyhenne sanoista “not in list” ("ei luettelossa").  
 
Ja koska saksalainen sana „Null“ tarkoittaa numeroa "nolla" joten sekaannuksen välttämiseksi tai käsitteen ja arvon erottamiseksi niin tätäkään sanaa ei valittu. Tämä ei missään tapauksessa vaikuta ohjelmointiin.
 
Ja koska saksalainen sana „Null“ tarkoittaa numeroa "nolla" joten sekaannuksen välttämiseksi tai käsitteen ja arvon erottamiseksi niin tätäkään sanaa ei valittu. Tämä ei missään tapauksessa vaikuta ohjelmointiin.
  
 
== Yhteensopivuus==
 
== Yhteensopivuus==
<syntaxhighlight lang="pascal" enclose="none">nil</syntaxhighlight> voidaan tietysti [[Becomes/fi|liittää]] [[Pointer/fi|osoittimen]] muuttujaan, mutta myös muihin tyyppeihin, jotka ovat itse asiassa viitteitä, mutta niiden käyttö on helpompaa.  
+
<syntaxhighlight lang="pascal" inline>nil</syntaxhighlight> voidaan tietysti [[Becomes/fi|liittää]] [[Pointer/fi|osoittimen]] muuttujaan, mutta myös muihin tyyppeihin, jotka ovat itse asiassa viitteitä, mutta niiden käyttö on helpompaa.  
 
Esimerkiksi [[Dynamic array/fi|dynaamiset taulukot]] tai [[Class/fi|luokat (Class)]]:
 
Esimerkiksi [[Dynamic array/fi|dynaamiset taulukot]] tai [[Class/fi|luokat (Class)]]:
  
Line 35: Line 35:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Huomaa, että <syntaxhighlight lang="pascal" enclose="none">nil</syntaxhighlight> määrittäminen dynaamiselle taulukolle on käytännöllisesti katsoen samanlainen kuin [[Procedure/fi|aliohjelma]] kutsu <syntaxhighlight lang="pascal" enclose="none">setLength(dynamicArrayVariable, 0)</syntaxhighlight>
+
Huomaa, että <syntaxhighlight lang="pascal" inline>nil</syntaxhighlight> määrittäminen dynaamiselle taulukolle on käytännöllisesti katsoen samanlainen kuin [[Procedure/fi|aliohjelma]] kutsu <syntaxhighlight lang="pascal" inline>setLength(dynamicArrayVariable, 0)</syntaxhighlight>
Taulukon arvot menetetään, jos <syntaxhighlight lang="pascal" enclose="none">dynamicArrayVariable</syntaxhighlight>:n viitemäärä menee nollaan. Muita tyyppejä varten ei kuitenkaan ole vastaavaa mekanismia, esimerkiksi <syntaxhighlight lang="pascal" enclose="none">nil</syntaxhighlight> määrittäminen luokan tai osoittimen muuttujaan ei vapauta (eli de-allokoi) muistia, jossa viitataan mahdollisesti viitattuun rakenteeseen.
+
Taulukon arvot menetetään, jos <syntaxhighlight lang="pascal" inline>dynamicArrayVariable</syntaxhighlight>:n viitemäärä menee nollaan. Muita tyyppejä varten ei kuitenkaan ole vastaavaa mekanismia, esimerkiksi <syntaxhighlight lang="pascal" inline>nil</syntaxhighlight> määrittäminen luokan tai osoittimen muuttujaan ei vapauta (eli de-allokoi) muistia, jossa viitataan mahdollisesti viitattuun rakenteeseen.
  
 
== Käyttö sovelluksissa ==
 
== Käyttö sovelluksissa ==
  
Pascalissa ei yleensä kirjoiteta ilmaisuja, kuten <syntaxhighlight lang="pascal" enclose="none">pointerVariable = nil</syntaxhighlight>, vaan käytetään enemmän selittäviä [[Identifier/fi|tunnisteita]]. [[Function/fi|Funktio]] [[Assigned/fi|<syntaxhighlight lang="pascal" enclose="none">system.assigned</syntaxhighlight>]] korvaa täsmälleen saman lausekkeen, mutta piilottaa sen, että muuttuja on (toteutettu) osoittajana. Joten sen käyttö on valinnainen.
+
Pascalissa ei yleensä kirjoiteta ilmaisuja, kuten <syntaxhighlight lang="pascal" inline>pointerVariable = nil</syntaxhighlight>, vaan käytetään enemmän selittäviä [[Identifier/fi|tunnisteita]]. [[Function/fi|Funktio]] [[Assigned/fi|<syntaxhighlight lang="pascal" inline>system.assigned</syntaxhighlight>]] korvaa täsmälleen saman lausekkeen, mutta piilottaa sen, että muuttuja on (toteutettu) osoittajana. Joten sen käyttö on valinnainen.
  
[[Routine/fi|Rutiini]] [[FreeAndNil/fi|<syntaxhighlight lang="pascal" enclose="none">SysUtils.FreeAndNil</syntaxhighlight>]] kutsuu luokan <syntaxhighlight lang="pascal" enclose="none">free</syntaxhighlight> rutiinia ja määrittelee <syntaxhighlight lang="pascal" enclose="none">nil</syntaxhighlight> kutsussa olevaan osoittimeen (tyypin <syntaxhighlight lang="pascal" enclose="none">class</syntaxhighlight>  muuttuja). Vaikka se on hyvä ajatus, poistaaksesi osoittimet, jotka eivät enää osoita kelvollisia osoittimia, niin tämä voi tehdä virheenkorjauksen vaikeammaksi, koska osoitinta ei ole käytettävissä, osoittaen osoitetta, jossa oli tietty kohde aiemmin.
+
[[Routine/fi|Rutiini]] [[FreeAndNil/fi|<syntaxhighlight lang="pascal" inline>SysUtils.FreeAndNil</syntaxhighlight>]] kutsuu luokan <syntaxhighlight lang="pascal" inline>free</syntaxhighlight> rutiinia ja määrittelee <syntaxhighlight lang="pascal" inline>nil</syntaxhighlight> kutsussa olevaan osoittimeen (tyypin <syntaxhighlight lang="pascal" inline>class</syntaxhighlight>  muuttuja). Vaikka se on hyvä ajatus, poistaaksesi osoittimet, jotka eivät enää osoita kelvollisia osoittimia, niin tämä voi tehdä virheenkorjauksen vaikeammaksi, koska osoitinta ei ole käytettävissä, osoittaen osoitetta, jossa oli tietty kohde aiemmin.
  
 
== Katso myös ==
 
== Katso myös ==
* [[^/fi|<syntaxhighlight lang="pascal" enclose="none">^</syntaxhighlight>]]
+
* [[^/fi|<syntaxhighlight lang="pascal" inline>^</syntaxhighlight>]]
* {{Doc|package=RTL|unit=system|identifier=returnnilifgrowheapfails|text=<syntaxhighlight lang="pascal" enclose="none">system.returnNilIfGrowHeapFails</syntaxhighlight>}}
+
* {{Doc|package=RTL|unit=system|identifier=returnnilifgrowheapfails|text=<syntaxhighlight lang="pascal" inline>system.returnNilIfGrowHeapFails</syntaxhighlight>}}
* <syntaxhighlight lang="pascal" enclose="none">{$objectChecks on}</syntaxhighlight>
+
* <syntaxhighlight lang="pascal" inline>{$objectChecks on}</syntaxhighlight>
 
* [[Nullable types/fi|Tyhjennettävät tyypit (nullable types)]]
 
* [[Nullable types/fi|Tyhjennettävät tyypit (nullable types)]]

Latest revision as of 17:23, 6 August 2022

Deutsch (de) English (en) suomi (fi) français (fr) русский (ru) 中文(中国大陆)‎ (zh_CN)

Varattu sana nil edustaa osoittimen muuttujan erityistä vakio arvoa, joka ei osoita mihinkään erityiseen (muuttujaan). FPC:ssa se toteutetaan osoittimena pointer(0) (numeerinen arvo nolla), mutta ohjelmoijan ei ole tarkoitus käyttää tätä tosiasiaa. Muissa ohjelmointikielissä, esimerkiksi C: ssä, kirjoitetaan null:a. Termejä "nollaosoitin" tai "nil-osoitin" käytetään vaihtelevasti, jopa Pascal-ohjelmoijien keskuudessa.

Sanan nil etymologiota (sanan alkuperän suuntia) on kaksi. Toinen sanoo, että se on lyhennys latinalaiselle sanalle "nihil", joka tarkoittaa "ei mitään". Ja toinen viittaa siihen, että NIL on englanninkielinen lyhenne sanoista “not in list” ("ei luettelossa"). Ja koska saksalainen sana „Null“ tarkoittaa numeroa "nolla" joten sekaannuksen välttämiseksi tai käsitteen ja arvon erottamiseksi niin tätäkään sanaa ei valittu. Tämä ei missään tapauksessa vaikuta ohjelmointiin.

Yhteensopivuus

nil voidaan tietysti liittää osoittimen muuttujaan, mutta myös muihin tyyppeihin, jotka ovat itse asiassa viitteitä, mutta niiden käyttö on helpompaa. Esimerkiksi dynaamiset taulukot tai luokat (Class):

 1program nilDemo(input, output, stderr);
 2var
 3	loc: pointer;
 4	chk: array of boolean;
 5	msg: PChar;
 6	prc: TProcedure;
 7	obj: TObject;
 8begin
 9	// osoitaa "ei minkään"
10	loc := nil;
11	// tyhjentää dynaamisen taulukon
12	chk := nil;
13	// tyhjä merkkijono
14	msg := nil;
15	// aliohjelmamuuttuja ei osoita mihinkään aliohjelmaan
16	prc := nil;
17	// kadottaa viittauksen olioon
18	obj := nil;
19end.

Huomaa, että nil määrittäminen dynaamiselle taulukolle on käytännöllisesti katsoen samanlainen kuin aliohjelma kutsu setLength(dynamicArrayVariable, 0) Taulukon arvot menetetään, jos dynamicArrayVariable:n viitemäärä menee nollaan. Muita tyyppejä varten ei kuitenkaan ole vastaavaa mekanismia, esimerkiksi nil määrittäminen luokan tai osoittimen muuttujaan ei vapauta (eli de-allokoi) muistia, jossa viitataan mahdollisesti viitattuun rakenteeseen.

Käyttö sovelluksissa

Pascalissa ei yleensä kirjoiteta ilmaisuja, kuten pointerVariable = nil, vaan käytetään enemmän selittäviä tunnisteita. Funktio system.assigned korvaa täsmälleen saman lausekkeen, mutta piilottaa sen, että muuttuja on (toteutettu) osoittajana. Joten sen käyttö on valinnainen.

Rutiini SysUtils.FreeAndNil kutsuu luokan free rutiinia ja määrittelee nil kutsussa olevaan osoittimeen (tyypin class muuttuja). Vaikka se on hyvä ajatus, poistaaksesi osoittimet, jotka eivät enää osoita kelvollisia osoittimia, niin tämä voi tehdä virheenkorjauksen vaikeammaksi, koska osoitinta ei ole käytettävissä, osoittaen osoitetta, jossa oli tietty kohde aiemmin.

Katso myös