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