Vakuutus (tietokoneohjelmointi) - Declaration (computer programming)

Vuonna ohjelmointi , eli vakuutus on kieli konstruktio , joka määrittää ominaisuuksia sellaisen tunnisteen : julistettuaan mitä sana (tunnus) "tarkoittaa". Ilmoituksia käytetään yleisimmin funktioihin , muuttujiin , vakioihin ja luokkiin , mutta niitä voidaan käyttää myös muille entiteeteille, kuten luetteloille ja tyyppimäärityksille. Nimet (itse tunniste) ja kokonaisuuden (funktio, muuttuja jne.) Lisäksi ilmoitukset määrittelevät tyypillisesti tietotyypin (muuttujille ja vakioille) tai tyypin allekirjoituksen (toiminnoille); tyypit voivat myös sisältää mittoja, kuten matriiseille. Ilmoitusta käytetään ilmoittamaan yksikön olemassaolosta kääntäjälle ; tämä on tärkeää niillä voimakkaasti kirjoitetuilla kielillä, jotka edellyttävät funktioiden, muuttujien ja vakioiden ja niiden tyyppien määrittämistä ilmoituksella ennen käyttöä, ja niitä käytetään eteenpäin-ilmoituksessa . Termiä "ilmoitus" verrataan usein termiin "määritelmä", mutta merkitys ja käyttö vaihtelevat huomattavasti eri kielillä; Katso alempaa.

Julistukset ovat erityisen näkyviä kielillä ALGOL- perinteessä, mukaan lukien BCPL- perhe, näkyvästi C ja C ++ , sekä Pascal . Java käyttää termiä "ilmoitus", vaikka Java ei vaadi erillisiä ilmoituksia ja määritelmiä.

Julistus vs. määritelmä

Yksi perusdichotomia on, sisältääkö julistus määritelmän vai ei: esimerkiksi määritetäänkö vakion vai muuttujan ilmoituksessa vakion arvo (vastaavasti muuttujan alkuarvo ) vai vain sen tyyppi; ja vastaavasti, määritetäänkö funktion ilmoituksessa funktion runko ( toteutus ) vai vain sen tyypin allekirjoitus. Kaikki kielet eivät tee tätä eroa: monilla kielillä ilmoitukset sisältävät aina määritelmän, ja niihin voidaan viitata joko "ilmoituksina" tai "määritelminä" kielestä riippuen. Nämä käsitteet erotetaan kuitenkin kielillä, jotka vaativat ilmoituksen ennen käyttöä (joille käytetään eteenpäin tehtäviä ilmoituksia), ja kielillä, joissa käyttöliittymä ja toteutus on erotettu: käyttöliittymä sisältää ilmoituksia, toteutus sisältää määritelmiä.

Epävirallisessa käytössä "ilmoitus" viittaa vain puhtaaseen ilmoitukseen (vain tyypit, ei arvoa tai runkoa), kun taas "määritelmä" viittaa ilmoitukseen, joka sisältää arvon tai rungon. Muodollisessa käytössä (kielimäärityksissä) "ilmoitus" sisältää kuitenkin molemmat aistit, erottamalla ne kielittäin tarkemmin: C: ssä ja C ++: ssa funktion ilmoitusta, joka ei sisällä runkoa, kutsutaan funktion prototyypiksi , kun taas funktion, joka sisältää rungon, julistamista kutsutaan "funktion määrittelyksi". Java-julistuksia esiintyy kahdessa muodossa. Julkisia menetelmiä varten ne voidaan esittää käyttöliittymissä metodin allekirjoituksina, jotka koostuvat menetelmien nimistä, syöttötyypeistä ja ulostulotyypeistä. Samanlaista merkintää voidaan käyttää abstraktien menetelmien määrittelyssä , jotka eivät sisällä määritelmää. Ympäröivä luokka voidaan instantioida, vaan uusi johdettu luokka, joka tarjoaa määritelmä menetelmän, olisi luotava luomiseksi esimerkiksi luokan. Aloittaen Java 8 , lambda ilmaus sisällytettiin kielellä, jota voidaan pitää funktiona julistuksen.

Julistukset ja määritelmät

Ohjelmointikielien C-perheessä ilmoitukset kerätään usein otsikkotiedostoihin , jotka sisältyvät muihin lähdetiedostoihin, jotka viittaavat näihin ilmoituksiin ja käyttävät niitä, mutta joilla ei ole pääsyä määritelmään. Ylätunnistetiedoston tiedot tarjoavat rajapinnan ilmoitusta käyttävän koodin ja sitä määrittävän koodin välillä, mikä piilotettu tieto . Ilmoitusta käytetään usein eri lähdetiedostoissa tai kirjastossa määriteltyjen toimintojen tai muuttujien käyttämiseen . Määritystyypin ja ilmoitustyypin välinen ristiriita aiheuttaa kääntäjävirheen.

Muuttujille määritelmät määrittävät arvot muistialueelle, joka oli varattu ilmoitusvaiheessa. Funktioita varten määritelmät toimittavat funktion rungon. Vaikka muuttuja tai funktio voidaan ilmoittaa monta kertaa, se määritellään tyypillisesti kerran ( C ++ : ssa tämä tunnetaan nimellä One Definition Rule tai ODR).

Dynaamiset kielet, kuten JavaScript tai Python, sallivat toimintojen uudelleenmäärittelyn, toisin sanoen uudelleen sidonnan ; funktio on muuttuja, aivan kuten mikä tahansa muu, jolla on nimi ja arvo (määritelmä).

Tässä on joitain esimerkkejä ilmoituksista, jotka eivät ole määritelmiä, C: ssä:

extern char example1;
extern int example2;
void example3(void);

Tässä on joitain esimerkkejä määritelmistä, jälleen C: ssä:

char example1; /* Outside of a function definition it will be initialized to zero.  */
int example2 = 5;
void example3(void) { /* definition between braces */ }

Määrittelemättömät muuttujat

Joillakin ohjelmointikielillä implisiittinen ilmoitus annetaan ensimmäisen kerran, kun tällainen muuttuja havaitaan kääntämisajankohtana . Muilla kielillä tällaista käyttöä pidetään virheenä, mikä voi johtaa diagnostiikkaviestiin. Jotkut kielet ovat aloittaneet implisiittisen ilmoituskäyttäytymisen, mutta kypsyessään ne antoivat mahdollisuuden poistaa se käytöstä (esim. Perlin " use strict " tai " Visual Basicen " " Option Explicit ").

Katso myös

Huomautuksia

Viitteet

Ulkoiset linkit