Pure Functions, auch reine Funktionen genannt, sind ein Grundkonzept der funktionalen Programmierung. Sie haben zwei Hauptmerkmale:
Ein einfaches Beispiel in Python könnte eine Funktion zur Addition zweier Zahlen sein:
def add(x, y): return x + y
Pure Functions bieten mehrere Vorteile:
Pure Functions sind in vielen Programmierparadigmen nützlich, nicht nur in der funktionalen Programmierung. Sie können zur Verbesserung der Codequalität in jedem Kontext beitragen.
Unpure Functions, im Gegensatz zu pure functions, können Seiteneffekte haben oder von externen Zuständen abhängig sein. Sie können somit unerwartete Ergebnisse liefern, was sie schwerer zu verstehen und zu warten macht.
Betrachten Sie das folgende Beispiel mit einer Variablen:
total = 0 def add_to_total(x): global total total += x if __name__ == '__main__': add_to_total(3) print(total) #3
Diese Funktion verändert den globalen Zustand (die Variable total
) und ist somit eine unpure function. Das global
-Schlüsselwort signalisiert dem Entwickler und dem Python-Interpreter, dass die Funktion eine globale Variable ändert. Dies macht es einfacher, “unpure” Funktionen zu erkennen und fördert die Verwendung von “pure” Funktionen, indem es die Aufmerksamkeit auf die Änderung des globalen Zustands lenkt.
In diesem Beispiel haben wir eine Liste namens my_list
, die außerhalb der Funktion modify_list
definiert ist. Die Funktion modify_list
ändert diese Liste.
# Definieren einer externen Liste my_list = [1, 2, 3] def modify_list(): """ Modify the external_list by appending a value to it. """ return my_list.append(4) if __name__ == '__main__': print('Vor der Änderung:', my_list) # Output: Vor der Änderung: [1, 2, 3] modify_list() print('Nach der Änderung:', my_list) # Output: Nach der Änderung: [1, 2, 3, 4]
Wie Sie sehen können, ändert die Funktion modify_list
den Zustand der my_list
. Daher ist modify_list
eine unpure Funktion. In diesem Fall wird das global
-Schlüsselwort nicht benötigt, da Listen in Python “mutable” (veränderbar) sind. Das heißt, sie können innerhalb einer Funktion verändert werden, ohne dass das global
-Schlüsselwort benötigt wird. Das kann zu einer weniger klaren Code-Struktur führen, da es schwieriger ist, solche Änderungen auf den ersten Blick zu erkennen.
Fazit
Pure Functions sind ein mächtiges Konzept, das nicht nur die Qualität des Codes verbessert, sondern auch zur Entwicklung von effizienteren, wartbareren und sichereren Programmen beiträgt. Die Unterscheidung zwischen pure und unpure functions hilft, die Prinzipien der funktionalen Programmierung besser zu verstehen und in der Praxis umzusetzen.