Niezawodne programowanie
Nieczyste funkcje
22/06/13 15:06
Jeszcze w standardzie języka Ada z roku 2005 nie były dopuszczalne funkcje z efektami ubocznymi spowodowanymi parametrami w trybie out lub in out.
Standard z roku 2012 dopuszcza korzystanie z takich funkcji.
Oto specyfikacja przykładu funkcji z parametrem w trybie out:

oraz jej implementacja:

Parametr y służy do odbierania wyliczonej wartości pierwiastka kwadratowego ale tylko wtedy gdy funkcja zwróciła wartość True.
Dopuszczenie wszystkich trybów dla parametrów funkcji wynika z tego, że w praktyce i tak definiowano w języku Ada funkcje z efektami ubocznymi. Przy czym uciekano się do różnych sztuczek. Nie można jednak zapominać, że korzystanie z funkcji posiadających efekty uboczne jest często nieprzewidywalne np. ze względu na nieokreśloną kolejność wyliczania podwyrażenie.
Dla przykładu, jeśli funkcje f(x) i g(x) zmieniają w różny sposób swoje jedyne parametry o trybie in out, to wartość wyrażenia f(x) + g(x) jest nie do przewidzenia.
Mimo tego, że dopuszczono wszystkie tryby dla parametrów funkcji, to w definicjach operatorów nadal dopuszczalny jest tylko tryb in.
Udostępnione pliki:
Standard z roku 2012 dopuszcza korzystanie z takich funkcji.
Oto specyfikacja przykładu funkcji z parametrem w trybie out:

oraz jej implementacja:

Parametr y służy do odbierania wyliczonej wartości pierwiastka kwadratowego ale tylko wtedy gdy funkcja zwróciła wartość True.
Dopuszczenie wszystkich trybów dla parametrów funkcji wynika z tego, że w praktyce i tak definiowano w języku Ada funkcje z efektami ubocznymi. Przy czym uciekano się do różnych sztuczek. Nie można jednak zapominać, że korzystanie z funkcji posiadających efekty uboczne jest często nieprzewidywalne np. ze względu na nieokreśloną kolejność wyliczania podwyrażenie.
Dla przykładu, jeśli funkcje f(x) i g(x) zmieniają w różny sposób swoje jedyne parametry o trybie in out, to wartość wyrażenia f(x) + g(x) jest nie do przewidzenia.
Mimo tego, że dopuszczono wszystkie tryby dla parametrów funkcji, to w definicjach operatorów nadal dopuszczalny jest tylko tryb in.
Udostępnione pliki:
- nieczyste.gpr
- main.adb
- nieczyste.ads
- nieczyste.adb
- nieczyste.zip archiwum zawierające powyższe pliki