関数の代わりに、サブルーチンから始めます。プログラムは命令の単なるリストであり、コンピュータに何かを行う方法を伝えるレシピであることを伝えます。そして、それは次々に命令を実行している(いくつかのステップを並行して実行する可能性がありますが、それについては後で詳しく説明します)。
私たちはいつも何度も何度もそれを書き留めていた場合、それはひどいだろうので、私たちは一度だけそれらを書いて、それから「小さなプログラム」を作るので、いくつかのタスクは、かなり一般的で反復されている- サブルーチンで再利用することができ、プログラムの他の部分。複数回実行できるようにするために、プログラムでわかりやすい名前を付けています。そして、この「小さなプログラム」をより大きなプログラムの一部として実行したいときに、その名前で呼び出すことで、その名前を使用できます。
サブルーチンを呼び出すことは、そのタスクの実行方法を知っている悪魔をその悪魔の名前で呼び出すことと似ています。プログラムでその特定のタスクを実行する場合は、「アルゴスという名前の悪魔を呼び出す」と書くと、デーモンが表示され、私たちに指示されたとおりにタスクが実行されます。ジョブ。
悪魔は追加の情報を必要とする場合があり、それがないと実行するタスクや、私たちが本当に望んでいることを決定できません。たとえば、悪魔が城を建設することになっている場合、彼はそれをどこに建設することになっているのか、またはどのくらい大きいのかなどを知る必要があるかもしれません。これらは悪魔に渡される引数です...つまり、サブルーチンは次のようになりますパラメータ化。
パラメータは、タスクを実行するために欠落しているが必須の情報です。それらは、サブルーチンが実行できることを少しずつ変更します。これらは、実行する前に埋める必要があるレシピの空白のスロットのようなものです。
一方、引数は、これらのパラメーターに提供する実際の情報(値)です。
並列実行については、このように考えることができます。プログラムを実行している誰か(または何か)が常に存在します(命令のリスト)。それは別の人間(「コンピュータ」はかつて計算を実行していた人の名前であったことをご存知でしたか)、または機械です。プログラムは単なる命令のリストであり、それ自体では機能しません。計算プロセスを行う誰かまたは何かがなければならない(リストからこれらのアクションを実行します)。また、これらのアクションを並行して実行できる場合もあります。リストのコピーを複数のユーザーに配布し、お互いに中断したり、中断したりしない限り、リストのさまざまなタスクをそれぞれに実行させることができます他の誰かの仕事の結果を待たなければならない。それはあなたにとってマルチスレッドです;)
差として機能するとサブルーチン(とも呼ばれる手順)、通常の違いは、関数は、特定の計算するために呼び出されることがある値が、その実行結果として返す手順は楽しみのためだけに実行されている。)AKAその「副作用」–リストから実行される操作のために。
ただし、プロシージャまたは関数を呼び出すと最初に問題が発生する場合は、かつて一般的だった別の用語、ジャンプを使用できます。サブルーチンにジャンプすることができます。つまり、現在実行中の処理をすべて停止し、タスクを実行するために、リストの別の場所(または別のリスト)-サブルーチン-に「ジャンプ」します。次に、終了すると「ジャンプバック」します。つまり、中断された場所に戻り、前のタスクを続行できます。呼び出しとジャンプの違いは、今あなたが悪魔であるということです。
ここで誰かが言及したメソッド、または一部の言語が「関数を持たず、メソッドのみ」という事実については、メソッドは関数であるため、それは完全に正しくはありません。– それらの特別な種類:これらは、オブジェクト内にカプセル化された情報を取得したり、それらを操作したりするために使用される関数です。それらは「それらのデータを操作する方法」です。名前は、オブジェクト指向のパラダイムに由来し、データはオブジェクトで囲まれており、「メソッド」と呼ばれる特別な関数によってのみ直接操作することはできません。
メソッドは他の点で特別です。つまり、操作/呼び出される特定のオブジェクト(「this」オブジェクト)を知っている必要があります。そのため、通常、メソッドには、それが呼び出されたオブジェクトに関する情報(「this」ポインター)を格納する追加の非表示パラメーターが用意されています。これは関数の呼び出し方法を少し複雑にしますが、プログラマーが何をしているのかを理解している限り、プログラマーが気にする必要のない「実装の詳細」です。