Референтна прозрачност
Препращащата прозрачност е характеристика на части от компютърни програми. Една част от програма се нарича "референтно прозрачна", ако може да бъде заменена със стойността, която връща, без да се промени поведението на програмата. Една референциално прозрачна функция трябва да бъде чиста - тя трябва винаги да дава един и същ изход, ако приема един и същ вход, и не трябва да има никакви странични ефекти - части от програмата, които извършват действие, различно от връщането на стойност. Обратното на референтната прозрачност е референтната непрозрачност.
В математиката всички функции са референциално прозрачни, тъй като математическата функция може само да приема стойности и да изхвърля стойност. В програмирането това невинаги е вярно - функцията може също така да открие кой ден от годината е или да отпечата съобщение на екрана. Поради тази разлика някои хора използват други имена за функциите в програмирането, като например процедури.
Препращащата прозрачност позволява на програмистите и компилаторите да мислят за кода като за система за пренаписване - нещо, което взема даден израз и го заменя с нещо друго. Това може да помогне при няколко задачи, като например:
- Доказване, че програмата или кодът са правилни - че правят точно това, което се очаква от тях, независимо от всичко.
- Опростяване на алгоритъма.
- Така е по-лесно да променяте кода, като същевременно сте сигурни, че той изпълнява предназначението си.
- Осигуряване на по-бърза работа на кода или начин, по който се използва по-малко памет.
Съществуват няколко начина за изпълнение на последната задача - най-известните са мемоаризация (запазване на отговорите след първия път), елиминиране на общи подизрази (установяване дали си струва да се комбинират две части от кода, които са еднакви), мързеливо оценяване (не намиране на отговора, докато кодът наистина не се нуждае от него) и паралелизация (работа по няколко проблема едновременно).
Въпроси и отговори
В: Какво представлява референтната прозрачност?
О: Референтната прозрачност е характеристика на части от компютърни програми, при която част от програмата може да бъде заменена със стойността, която тя връща, без да се променя поведението на програмата.
В: Какво е противоположното на референтната прозрачност?
О: Обратното на референтната прозрачност е референтната непрозрачност.
В: Всички функции в математиката ли са референтно прозрачни?
О: Да, всички функции в математиката са референтно прозрачни, защото математическата функция може само да приема стойности и да изхвърля стойност.
В: С какво референтната прозрачност помага на програмистите и компилаторите?
О: Референциалната прозрачност позволява на програмистите и компилаторите да мислят за кода като за система за пренаписване - нещо, което взема даден израз и го заменя с нещо друго. Това помага при задачи като доказване на правилността на програмата или кода, опростяване на алгоритъма, улесняване на промяната на кода, като все още сме сигурни, че той прави това, което се очаква, и ускоряване на работата на кода или използване на по-малко памет.
Въпрос: Кои са някои техники, използвани за ускоряване на работата на кода или за използване на по-малко памет?
О: Някои техники, използвани за ускоряване на работата на кода или за използване на по-малко памет, включват мемоаризация (запазване на отговорите след първия път), елиминиране на общи подизрази (установяване дали си струва да се комбинират две еднакви части на кода), лениво оценяване (не намиране на отговора, докато кодът наистина не се нуждае от него) и паралелизация (работа по няколко проблема едновременно).
Въпрос: Има ли някаква разлика между функциите в програмирането в сравнение с тези в математиката?
О:Да, има разлика между функциите в програмирането в сравнение с тези в математиката -В програмирането една функция може също така да открие кой ден от годината е или да отпечата съобщение на екрана, докато това не е възможно при математическите функции.