Atsauces pārredzamība
Atsauces caurspīdīgums ir datoru programmu daļu iezīme. Programmas daļu sauc par "atsauces caurspīdīgu", ja to var aizstāt ar vērtību, ko tā atdod, nemainot programmas uzvedību. Atsauces caurspīdīgai funkcijai jābūt tīrai - tai vienmēr jādod tāds pats izvads, ja tā saņem tādu pašu ievadi, un tai nedrīkst būt blakusparādību - programmas daļu, kas veic citas darbības, nevis atdod atpakaļ vērtību. Atsauces caurspīdīgumam pretēja funkcija ir atsauces necaurspīdīgums.
Matemātikā visas funkcijas ir referenciāli caurspīdīgas, jo matemātiskā funkcija var tikai uzņemt vērtības un izspiest vērtību. Programmēšanā tas ne vienmēr ir taisnība - funkcija var arī noskaidrot, kura ir gada diena, vai izdrukāt uz ekrāna ziņojumu. Šīs atšķirības dēļ daži programmēšanā izmanto citus funkciju nosaukumus, piemēram, procedūras.
Atsauces caurskatāmība ļauj programmētājiem un kompilatoriem domāt par kodu kā par pārrakstīšanas sistēmu - kaut ko, kas ņem izteiksmi un aizstāj to ar kaut ko citu. Tas var palīdzēt veikt vairākus uzdevumus, piemēram:
- Pierādīt, ka programma vai kods ir pareizs - ka tas dara tieši to, kas tam paredzēts, neatkarīgi no apstākļiem.
- Algoritma vienkāršošana.
- Tā ir vieglāk mainīt kodu, vienlaikus saglabājot pārliecību, ka tas darbojas tā, kā paredzēts.
- Ātrāka koda palaišana vai tāda koda palaišana, kas izmanto mazāk atmiņas.
Pastāv vairāki veidi, kā veikt pēdējo uzdevumu - pazīstamākie no tiem ir memoizācija (atbilžu saglabāšana pēc pirmās reizes), kopīgu apakšizteicienu izslēgšana (noskaidro, vai ir vērts apvienot divas tādas pašas koda daļas), slinka izvērtēšana (atbildes neatrod, kamēr kodam tā patiešām nav vajadzīga) un paralēlizācija (darbs ar vairākām problēmām vienlaicīgi).
Jautājumi un atbildes
J: Kas ir atsauces caurspīdīgums?
A: Atsauces caurredzamība ir datorprogrammu daļu iezīme, kad programmas daļu var aizstāt ar vērtību, ko tā atdod, nemainot programmas uzvedību.
J: Kas ir pretējs atsauces caurredzamībai?
A: Atsauces caurspīdīgumam pretējs ir atsauces necaurspīdīgums.
Vai visas matemātikas funkcijas ir referenciāli caurspīdīgas?
A: Jā, visas matemātikas funkcijas ir referenciāli caurspīdīgas, jo matemātiskā funkcija var tikai uzņemt vērtību un izspiest vērtību.
J: Kā referenciālā caurredzamība palīdz programmētājiem un kompilatoriem?
A: Atsauces caurskatāmība ļauj programmētājiem un kompilatoriem domāt par kodu kā par pārrakstīšanas sistēmu - kaut ko, kas paņem izteiksmi un aizstāj to ar kaut ko citu. Tas palīdz veikt tādus uzdevumus kā programmas vai koda pareizības pierādīšana, algoritma vienkāršošana, vieglāka koda maiņa, vienlaikus saglabājot pārliecību, ka tas dara to, kas tam paredzēts, kā arī ātrāka koda izpilde vai mazāka atmiņas izmantošana.
Kādi ir daži paņēmieni, ko izmanto, lai padarītu kodu ātrāku vai izmantotu mazāk atmiņas?
A: Daži paņēmieni, ko izmanto, lai padarītu kodu ātrāku vai izmantotu mazāk atmiņas, ir memoizācija (atbilžu saglabāšana pēc pirmās reizes), kopīgu apakšizteicienu izslēgšana (noskaidro, vai ir vērts apvienot divas tādas pašas koda daļas), slinka izvērtēšana (atbildes neatrod, kamēr kodam tā patiešām nav vajadzīga) un paralēlizācija (darbs ar vairākām problēmām vienlaicīgi).
Jautājums: Vai programmēšanas funkcijas atšķiras no matemātikas funkcijām?
A:Jā, ir atšķirība starp funkcijām programmēšanā salīdzinājumā ar matemātikas funkcijām - programmēšanā funkcija var arī noskaidrot, kura ir gada diena, vai izdrukāt uz ekrāna ziņojumu, bet matemātiskajās funkcijās tas nav iespējams.