Quintus hat geschrieben:
Kennzeichen von Funktionen ist der fehlende Rückgabewert
Nein, eben nicht. Das fehlen eines Rückgabewertes ist Kennzeichen von Prozeduren. Spontan fällt mir eigentlich nur PASCAL ein als Sprache bei der dieser Unterschied nicht nur theoretischer sondern auch praktischer Natur ist.
Vgl. dazu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
procedure p(var n: integer); begin n := n; end;
function f(n: integer): float; begin f := n; end;
var i: float; begin (* i := p(1); ist ungueltig! *) i := f(1); (* Dies ist gueltiger Code *) p(1); (* Dies ist gueltiger Code *) (* f(1); das hier wieder nicht *) end. |
Man sieht hier also, dass PASCAL es verbietet (ohne Compilerswitcherei) Funktionen als Statement oder Prozeduren als Expression zu nutzen.
Im Gegensatz dazu kennt zum Beispiel C mit Funktionen des Rückgabetyps "void" ebenfalls etwas ähnliches wie Prozeduren. Allerdings kann ich in C (und in den meisten anderen Sprachen) Funktionen die etwas zurückgeben einfach aufschreiben wie ein Statement, also als einzigen „Befehl“ einer Zeile. Diese Sprachen „vergessen“ dann halt den Rückgabewert wieder.
Quintus hat geschrieben:
KA, was eine „Prozedur“ ist. Ich vermute, dass es sich dabei um den Oberbegriff zu Funktionen und Methoden handelt — Funktionen gibt es in Ruby aber nicht.
Doch, Ruby kennt eben nur Funktionen.
Methoden ist hier der Oberbegriff, damit werden nämlich Funktionen und Prozeduren im allgemeinen bezeichnet, die an ein Objekt oder Instanz davon gebunden sind.
Aber um die eigentliche Frage zu beantworten:
Als Nichtinformatiker und Nicht-PASCAL-Programmierer brauchst du dir über den Unterschied von Prozeduren und Funktionen keine Gedanken zu machen.
*edit*
Ich habe den PASCAL-Code jetzt mal so angepasst, dass er doch tatsächlich kompilieren würde… Die beiden Unterprogramme sind verschiedene Implementationen der Identitäts„funktion“. Ausserdem erweiterte Erklärung zu dem PASCAL Snippet.
_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset
Github Profil –
Bitbucket Profil