<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Funktion_%28Programmierung%29</id>
	<title>Funktion (Programmierung) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Funktion_%28Programmierung%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Funktion_(Programmierung)&amp;action=history"/>
	<updated>2026-05-30T12:29:51Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Funktion_(Programmierung)&amp;diff=81398&amp;oldid=prev</id>
		<title>imported&gt;Gerbil am 1. Juli 2025 um 15:17 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Funktion_(Programmierung)&amp;diff=81398&amp;oldid=prev"/>
		<updated>2025-07-01T15:17:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eine &amp;#039;&amp;#039;&amp;#039;Funktion&amp;#039;&amp;#039;&amp;#039; ({{enS|&amp;#039;&amp;#039;function&amp;#039;&amp;#039;}}) ist in der [[Informatik]] und in verschiedenen [[Höhere Programmiersprache|höheren Programmiersprachen]] die Bezeichnung eines Programmkonstrukts, mit dem der [[Programmcode|Programm-Quellcode]] [[Strukturierte Programmierung|strukturiert]] werden kann, sodass Teile der [[Funktionalität (Produkt)|Funktionalität]] des [[Computerprogramm|Programms]] [[Wiederverwendbarkeit|wiederverwendbar]] sind. Das besondere Merkmal einer Funktion (im Vergleich zum ähnlichen Konstrukt der [[Prozedur (Programmierung)|Prozedur]]) ist, dass die Funktion ein Resultat direkt zurückgibt und deshalb in [[Ausdruck (Programmierung)|Ausdrücken]] verwendet werden kann. Die genaue Bezeichnung und Details ihrer Ausprägung sind in verschiedenen [[Programmiersprache]]n unterschiedlich.&lt;br /&gt;
&lt;br /&gt;
Funktionen gelten als spezielle Varianten von [[Unterprogramm]]en.&lt;br /&gt;
&lt;br /&gt;
Nicht zu verwechseln ist das Programmkonstrukt ‚Funktion‘ mit anderen Bedeutungen des Ausdrucks ‚[[Funktion]]‘&amp;lt;!--Link auf BKS hier gewollt--&amp;gt;, beispielsweise mit Funktionen im Sinn der [[Funktion (Organisation)|Organisation]] oder der [[Systemtheorie]] oder mit [[Funktion (Objekt)|Funktion]] im Sinne von Aufgabe.&lt;br /&gt;
&lt;br /&gt;
== Funktionale Programmierung ==&lt;br /&gt;
Das Konzept einer [[Funktion (Mathematik)|Funktion]] im Sinne der Mathematik ist in der [[Funktionale Programmierung|funktionalen Programmierung]] am deutlichsten umgesetzt. Hier stellen Funktionen Abbildungsvorschriften dar. Eine Funktion besteht dann aus einer Reihe von Definitionen, die diese Vorschrift beschreiben.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
In [[Haskell (Programmiersprache)|Haskell]] würde man zum Beispiel schreiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 max :: Int -&amp;gt; Int -&amp;gt; Int&lt;br /&gt;
 max a b | a &amp;gt; b     = a&lt;br /&gt;
         | otherwise = b&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise erinnert an die mathematische Definition des Maximums zweier Zahlen.&lt;br /&gt;
&lt;br /&gt;
Ein funktionales Programm besteht ausschließlich aus Funktionsdefinitionen und besitzt keine Kontrollstrukturen wie Schleifen. Wichtigstes Hilfsmittel für die funktionale Programmierung ist daher die [[Rekursion]].&lt;br /&gt;
&lt;br /&gt;
Funktionen sind in funktionalen Programmiersprachen Objekte, mit denen wie mit beispielsweise Zahlen oder Listen gearbeitet werden kann. So können Funktionen [[Parameter (Informatik)#Argumente|Argument]]e und Funktionswerte (Ergebnisse, Rückkehrwerte) anderer Funktionen sein. Eine Funktion, die eine andere Funktion als Argument erwartet, nennt man [[Funktion höherer Ordnung]]. Ein Beispiel hierfür ist das &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;-Funktional:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 map :: (a -&amp;gt; b) -&amp;gt; [a] -&amp;gt; [b]&lt;br /&gt;
 map f []         = []&lt;br /&gt;
 map f (x : xs)   = f x : map f xs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; nimmt als Argument eine Funktion von &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, wobei &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; beliebige Typen sind (&amp;#039;&amp;#039;Typvariablen&amp;#039;&amp;#039;) und liefert als Ergebnis eine neue Funktion, die Listen von &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; in Listen von &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; abbildet, indem nämlich &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt; auf jedes Element der Liste &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; angewendet wird.&lt;br /&gt;
&lt;br /&gt;
== Imperative Programmierung ==&lt;br /&gt;
Zwar dienen auch in der imperativen Programmierung Funktionen im Prinzip dazu, aufgrund einer Reihe von &amp;#039;&amp;#039;Argumenten&amp;#039;&amp;#039; ein &amp;#039;&amp;#039;Resultat&amp;#039;&amp;#039; zu berechnen, aber durch die Verwendung von [[Variable (Programmierung)#Variablen in einer Blockstruktur|globalen Variablen]] kann eine Funktion mehr Argumente empfangen, als aus ihrer Argumentliste ersichtlich ist, und kann auf diesem Weg auch mehr als ein Resultat abliefern. Änderungen in den globalen Variablen einer Funktion werden häufig als &amp;#039;&amp;#039;Nebeneffekt&amp;#039;&amp;#039; bezeichnet. Damit gerät das Konzept der Funktion in die Nähe der [[Prozedur (Programmierung)|Prozedur]], bei der solche „Nebenwirkungen“ in Wirklichkeit die beabsichtigten Hauptwirkungen sind (siehe dazu [[Wirkung (Informatik)|Wirkung in der Informatik]]). Das führt dazu, dass Programmiersprachen oft eine irreführende Terminologie verwenden: In [[C (Programmiersprache)|C]] wird beispielsweise generell nur von Funktionen gesprochen; Prozeduren sind dort Funktionen mit dem Rückgabetyp &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt;; in [[Modula-2]] dagegen werden auch Funktionen mit dem Schlüsselwort &amp;lt;code&amp;gt;procedure&amp;lt;/code&amp;gt; definiert.&lt;br /&gt;
&lt;br /&gt;
=== Direktes Verwenden des Ergebnisses ===&lt;br /&gt;
Im Gegensatz zu Prozeduren geben Funktionen einen Wert zurück, der direkt verwendet werden kann. Prozeduren, die keinen Rückgabewert haben, können nur indirekt Ergebnisse liefern, indem entweder [[Referenzparameter]] oder globale Variablen verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die Programmiersprache [[Pascal (Programmiersprache)|Pascal]] bietet eine explizite Unterscheidung für Funktionen und Prozeduren. Eine Funktion &amp;lt;code&amp;gt;increment&amp;lt;/code&amp;gt;, welche eine Zahl um eins erhöht, kann folgendermaßen definiert werden:&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function increment(variable: Integer): Integer;&lt;br /&gt;
begin&lt;br /&gt;
    increment := variable + 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Bei einer Prozedur kann das Berechnungsergebnis nur indirekt zurückgegeben werden wie beispielsweise über Referenzparameter.&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
procedure increment(variable: Integer, var reference: Integer);&lt;br /&gt;
begin&lt;br /&gt;
    reference := variable + 1;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Während das Ergebnis bei einem Funktionsaufruf direkt genutzt werden kann, muss das Ergebnis bei einer Prozedur zuerst in einer Variablen gespeichert werden, da die Variable als Parameter übergeben wird.&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
program main;&lt;br /&gt;
var&lt;br /&gt;
    variable: Integer;&lt;br /&gt;
begin&lt;br /&gt;
    // Aufruf einer Funktion&lt;br /&gt;
    writeln(increment(3));&lt;br /&gt;
&lt;br /&gt;
    // Aufruf einer Prozedur&lt;br /&gt;
    increment(3, variable);&lt;br /&gt;
    writeln(variable);&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
==== Pascal ====&lt;br /&gt;
[[Pascal (Programmiersprache)|Pascal]] unterscheidet zwischen Funktionen und Prozeduren:&lt;br /&gt;
* Funktionen werden mit dem Schlüsselwort &amp;lt;code&amp;gt;function&amp;lt;/code&amp;gt; deklariert und liefern einen Rückgabewert mit einem definierten Typ. Funktionsaufrufe stehen innerhalb von Ausdrücken. Die Festlegung des Rückgabewerts erfolgt durch eine (Pseudo-)Zuweisung an den Funktionsnamen. Als Nebenwirkung können Funktionen aber den Zustand des Programms verändern, indem nämlich globale Variablen neue Werte erhalten.&lt;br /&gt;
* [[Prozedur (Programmierung)|Prozeduren]] werden mit dem Schlüsselwort &amp;lt;code&amp;gt;procedure&amp;lt;/code&amp;gt; deklariert und haben keinen definierten Rückgabewert. Ihre Wirkung kann sich deshalb nur in den Änderungen globaler Variablen zeigen.&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktionsvereinbarung in Pascal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
function summe(a: Integer; b: Integer): Integer;&lt;br /&gt;
begin&lt;br /&gt;
    summe := a + b;&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel eines Funktionsaufrufs in Pascal:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
ergebnis := summe(1, 2);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktionen und Prozeduren sind in Pascal im Gegensatz zu C schachtelbar. Dies bedeutet, dass sie weitere Funktionen und Prozeduren enthalten können.&lt;br /&gt;
&lt;br /&gt;
Argumente werden normalerweise als [[Wertparameter]] übergeben &amp;#039;&amp;#039;(call / pass by value)&amp;#039;&amp;#039;. Der Wert einer Variablen, die einer Funktion (oder Prozedur) als Argument übergeben wird, wird durch deren Ausführung nicht verändert. Es ist aber auch möglich, mit dem Schlüsselwort &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt; die Übergabe als [[Referenzparameter|Referenz]] (call by reference) festzulegen. Dadurch wird nicht der Wert einer Variablen übergeben, sondern ihre Adresse.&lt;br /&gt;
&lt;br /&gt;
==== C ====&lt;br /&gt;
Argumente werden prinzipiell immer als [[Wertparameter]] übergeben &amp;#039;&amp;#039;(call / pass by value)&amp;#039;&amp;#039;. Soll eine übergebene Variable verändert werden, so übergibt man deren Adresse, also einen [[Zeiger (Informatik)|Pointer]]. Die Bestimmung des Rückgabewertes geschieht durch eine &amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; Anweisung. Funktionen in C sind nicht schachtelbar. Allerdings liefern einige C-Compiler nicht standardisierte Erweiterungen aus, welche eine Schachtelung ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Beispiel einer Funktionsvereinbarung in [[C (Programmiersprache)|C]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int summe(int a, int b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel eines Funktionsaufrufs in C:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ergebnis = summe(1, 2);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatisierungstechnik: SPS-Programmierung ==&lt;br /&gt;
In der Automatisierungstechnik werden bei der [[Speicherprogrammierbare Steuerung|SPS]]-Programmierung &amp;#039;&amp;#039;Funktionen (FCs)&amp;#039;&amp;#039; sowie &amp;#039;&amp;#039;[[Funktionsbausteinsprache|Funktionsbausteine]] (FBs)&amp;#039;&amp;#039; als &amp;#039;&amp;#039;bibliotheksfähige Bausteine&amp;#039;&amp;#039; verwandt.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Siegfried Grohmann, Dirk Papendieck, OStR Peter Westphal-Nagel: &amp;#039;&amp;#039;Automatisierungstechnik mit Simatic S7. Programmierprojekte für die berufliche Aus- und Weiterbildung.&amp;#039;&amp;#039; 3., überarbeitete und aktualisierte Auflage, Elektronik-Praktiker-Verlag (EPV), Duderstadt 2009, ISBN 978-3-936318-75-3, 160 Seiten.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierkonzept]]&lt;br /&gt;
[[Kategorie:Unterprogramm]]&lt;br /&gt;
[[Kategorie:Programmiersprachelement]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Gerbil</name></author>
	</entry>
</feed>