PlusPedia wird derzeit technisch modernisiert. Aktuell laufen Wartungsarbeiten. Für etwaige Unannehmlichkeiten bitten wir um Entschuldigung; es sind aber alle Artikel zugänglich und Sie können PlusPedia genauso nutzen wie immer.
Neue User bitte dringend diese Hinweise lesen:
Anmeldung - E-Mail-Adresse Neue Benutzer benötigen ab sofort eine gültige Email-Adresse. Wenn keine Email ankommt, meldet Euch bitte unter NewU25@PlusPedia.de.
Hinweis zur Passwortsicherheit:
Bitte nutzen Sie Ihr PlusPedia-Passwort nur bei PlusPedia.
Wenn Sie Ihr PlusPedia-Passwort andernorts nutzen, ändern Sie es bitte DORT bis unsere Modernisierung abgeschlossen ist.
Überall wo es sensibel, sollte man generell immer unterschiedliche Passworte verwenden! Das gilt hier und im gesamten Internet.
Aus Gründen der Sicherheit (PlusPedia hatte bis 24.07.2025 kein SSL | https://)
Bei PlusPedia sind Sie sicher: – Wir verarbeiten keine personenbezogenen Daten, erlauben umfassend anonyme Mitarbeit und erfüllen die Datenschutz-Grundverordnung (DSGVO) vollumfänglich. Es haftet der Vorsitzende des Trägervereins.
PlusPedia blüht wieder auf als freundliches deutsches Lexikon.
Wir haben auf die neue Version 1.43.3 aktualisiert.
Wir haben SSL aktiviert.
Hier geht es zu den aktuellen Aktuelle Ereignissen
Unterprogramm: Unterschied zwischen den Versionen
erg |
Ariane (Diskussion | Beiträge) typo |
||
| Zeile 1: | Zeile 1: | ||
Ein Unterprogramm löst im idealen Fall | Ein '''Unterprogramm''' löst im idealen Fall selbstständig eine Teillösung eines größeren Problems. | ||
== | == Vorzüge von Unterprogrammen == | ||
* | * Eine bessere Strukturierung von Programmen (Richtwert: eine Seite pro Modul) | ||
* Abstraktion (wie etwas zu machen ist ist in diesem Moment nicht wichtig, sondern nur was man als Eingabeparameter hat und was man als Ausgabe erwartet) | * Abstraktion (wie etwas zu machen ist, ist in diesem Moment nicht wichtig, sondern nur was man als Eingabeparameter hat und was man als Ausgabe erwartet) | ||
* Modularisierung | * Modularisierung | ||
* | * Bei mehrfacher Verwendung von Code | ||
** zum Einsparen von (Programm-)Speicherplatz. | ** zum Einsparen von (Programm-)Speicherplatz. | ||
** Code kann damit kompakt gehalten. | ** Code kann damit kompakt gehalten. | ||
** Wiederverwendung | ** Wiederverwendung. | ||
== Umsetzung == | == Umsetzung == | ||
* Eine Folge von Anweisungen wird unter einem Namen zusammengefasst und wird zur Routine, Prozedur, Unterprogramm, Funktionen | * Eine Folge von Anweisungen wird unter einem Namen zusammengefasst und wird zur Routine, Prozedur, Unterprogramm, Funktionen. | ||
* Es können Parameter an diese Routinen übergeben werden | * Es können Parameter an diese Routinen übergeben werden. | ||
* Bei Funktionen wird ein Rückgabewert generiert. | * Bei Funktionen wird ein Rückgabewert generiert. | ||
=== | === Parameterübergabe === | ||
* Argumente einer Funktion nennt man Parameter | * Argumente einer Funktion nennt man Parameter. | ||
* Es gibt formale Parameter - diese werden durch den aktuellen Parameter ersetzt | * Es gibt formale Parameter - diese werden durch den aktuellen Parameter ersetzt. | ||
** X = Sum(3) hier wäre die 3 der aktuelle Parameter; | ** X = Sum(3) hier wäre die 3 der aktuelle Parameter; | ||
*** In der | *** In der unterroute Sum(x) wird dem x die 3 zugeordnet. | ||
*** x ist der formale Parameter. | *** x ist der formale Parameter. | ||
*** Der aktuelle Parameter kann eine Variable sein. | *** Der aktuelle Parameter kann eine Variable sein. | ||
** Die | ** Die Wertrückgabe ist der berechnete Wert. | ||
** Der Compiler stellt beim | ** Der Compiler stellt beim Compilieren (bei der Übersetzung) eine Typverletzung fest | ||
** Interpreter stellen die Verletzung zur Laufzeit fest. | ** Interpreter stellen die Verletzung zur Laufzeit fest. | ||
=== | === Parameterübergabe-Mechanismus === | ||
* Call by Value | * Call by Value | ||
** Bei einer Wertübergabe | ** Bei einer Wertübergabe wird der konkrete Inhalt einer Variable oder eines Literals in den formalen Parameter kopiert. Der Wert kann geändert werden, hat aber keine Auswirkung auf den aktuellen Parameter. | ||
* Call by Reference | * Call by Reference | ||
** Bei einer Referenz wird nicht der Wert selbst übergeben sondern die | ** Bei einer Referenz wird nicht der Wert selbst übergeben sondern die Speicheradresse. Literale und Konstanten können so nicht übergeben werden. Mit diesem Mechanismus können die übergebenen Parameter modifiziert werden. | ||
* (Call by Name) | * (Call by Name) | ||
** Veraltet. | ** Veraltet. | ||
| Zeile 39: | Zeile 39: | ||
Parameter können innerhlab einer Funktion beliebig genannt werden. Die Funktionen sind in einem eigenen Referenzraum. | Parameter können innerhlab einer Funktion beliebig genannt werden. Die Funktionen sind in einem eigenen Referenzraum. | ||
== Unterschied zwischen Funktion und | == Unterschied zwischen Funktion und Prozedur == | ||
* Eine Prozedur führt eine Aktion aus | * Eine Prozedur führt eine Aktion aus | ||
** Hier sind Call-By-Reference-Parameter eventuell sinnvoll um Werte aus der Prozedur nach draußen zu geben. | ** Hier sind Call-By-Reference-Parameter eventuell sinnvoll, um Werte aus der Prozedur nach draußen zu geben. | ||
* Eine Funktion berechnet einen Wert | * Eine Funktion berechnet einen Wert | ||
** Eine Funktion funktionert gut mit Call-By-Value-Parametern. | ** Eine Funktion funktionert gut mit Call-By-Value-Parametern. | ||
| Zeile 48: | Zeile 48: | ||
== Praktische Umsetzung == | == Praktische Umsetzung == | ||
=== In Python === | === In Python === | ||
In Python stehen die Definitionen der Unterroutinen am Anfang (bzw. | In Python stehen die Definitionen der Unterroutinen am Anfang (bzw. vor dem Aufruf) | ||
<code> | <code> | ||
| Zeile 68: | Zeile 68: | ||
==== Return-Anweisung ==== | ==== Return-Anweisung ==== | ||
* Gibt den Wert aus der Funktion zurück. | * Gibt den Wert aus der Funktion zurück. | ||
* Wird kein | * Wird kein Wert angegeben oder wird die Return-Anweisung weggelassen, so wird das Objekt None zurückgegeben. | ||
* Mehrere Anweisungen können mit einem Tupel zurückgegeben werden. | * Mehrere Anweisungen können mit einem Tupel zurückgegeben werden. | ||
==== Namensräume ==== | ==== Namensräume ==== | ||
* In Python hat jedes Unterprogramm seinen eigenen Namensraum ( | * In Python hat jedes Unterprogramm seinen eigenen Namensraum (lokaler Namensraum) | ||
* Der Interpreter schaut erst in den lokalen Namensbereich nach und sucht dann im globalen Namensraum. | * Der Interpreter schaut erst in den lokalen Namensbereich nach und sucht dann im globalen Namensraum. | ||
Version vom 4. November 2011, 13:19 Uhr
Ein Unterprogramm löst im idealen Fall selbstständig eine Teillösung eines größeren Problems.
Vorzüge von Unterprogrammen
- Eine bessere Strukturierung von Programmen (Richtwert: eine Seite pro Modul)
- Abstraktion (wie etwas zu machen ist, ist in diesem Moment nicht wichtig, sondern nur was man als Eingabeparameter hat und was man als Ausgabe erwartet)
- Modularisierung
- Bei mehrfacher Verwendung von Code
- zum Einsparen von (Programm-)Speicherplatz.
- Code kann damit kompakt gehalten.
- Wiederverwendung.
Umsetzung
- Eine Folge von Anweisungen wird unter einem Namen zusammengefasst und wird zur Routine, Prozedur, Unterprogramm, Funktionen.
- Es können Parameter an diese Routinen übergeben werden.
- Bei Funktionen wird ein Rückgabewert generiert.
Parameterübergabe
- Argumente einer Funktion nennt man Parameter.
- Es gibt formale Parameter - diese werden durch den aktuellen Parameter ersetzt.
- X = Sum(3) hier wäre die 3 der aktuelle Parameter;
- In der unterroute Sum(x) wird dem x die 3 zugeordnet.
- x ist der formale Parameter.
- Der aktuelle Parameter kann eine Variable sein.
- Die Wertrückgabe ist der berechnete Wert.
- Der Compiler stellt beim Compilieren (bei der Übersetzung) eine Typverletzung fest
- Interpreter stellen die Verletzung zur Laufzeit fest.
- X = Sum(3) hier wäre die 3 der aktuelle Parameter;
Parameterübergabe-Mechanismus
- Call by Value
- Bei einer Wertübergabe wird der konkrete Inhalt einer Variable oder eines Literals in den formalen Parameter kopiert. Der Wert kann geändert werden, hat aber keine Auswirkung auf den aktuellen Parameter.
- Call by Reference
- Bei einer Referenz wird nicht der Wert selbst übergeben sondern die Speicheradresse. Literale und Konstanten können so nicht übergeben werden. Mit diesem Mechanismus können die übergebenen Parameter modifiziert werden.
- (Call by Name)
- Veraltet.
Parameterbenamung
Parameter können innerhlab einer Funktion beliebig genannt werden. Die Funktionen sind in einem eigenen Referenzraum.
Unterschied zwischen Funktion und Prozedur
- Eine Prozedur führt eine Aktion aus
- Hier sind Call-By-Reference-Parameter eventuell sinnvoll, um Werte aus der Prozedur nach draußen zu geben.
- Eine Funktion berechnet einen Wert
- Eine Funktion funktionert gut mit Call-By-Value-Parametern.
Praktische Umsetzung
In Python
In Python stehen die Definitionen der Unterroutinen am Anfang (bzw. vor dem Aufruf)
def add(iX,iY):
....return iX+iY
#enddef
(Punkte sind Leerzeichen)
add(3,4)
liefert als Ergebnis 7
Default-Paramter
def foo(x, y, z = 42):
Return-Anweisung
- Gibt den Wert aus der Funktion zurück.
- Wird kein Wert angegeben oder wird die Return-Anweisung weggelassen, so wird das Objekt None zurückgegeben.
- Mehrere Anweisungen können mit einem Tupel zurückgegeben werden.
Namensräume
- In Python hat jedes Unterprogramm seinen eigenen Namensraum (lokaler Namensraum)
- Der Interpreter schaut erst in den lokalen Namensbereich nach und sucht dann im globalen Namensraum.
Globale Variablen
a=42
def foo():
....a = 13; #lokal definert
#enddf
foo();
a;
42
a=42
def foo():
....global a;
....a = 13;
#enddf
foo();
a;
13;
Links und Quellen
Siehe auch
Weblinks
Quellen
Literatur
Einzelnachweise
Andere Lexika