Fachkonzept - Funktion
Funktion als Verarbeitungseinheit
Eine Funktion ist eine Verarbeitungseinheit, die übergebene Daten verarbeitet und den berechneten Funktionswert als Ergebnis zurückgibt.
Als Beispiel betrachten wir die Funktion verschluesselterText
aus dem letzten Abschnitt.
Diese Funktion verarbeitet eine übergebene Zeichenkette (die nur aus Großbuchstaben besteht) und
eine übergebene Verschiebezahl (als Schlüssel)
und gibt die zugehörige, nach dem Verschiebeverfahren verschlüsselte Zeichenkette als Ergebnis zurück.
Wir verdeutlichen eine solche Verarbeitungseinheit mit einem Black-Box-Diagramm:
Funktionsdefinition
Eine Funktion muss vorab definiert werden, bevor sie benutzt werden kann. Hierzu muss man eine Funktionsdefinition als Programmeinheit entwickeln.
Im Fall der Funktion verschluesselterText
könnte die Funktionsdefinition in Python
wie folgt aussehen:
def verschluesselterText(klartext, schluessel): geheimtext = '' for zeichen in klartext: zahl = ord(zeichen) neuezahl = zahl + schluessel if neuezahl > ord('Z'): neuezahl = neuezahl - 26 neuesZeichen = chr(neuezahl) geheimtext = geheimtext + neuesZeichen return geheimtext
Die Funktionsdefinition besteht aus zwei Teilen, einem Funktionskopf und einem Funktionskörper.
Der Funktionskopf beginnt mit def
. Es folgt der Funktionsname und - in Klammern - die
Auflistung der sogenannten Parameter (s.u.). Den Abschluss bildet der Doppelpunkt.
Der Funktionsrumpf ist eine Folge von Anweisungen zur Berechnung des Funktionsergebnisses.
Diese Anweisungen müssen - wie in Python üblich - eingerückt werden. Mit einer return
-Anweisung
(das ist meist die letzte Anweisung) wird der zurückgelieferte Funktionswert festgelegt.
Funktionsaufruf
Bei einem Funktionsaufruf wird die Verarbeitungseinheit aktiviert, so dass sie für die übergebenen Daten eine Rückgabe erzeugt.
>>> verschluesselterText('HALLO', 4) 'LEPPS'
Parameter
Parameter sind Variablen, mit deren Hilfe die zur Verarbeitung übergebenen Daten bei einer Funktion verwaltet werden.
Bei einem Funktionsaufruf müssen die Parameter mit konkreten zu verarbeitenden Daten versehen werden.
>>> verschluesselterText('HALLO', 3) 'KDOOR' >>> aktuellerText = 'WIE' >>> aktuellerSchluessel = 5 >>> verschluesselterText(aktuellerText, aktuellerSchluessel) 'BNJ' >>> schluesselCaesar = 3 >>> verschluesselterText(bereinigterText('Alles Käse!'), schluesselCaesar) 'DOOHVNDHVH'
Die zu verarbeitenden Daten können direkt durch konkrete Datenobjekte festgelegt werden
(wie im Beispiel verschluesselterText('HALLO', 3)
).
Die zu veraberbeitenden Daten können aber auch indirekt mit Hilfe von Termen beschrieben werden
(wie im Beispiel verschluesselterText(aktuellerText, aktuellerSchluessel)
oder im Beispiel
verschluesselterText(bereinigterText('Alles Käse!'), schluesselCaesar)
).
Beachte, dass zu verarbeitende Datenobjekte auch von Variablen verwaltet werden können, die genauso benannt sind wie die Parameter, die in der Funktionsdefinition eingeführt sind (vgl. den folgenden Python-Dialog). Im Abschnitt Lokale und globale Variablen" gehen wir nochmal auf diese Situation ein.
>>> klartext = 'GEHTS' >>> schluessel = 3 >>> verschluesselterText(klartext, schluessel) 'JHKWV'
Strukturierung des Quelltextes mit Funktionen
Programme werden zur Steuerung von Computern entwickelt. Einem Computer ist es egal, wie lang und unübersichtlich ein Programm ist. Der Computer muss ja nur die Anweisungen des Programms Schritt für Schritt abarbeiten.
Programme werden (in der Regel) von Menschen entwickelt. Wenn Programme zu unübersichtlich werden, dann können sich leicht Fehler einschleichen. Je unübersichtlicher ein Programm ist, desto schwieriger gestaltet sich die Fehlersuche. Ein zentrales Ziel bei der Programmentwicklung ist es daher, den Quelltext möglichst strukturiert zu gestalten.
Funktionen sind ein Mittel zur Strukturierung von Programmen. Mit Funktionen kann man Verarbeitungseinheiten bilden und diese als Unterprogramme in einem größeren Programm verwenden. Das gesamte Programm wird so klarer gegliedert.
Vermeidung von Codeduplizierung mit Funktionen
Wenn ein Programmteil - bis auf geringfügige Abweichungen - mehrfach in einem Programm vorkommt, spricht man von Codeduplizierung.
Codeduplizierung versucht man in der Regel zu vermeiden. Zum einen werden Programme hierdurch in der Regel kürzer. Zum anderen erspart man sich Arbeit, wenn der Programmteil noch einmal überarbeitet wird. Man muss dann nur eine einzige Verarbeitungseinheit bearbeiten anstatt mehrere.
Funktionen helfen bei der Vermeidung von Codeduplizierung. Eine Verarbeitungseinheit, die in ähnlicher Form mehrfach in einem Programm vorkommt, lässt sich mit einer Funktion als eigenständiges Unterprogramm konzipieren.