Referentsiaalne läbipaistvus

Viidete läbipaistvus on arvutiprogrammide osade omadus. Programmi osa nimetatakse "referentsiaalselt läbipaistvaks", kui seda saab asendada selle väärtusega, mille see annab tagasi, ilma et programmi käitumine muutuks. Referentsiaalselt läbipaistev funktsioon peab olema puhas - ta peab alati andma sama väljundit, kui ta võtab sama sisendi, ja tal ei tohi olla mingeid kõrvalmõjusid - programmi osad, mis sooritavad muud tegevust kui väärtuse tagastamine. Referentsiaalse läbipaistvuse vastand on referentsiaalne läbipaistmatus.

Matemaatikas on kõik funktsioonid referentsiaalselt läbipaistvad, sest matemaatiline funktsioon saab ainult väärtusi sisse võtta ja väärtuse välja sülitada. Programmeerimises ei ole see alati nii - funktsioon võib ka teada saada, mis päev aastas praegu on, või printida ekraanile teate. Selle erinevuse tõttu kasutavad mõned inimesed programmeerimises funktsioonide jaoks teisi nimetusi, näiteks protseduurid.

Referentsiaalne läbipaistvus võimaldab programmeerijatel ja kompilaatoritel mõelda koodist kui ümberkirjutussüsteemist - millestki, mis võtab väljendi ja asendab selle millegi muuga. See võib aidata mitmete ülesannete puhul, näiteks:

  • Tõendada, et programm või kood on korrektne - et see teeb täpselt seda, mida ta peaks tegema, ükskõik, mis ka ei juhtuks.
  • Algoritmi lihtsamaks muutmine.
  • See lihtsustab koodi muutmist, olles samal ajal kindel, et see teeb seda, mida ta peaks tegema.
  • Koodi kiiremaks muutmine või nii, et see kasutaks vähem mälu.

Viimase ülesande täitmiseks on mitmeid viise - kõige tuntumad on memoization (vastuste salvestamine pärast esimest korda), common subexpression elimination (välja arvutada, kas tasub ühendada kaks sama koodi osa) , lazy evaluation (ei leia vastust enne, kui kood seda tõesti vajab) ja parallelization (töötamine mitme probleemiga korraga).

Küsimused ja vastused

K: Mis on referentsiaalne läbipaistvus?


V: Referentsiaalne läbipaistvus on arvutiprogrammide osade omadus, mille puhul saab programmi osa asendada selle väärtusega, mille see annab tagasi, ilma et programmi käitumine muutuks.

K: Mis on referentsiaalse läbipaistvuse vastand?


V: Referentsiaalse läbipaistvuse vastand on referentsiaalne läbipaistmatus.

K: Kas kõik funktsioonid matemaatikas on referentsiaalselt läbipaistvad?


V: Jah, kõik funktsioonid matemaatikas on referentsiaalselt läbipaistvad, sest matemaatiline funktsioon saab ainult väärtusi sisse võtta ja väärtuse välja sülitada.

K: Kuidas aitab referentsiaalne läbipaistvus programmeerijaid ja kompilaatoreid?


V: Referentsiaalne läbipaistvus võimaldab programmeerijatel ja kompilaatoritel mõelda koodist kui ümberkirjutussüsteemist - millestki, mis võtab väljendi ja asendab selle millegi muuga. See aitab näiteks tõestada, et programm või kood on korrektne, muuta algoritm lihtsamaks, muuta koodi lihtsamini muudetavaks, olles samal ajal kindel, et see teeb seda, mida ta peaks tegema, ning muuta kood kiiremaks või vähem mälu kasutavaks.

Küsimus: Milliseid meetodeid kasutatakse selleks, et muuta kood kiiremaks või kasutada vähem mälu?


V: Mõned tehnikad, mida kasutatakse koodi kiiremaks muutmiseks või vähem mälu kasutamiseks, on memoization (vastuste salvestamine pärast esimest korda), common subexpression elimination (välja selgitatakse, kas tasub ühendada kaks sama koodiosa) , lazy evaluation (vastuse leidmine alles siis, kui kood seda tõesti vajab) ja parallelization (mitme probleemiga samaaegselt töötamine).

Küsimus: Kas programmeerimises on mingi erinevus funktsioonide ja matemaatikas kasutatavate funktsioonide vahel?


V: Jah, programmeerimise funktsioonide vahel on erinevus võrreldes matemaatikas kasutatavatega - programmeerimises võib funktsioon ka välja selgitada, milline aasta päev on või printida ekraanile teate, samas kui matemaatiliste funktsioonide puhul ei ole see võimalik.

AlegsaOnline.com - 2020 / 2023 - License CC3