Прозорість посилань (інформатика): відмінності між версіями

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
доповнення перекладом з en:Referential transparency
Немає опису редагування
Рядок 1:
'''Прозорість посилань''' і '''непрозорість посилань'''&nbsp;— це властивості частин [[Комп'ютерна програма|комп'ютерних програм]]. [[Вираз (інформатика)|Вираз]] називають прозорим за посиланнями, якщо його можна [[Рерайтинг (математика)|замінити]] на його [[Величина (інформатика)|значення]] і це не вплине на поведінку програми<ref>{{cite book|title=Concepts in Programming Languages|author=John C. Mitchell|year=2002|publisher=Cambridge University Press|page=[https://books.google.gr/books?id=7Uh8XGfJbEIC&pg=PA78&dq=referential+transparency&hl=en&sa=X&redir_esc=y#v=onepage&q=referential%20transparency&f=false 78]}}</ref>. Для цього потрібно аби вираз був {{iw|чиста функція|чистим|en|pure function}} - його значення повинно бути однаковим для однакових аргументів і обчислення не повинно створювати [[Побічний ефект (програмування)|побічних ефектів]]. Вираз який не є прозорим за посиланнями називають непрозорим за посиланнями.
 
В [[математика|математиці]] всі функції прозорі за посиланнями, за визначенням [[функція (математика)|математичної функції]]. Проте, в програмуванні це не завжди так, і часто для уникнення плутанити використовуються терміни [[Підпрограма|процедура]] та [[Метод (програмування)|метод]]. Ключовою характеристикою [[Функційне програмування|функційного програмування]] є те, що воно дозволяє лише прозорі за посиланням функції.
В [[математика|математиці]] всі функції прозорі за посиланнями, в програмуванні це не завжди так. Важливість прозорості посилань полягає в тому, що вони дозволяють програмісту та компілятору робити здогади про поведінку програми. Це може допомогти в доведенні правильності, спрощенні [[алгоритм]]у, допомагає при зміні коду без отримання нових помилок або [[оптимізація (інформатика)|оптимізації]] коду в сенсі [[мемоізація|мемоізації]], [[усунення спільних підвиразів]] або [[Паралельні обчислення|паралелізації]].
 
В [[математика|математиці]] всі функції прозорі за посиланнями, в програмуванні це не завжди так. Важливість прозорості посилань полягає в тому, що вони дозволяють програмісту[[програміст]]у та компілятору[[компілятор]]у робити здогади про поведінку програми. Це може допомогти в доведенні правильності{{iw|коректність (програмування)|коректності||Correctness (computer science)}}, спрощенні [[алгоритм]]у, допомагає при зміні коду без отримання нових помилок або [[оптимізація (інформатика)|оптимізації]] коду вза сенсідопомогою [[мемоізація|мемоізації]], [[усунення спільних підвиразів]], [[ліниві обчислення|лінивого обчислення]] або [[Паралельні обчислення|паралелізації]].
Прозорість посилань є одним з принципів [[функційне програмування|функційного програмування]]. Тільки прозорі за посиланнями функції можуть бути мемоізовані (перетворені в тотожні функції, які використовують [[кеш]]овані результати). Деякі мови програмування{{які}} забезпечують засоби для гарантування прозорості посилань. Деякі ж вимагають дотримання прозорості посилань у всіх функціях.
 
Через те, що прозорість посилань вимагає однакового результату на однаковому вході в будь-який час, прозорий за посиланнями вираз є детермінованим за визначенням.
 
== Приклади й контрприклади ==