Beginnen Sie anstelle von Funktionen mit Unterprogrammen . Sagen Sie ihnen, dass ein Programm nur eine Liste von Anweisungen ist, ein Rezept , um dem Computer zu sagen, wie er etwas tun soll. Und dass es eine Anweisung nach der anderen ausgeführt wird (mit der Möglichkeit, einige Schritte parallel auszuführen, aber dazu später mehr).
Einige Aufgaben sind ziemlich häufig und wiederholen sich, daher wäre es schrecklich, wenn wir sie immer wieder aufschreiben müssten, also schreiben wir sie nur einmal und machen daraus ein "kleineres Programm" - eine Unterroutine , die von wiederverwendet werden kann andere Teile des Programms. Um es mehr als einmal ausführen zu können, geben wir ihm in unserem Programm einen aussagekräftigen Namen . Und dann können wir diesen Namen verwenden , wenn wir dieses „kleines Programm“ als Teil eines größeren ausführen möchten, rufen sie mit diesem Namen.
Das Aufrufen einer Unterroutine ist wie das Beschwören eines Dämons, der weiß, wie man diese Aufgabe ausführt, mit dem Namen dieses Dämons. Wenn wir also diese bestimmte Aufgabe in unserem Programm erledigen möchten, schreiben wir "Ruf den Dämon namens Argoth an", und der Dämon taucht auf und erledigt die Aufgabe für uns, wie wir ihn angewiesen haben, und geht dann weg und wir können unsere Aufgabe fortsetzen Job.
Manchmal benötigt der Dämon zusätzliche Informationen, ohne die er nicht entscheiden kann, welche der Aufgaben er ausführen soll oder was wir wirklich von ihm wollen. Wenn der Dämon beispielsweise eine Burg bauen soll, muss er möglicherweise wissen, wo er sie bauen soll oder wie groß sie sind usw. Dies sind die Argumente, die an den Dämon weitergegeben werden ... Ich meine, das Unterprogramm, das jetzt wird parametrisiert .
Parameter sind die Informationen, die fehlen, aber für die Ausführung der Aufgabe erforderlich sind. Sie ändern ein wenig, was das Unterprogramm kann. Sie sind wie leere Slots im Rezept, die ausgefüllt werden müssen, bevor wir sie ausführen können.
Argumente sind andererseits die tatsächlichen Informationen (Werte), die wir für diese Parameter liefern.
Bei der parallelen Ausführung können wir uns das so vorstellen: Es gibt immer jemanden (oder etwas ), der das Programm ausführt (die Liste der Anweisungen). Es ist entweder ein anderer Mensch (wussten Sie, dass "Computer" einst ein Name für eine Person war, die die Berechnung durchführte?) Oder eine Maschine. Ein Programm ist nur eine Liste von Anweisungen, es funktioniert nicht alleine. Es muss jemanden oder etwas geben, der den Rechenprozess durchführt(Führen Sie diese Aktionen aus der Liste aus). Und manchmal können diese Aktionen parallel ausgeführt werden - wir können die Kopien der Liste an mehrere Personen verteilen und jede von ihnen eine andere Reihe von Aufgaben als die Liste ausführen lassen, solange sie sich nicht gegenseitig unterbrechen oder nicht. Ich muss nicht auf die Ergebnisse der Arbeit eines anderen warten. Das ist Multithreading für dich;)
Was den Unterschied zwischen Funktionen und Unterprogrammen (auch Prozeduren genannt ) betrifft , besteht der übliche Unterschied darin, dass eine Funktion aufgerufen wird, um einen bestimmten Wert zu berechnen, den sie als Ergebnis ihrer Ausführung zurückgibt, während Prozeduren nur zum Spaß ausgeführt werden;) AKA für ihre "Nebenwirkungen" - nur für die Operationen aus der Liste ausgeführt.
Wenn das Aufrufen einer Prozedur oder Funktion zunächst Probleme verursacht, können Sie einen anderen Begriff verwenden, der früher beliebt war: Springen . Man kann in eine Unterroutine springen , was bedeutet, dass Sie aufhören, das auszuführen, was Sie gerade tun, und zu einer anderen Stelle auf der Liste (oder einer anderen Liste) - der Unterroutine - "springen", um ihre Aufgaben auszuführen. Wenn Sie fertig sind, "springen" Sie zurück - das heißt, Sie kehren zu dem Ort zurück, an dem Sie unterbrochen wurden, damit Sie mit Ihrer vorherigen Aufgabe fortfahren können. Der Unterschied zwischen Rufen und Springen besteht darin, dass Sie jetzt der Dämon sind.
Wie bei Methoden erwähnt hier von jemandem, oder die Tatsache , dass einige Sprachen „Funktionen nicht hat, nur Methoden“ - das nicht ganz richtig ist, weil Methoden sind Funktionen! - eine besondere Art von ihnen: Sie sind Funktionen, mit denen einige in einem Objekt gekapselte Informationen abgerufen oder bearbeitet werden. Sie sind eine "Methode zur Bearbeitung dieser Daten". Der Name stammt von einem objektorientierten Paradigma, in dem Daten in Objekten eingeschlossen sind und nicht direkt betrieben werden können, sondern nur durch spezielle Funktionen, die als "Methoden" bezeichnet werden.
Eine Methode ist auf eine bestimmte andere Weise etwas Besonderes: Sie muss wissen, auf welchem bestimmten Objekt sie arbeiten / aufgerufen werden soll (das "this" -Objekt). Aus diesem Grund werden Methoden normalerweise mit einem zusätzlichen versteckten Parameter verschönert, der Informationen über das Objekt speichert, für das es aufgerufen wurde (den "this" -Zeiger). Dies erschwert die Art und Weise, wie die Funktion aufgerufen wird, aber es ist ein "Implementierungsdetail", das ein Programmierer nicht viel stören sollte, solange er weiß, was er tut.