Inom datavetenskap är en oren procedur en funktion eller subrutin som modifierar sin miljö snarare än att returnera ett värde. Detta till skillnad från en ren procedur, som inte modifierar sin miljö och istället returnerar ett värde.
När en procedur ändrar sin miljö kan det göra det svårt att resonera kring programmets beteende. Tänk till exempel på följande Python-funktion:
``` python
def add_to_list(lista, värde):
list.append(värde)
```
Denna funktion lägger till ett värde till en lista. Den returnerar dock inte listan, så det framgår inte vad värdet på listan är efter att funktionen anropats. Detta kan göra det svårt att felsöka program som använder denna funktion.
Tänk däremot på följande rena Python-funktion:
``` python
def add_to_list(lista, värde):
returlista + [värde]
```
Denna funktion returnerar en ny lista som innehåller värdet som lagts till i den ursprungliga listan. Detta gör det tydligt vad värdet på listan är efter att funktionen har anropats, och det gör det lättare att felsöka program som använder denna funktion.
I allmänhet anses det vara god praxis att använda rena procedurer när det är möjligt. Detta kan hjälpa till att göra program lättare att förstå och felsöka.