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

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
помилка
мНемає опису редагування
Рядок 1:
{{Без джерел|дата=липень 2013}}'''Прозорість посилань''' і '''непрозорість посилань''' — це властивості частин [[Комп'ютерна програма|комп'ютерних програм]]. Кажуть, що [[Вираз (інформатика)|вираз]] прозорий по посиланнях, якщо його можна замінити на його [[Величина (інформатика)|значення]] і це не вплине на поведінку програми (тобто ми отримаємо нову програму, що на ті самі вхідні дані видає ті самі вихідні). Протилежним терміном є непрозорість посилань.
 
В [[математика|математиці]] всі функції прозорі по посиланнях, в програмуванні це не завжди так. Важливість прозорості посилань полягає в тому, що вони дозволяють програмісту та компілятору робити здогади про поведінку програми. Це може допомогти в доведенні правильності, спрощеніспрощенні [[алгоритм]]у, допомагає при зміні коду без отримання нових помилок або [[оптимізація (інформатика)|оптимізації]] коду в сенсі [[мемоізація|мемоізації]], [[усунення загальних підвиразів]] або [[Паралельні обчислення|паралелізації]].
 
Прозорість посилань є одним з принципів [[функційне програмування|функційного програмування]]; тільки прозорі по посиланнях функції можуть бути мемоізовані (перетворені в тотожні функції, які використовують кешовані результати). Деякі мови програмування забезпечують засоби для гарантування прозорості посилань. Деякі ж вимагають дотримання прозорості посилань у всіх функціях.
Рядок 30:
Однією з переваг написання коду з прозорими посиланнями є те, що розумному компілятору легше виконувати статичний розбір коду і використовувати кращі оптимізації. Наприклад, у випадку С присутнє погіршення швидкодії через додавання до тіла циклу дорогої, в сенсі виконання, функції, навіть якщо виклик функції можна винести за тіло циклу без зміни результату програми. Програміст змушений робити ручні правки, які можливо позначаться на зручночитності коду. А якщо компілятор в змозі визначити, що виклик функції прозорий по посиланнях, він може здійснити це перетворення автоматично.
 
Основним недоліком мов, що наполягають на прозорості посилань є те, що в них послідовність дій, яка природньоприродно може бути записана як покрокова послідовність в імперативному стилі, набувають незграбного й розлогого вигляду. Такі мови часто містять механізми, що дозволяють виконати такі задачі простіше, зберігши при цьому чистоту функційності мови, наприклад, [[DC-граматика|DC-граматики]] й [[Монади (програмування)|монади]].
 
У випадку прозорості посилань, немає різниці між посиланням на об'єкт і самим об'єктом. Інакше така різниця може бути легко введена й використана.