Na ciência da computação, um procedimento impuro é uma função ou sub-rotina que modifica seu ambiente em vez de retornar um valor. Isto contrasta com um procedimento puro, que não modifica seu ambiente e, em vez disso, retorna um valor.
Quando um procedimento modifica seu ambiente, pode dificultar o raciocínio sobre o comportamento do programa. Por exemplo, considere a seguinte função Python:
```píton
def add_to_list(lista, valor):
lista.append(valor)
```
Esta função adiciona um valor a uma lista. No entanto, ele não retorna a lista, portanto não está claro qual é o valor da lista após a função ser chamada. Isso pode dificultar a depuração de programas que usam essa função.
Em contraste, considere a seguinte função Python pura:
```píton
def add_to_list(lista, valor):
lista de retorno + [valor]
```
Esta função retorna uma nova lista que contém o valor adicionado à lista original. Isso deixa claro qual é o valor da lista depois que a função é chamada e facilita a depuração de programas que usam essa função.
Em geral, é considerada uma boa prática utilizar procedimentos puros sempre que possível. Isso pode ajudar a tornar os programas mais fáceis de entender e depurar.