Niezawodne programowanie

Nieczyste funkcje

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:

Zrzut ekranu 2013-06-22 o 15.55.56

oraz jej implementacja:

Zrzut ekranu 2013-06-22 o 15.57.10

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: