Nimiavaruus

Wikipediasta
Siirry navigaatioon Siirry hakuun

Nimiavaruus on tietojenkäsittelytieteessä formaalin kielen symboleja yhteen nippuun sitova määre.

Nimiavaruuksia käytetään tyypillisesti ohjelmointikielissä, tiedostojärjestelmissä ja tietoverkoissa. Ohjelmointikielissä nimiavaruuksia käytetään jäsentämään ohjelmiston sisällä käytettäviä tunnisteita siten, ettei eri konteksteissa käytettyjen nimien välille synny päällekkäisyyksiä. Näin esimerkiksi ohjelman aliohjelmalla ja muuttujalla voi olla sama nimi. Tiedostojärjestelmissä nimiavaruus mahdollistaa nimien asettamisen tiedostoille sekä hakemistoille. Tietoverkoissa eri resursseille voidaan vastaavasti antaa nimet, jolloin kommunikointi laitteiden välillä on mahdollista. Samassa nimiavaruudessa ei voi olla samoja nimiä, vaikka ne tarkoittaisivatkin eri asioita.

Ohjelmointikielissä

[muokkaa | muokkaa wikitekstiä]

Ohjelmointikielissä nimiavaruus osoitetaan nimiavaruuden tunnisteella sekä paikallisella nimellä.

C++-kielessä nimiavaruuksia käytetään osoittamaan yhteenliittyviä kokonaisuuksia (kuten mm. funktiot, luokat, enumeraatiot) ja joissa ei saisi olla törmäyksiä muiden vastaavasti nimettyjen kanssa.[1] Nimiavaruuksien ulkopuolelta viittaamiseen käytetään kaksoispisteitä erottimena tai määrittämällä synonyymi, jolloin nimiavaruutta ei tarvitse toistaa viitatessa siihen.[1] Nimiavaruudet voi määrittää itse ja on mahdollista käyttää sekä sisäkkäisiä nimiavaruuksia että nimiavaruuksien aliasointia.[2][3]

Java käyttää nimiavaruuden osoittamiseen pakettinimiin perustuvaa hierarkiaa pistenotaatiolla: paketti osoittaa yhteenkuuluvien luokkien ryhmää ja määrittää nimiavaruuden johon ne kuuluvat.[4] Luokan on sekä yksinkertainen nimi että täyspitkä nimi (engl. fully qualified name), joka sisältää sen paketin johon se kuuluu.[4] Luokan java.lang.String pakettinimi on java.lang ja yksinkertainen nimi on String.[4]

Kaikki ohjelmointikielet eivät tue nimiavaruuksia. Tällaisia ovat mm. C sekä Objective-C.[5]

  1. a b Stroustrup, Bjarne: The C++ Programming Language, 4th ed. s. 54, 391, 394. Addison-Wesley, 2015. ISBN 0-321-56384-0 (englanniksi)
  2. Nested namespace definition (revision 2) open-std.org. Viitattu 25.2.2020. (englanniksi)
  3. Namespace aliases en.cppreference.com. Viitattu 25.2.2020. (englanniksi)
  4. a b c David Flanagan: 2.11. Packages and the Java Namespace November 1999. O'Reilly. Viitattu 21.4.2016. (englanniksi) 
  5. Michael Dippery: Professional Swift, s. 191. John Wiley & Sons, 2015.