Nuorodų skaidrumas
Nuorodų skaidrumas yra kompiuterių programų dalių savybė. Programos dalis vadinama "referentiniu skaidrumu", jei ją galima pakeisti verte, kurią ji grąžina, nepakeičiant programos elgsenos. Referentiškai skaidri funkcija turi būti gryna - ji visada turi duoti tą pačią išvestį, jei priima tą pačią įvestį, ir neturi turėti jokių šalutinių poveikių - programos dalių, kurios atlieka kitą veiksmą, išskyrus vertės grąžinimą. Referentinio skaidrumo priešingybė yra referentinis neskaidrumas.
Matematikoje visos funkcijos yra referentiškai skaidrios, nes matematinė funkcija gali tik priimti reikšmes ir išmesti reikšmę. Programavime tai ne visada tiesa - funkcija taip pat gali sužinoti, kokia dabar metų diena, arba išspausdinti pranešimą į ekraną. Dėl šio skirtumo kai kurie žmonės programavime naudoja kitus funkcijų pavadinimus, pavyzdžiui, procedūros.
Nuorodų skaidrumas leidžia programuotojams ir kompiliatoriams apie kodą galvoti kaip apie perrašymo sistemą - kažką, kas paima išraišką ir pakeičia ją kažkuo kitu. Tai gali padėti atlikti keletą užduočių, pvz:
- Įrodymas, kad programa ar kodas yra teisingi - kad jie daro būtent tai, ką turi daryti, nesvarbu, kas nutiktų.
- Algoritmo supaprastinimas.
- Lengviau keisti kodą, bet kartu būti tikriems, kad jis veikia taip, kaip turi veikti.
- Užtikrinti, kad kodas veiktų greičiau arba naudotų mažiau atminties.
Pastarąją užduotį galima atlikti keliais būdais - žinomiausi yra memoizavimas (atsakymų išsaugojimas po pirmojo karto), bendrų neišraiškų šalinimas (nustatymas, ar verta sujungti dvi tokias pačias kodo dalis), tingus vertinimas (atsakymo neradimas tol, kol kodo tikrai nereikia) ir lygiagretinimas (darbas su keliais uždaviniais vienu metu).
Klausimai ir atsakymai
Klausimas: Kas yra referencinis skaidrumas?
A: Nuorodomasis skaidrumas - tai kompiuterių programų dalių savybė, kai programos dalį galima pakeisti jos grąžinama verte, nekeičiant programos elgsenos.
K: Kas yra referentinio skaidrumo priešingybė?
A: Referentinio skaidrumo priešingybė yra referentinis neskaidrumas.
K: Ar visos matematikos funkcijos yra referentiškai skaidrios?
Atsakymas: Taip, visos matematikos funkcijos yra referentiškai skaidrios, nes matematinė funkcija gali tik priimti reikšmes ir išmesti reikšmę.
K: Kaip referencinis skaidrumas padeda programuotojams ir kompiliatoriams?
A. Referencinis skaidrumas leidžia programuotojams ir kompiliatoriams mąstyti apie kodą kaip apie perrašymo sistemą - kažką, kas priima išraišką ir pakeičia ją kažkuo kitu. Tai padeda spręsti tokias užduotis, kaip programos ar kodo teisingumo įrodymas, algoritmo supaprastinimas, lengvesnis kodo keitimas, kai vis dar esame tikri, kad jis daro tai, ką turi daryti, ir greitesnis kodo veikimas ar mažesnės atminties naudojimas.
K: Kokie metodai naudojami siekiant, kad kodas veiktų greičiau arba naudotų mažiau atminties?
A: Kai kurie metodai, naudojami siekiant, kad kodas veiktų greičiau arba naudotų mažiau atminties, yra šie: memoizavimas (atsakymų išsaugojimas po pirmojo karto), bendrų neišraiškų eliminavimas (nustatymas, ar verta sujungti dvi tas pačias kodo dalis), tingus įvertinimas (atsakymo neradimas, kol kodo tikrai nereikia) ir lygiagretinimas (darbas su keliais uždaviniais vienu metu).
Klausimas: Ar programavimo funkcijos skiriasi nuo matematikos funkcijų?
Atsakymas: Taip, programavimo funkcijos skiriasi nuo matematikos funkcijų - Programuojant funkcija taip pat gali sužinoti, kokia dabar metų diena, arba išspausdinti pranešimą į ekraną, o matematinių funkcijų atveju tai neįmanoma.