(Java) サブルーチン: プロシージャと関数 - 1


が画面に表示されます。

サブルーチンは、名前があり、独自の別個のタスクを解決するプログラムの別個の部分です。サブルーチンはメインプログラムの先頭に配置され、名前を指定することでメインプログラムから起動(呼び出し)できます。

サブルーチンを使用すると、プログラム内の別の場所に同じコードを記述する必要がある場合に、コードの重複を避けることができます。
プログラムにインポートされるライブラリ (数学ライブラリ Math など) は、誰かがすでにコンパイルしたサブルーチンで構成されています。プログラマーは、どのようなアルゴリズムを実装するかを考える必要はなく、正確に何をしているのかだけを考えて、単にアルゴリズムを適用するだけです。これにより時間を大幅に節約できます。すでに誰かが書いたアルゴリズムを自分で書く必要は
ありません。
各ルーチンはタスクを 1 つだけ実行する必要があります。単に何かを計算するか、データを出力するか、あるいは他のことを行うかのいずれかです。

サブルーチンにはプロシージャ関数の 2 種類があります

サブルーチンはいくつかのアクションを実行します。たとえば、結果を特定の形式で画面に表示します(簡単な例として、演算子 println()  は画面に情報を出力する標準サブルーチンです)。

関数サブルーチンはメイン プログラムで使用できる結果 (数値、文字列など) を返します

簡単な手順を書いてみましょう。
画面に「Error」という文字列を表示する必要があるとします。ユーザーの過失(間違ったデータを入力した場合など)によりコード内でエラーが発生する可能性があるたびに
これはステートメントを書くことで実行できます System.out.println("エラー"); そして、そのような行をプログラム内の多くの場所に挿入する必要があると想像してください。もちろんどこにでも書いて大丈夫です。ただし、この解決策には 2 つの欠点があります。
1) この文字列は何度もメモリに保存されます
2) エラー時の出力を変更したい場合は、プログラム全体でこの行を変更する必要があり、かなり不便です

このような場合には手続きが必要
になります。 プロシージャを含むプログラムは次のようになります。 ... static void printError() // プロシージャの説明 { System.out.println("エラー"); // プロシージャ本体 - プロシージャが実行するコマンド } public static void main(String[] args) { ... printError() // 実行のためのプロシージャを開始します。実行したいプロシージャの名前を指定するだけです。 ... printError() ... } プロシージャは void という単語で始まります。プロシージャ名の後には空の括弧があります。
プロシージャ内で実行されるすべてのステートメントはインデントされます。

プロシージャはメイン関数 main() の前に記述されます

プロシージャを実行するには、メイン プログラムでプロシージャを名前で呼び出し、 かっこを忘れずに記述する必要があります
プログラム内のプロシージャは何度でも呼び出すことができます。

ここで、ユーザーのエラーに応じて、ユーザーが犯した間違いの種類に応じて異なるメッセージを表示する必要があると考えてみましょう。
この場合、エラーごとに独自のプロシージャを作成できます。 静的 void printErrorZero() { System.out.println("エラー。ゼロ除算!"); } 静的 void printErrorInput() { System.out.println("入力エラー!"); } さらに多くのエラーの可能性がある場合はどうなるでしょうか?この解決策は私たちには合いません。
どのようなエラーメッセージを表示するかを指示してプロシージャを制御する方法を学ぶ必要があります。
これを行うには、プロシージャ名の後に括弧内に記述するパラメータが必要です。 static void printError(String s) { System.out.println; } このプロシージャでは、 s はパラメータ、つまりプロシージャの制御を可能にする特別な変数です。
パラメータは、サブルーチンの動作方法を決定する変数です。パラメータ名は、サブプログラムのヘッダーにカンマで区切ってリストされます。パラメータの型はパラメータの前に記述されます。

ここで、プロシージャを呼び出すときに、プロシージャ内のパラメータ (変数) に割り当てられる実際の値を括弧内に示す必要があります。 printError("エラー! ゼロ除算!"); この値を引数と呼びます。
引数は、サブルーチンが呼び出されたときにサブルーチンに渡されるパラメータ値です。
引数には定数値だけでなく、変数や算術式も使用できます。

多くの場合、サブルーチン内でのみ使用される追加の変数を使用する必要があります。このような変数はローカル (またはローカル) と呼ばれ、変数が作成されたサブルーチン内でのみ操作できます。
 
ローカル変数のスコープは、宣言されている中かっこで囲まれたブロックです< /em>

Java のメイン プログラムもサブルーチンなので、main() 内で宣言されたすべての変数はローカル変数です 
他のサブルーチンは、他のサブルーチンのローカル変数について何も「認識」しません。

したがって、変数の有効範囲 (スコープ) を、それが本当に必要なサブルーチンのみに制限することができます。プログラミングでは、この技術はカプセル化と呼ばれます。 - 変数が外部から変更されないように隠します。

プログラム内の任意の場所 (サブルーチン内) で参照できる変数を宣言する必要がある場合、そのような変数はすべてのサブルーチンの外で宣言されます (以下の表のプログラム 3 を参照)。
このような変数はグローバルと呼ばれます。

Java では、プログラムの開始時にすべてのグローバル変数が自動的にゼロに設定されます (ブール変数は false になります)


3 つのプログラムを分析します。 <テーブル align="center" border="1" cellpadding="1" cellpacing="1" style="width:95%"> <本体>
1) このプログラムでは、変数 i はローカルです。ローカル変数がサブルーチン内で宣言されている 2) ここでは、メイン プログラムに変数 i (値 7) が存在する場合でも、値 5 の新しいローカル変数 i が作成されます。
このプログラムを実行すると、画面に値 75 が表示されます
3) このプログラムにはグローバル変数 i があります。その値はサブルーチン内およびメイン プログラム内で変更できます。
このプロシージャはグローバル変数 i を使用して動作し、新しい値 2 が割り当てられます。値 2
静的 void テスト() {   int i = 5; System.out.println(i); } 静的 void テスト() {   int i = 5;   System.out.println(i); } public static void main(String[] args) { { int i = 7;   System.out.println(i);  テスト(); } パブリッククラス Main { int i; 静的 void テスト() {   i = 2; } public static void main(String[] args) { { テスト(); System.out.println(i); }