基礎言語★サブルーチンを作りたいよぉ
プログラムのうち、繰り返し使える処理を別枠で用意しておいて、メインルーチンからそれを呼び出すことはよくやりますね。
・プログラムを再利用することでメモリの節約になる
・共通の処理を使うので、その処理を修正・改造するときは一度で済む
・処理を意味のあるひとかたまりにすることで、プログラムの見通しが良くなる
・・・など利点がいっぱい。
(文章修正2021/01/11)
BASIC
10 GOSUB 100
20 END
100 'サブルーチン
110 PRINT "proc."
120 RETURN 'GOSUB命令の直後に戻る
ExcelVBA
'メインルーチン
Sub main()
Dim answer As Integer
answer = SubRoutine1(2, 3) 'サブルーチン1呼び出し
Call SubRoutine2(answer) 'サブルーチン2呼び出し
End Sub
'Functionは戻り値を返すことができる
'Excel上で自作関数として使うこともできる(実行されるたびメッセージボックスも出る)
Function SubRoutine1(x As Integer, y As Integer) As Integer
MsgBox (Str(x) & " + " & Str(y) & " =")
SubRoutine1 = x + y
End Function
'Subは戻り値は返さない
'引数があればPrivateのようにマクロ一覧から隠すこともできる
Sub SubRoutine2(ans As Integer)
MsgBox (Str(ans))
End Sub
C言語
//サブルーチンの役割を持つこれを「関数」と呼ぶ
//関数を呼ぶ際に値を渡すことができる(下記のx、y)。これを「引数(ひきすう)」と呼ぶ
int SubRoutine(int x, int y){
printf("%d + %d = ", x, y);
return x+y;
}
//関数は、使う位置よりも先に定義する必要があるので、メインより上に書いている
//(ちなみに、プロトタイプ宣言をすれば後で書いてもOK)
//関数は、計算をした結果をreturnで返す。これを「戻り値(もどりち)」と呼ぶ
//関数の中でprintfのような出力の発生は「副作用」と呼ぶ
//下記がメインルーチン
void main(){
int answer;
answer= SubRoutine( 2, 3 );
printf("%d\n", answer); //関数で2+3の計算結果が戻るので、5と表示される
}
Perl
#メインルーチン
$answer= &SubRoutine(2, 3); #Perlではサブルーチンを呼び出すときは「&」を付ける
print "$answer\n";
#サブルーチン (subで開始する)
sub SubRoutine{ #引数は特殊配列「 @_ 」に格納されて渡される
local(@a)= @_; #Perlでは変数をそのまま使うとグローバル変数になるので
local($ans); #ローカル変数を明示的に用意するほうが使いやすい
print "$a[0] + $a[1] = ";
$ans= $a[0] +$a[1];
return($ans);
}
Java
class SubR{
public static void main(String args[]){
int answer;
answer= SubRoutine( 2, 3 ); //サブルーチン(staticメソッド)を呼び出します
System.out.println(answer);
}
static int SubRoutine(int x, int y){
System.out.print(x+" + "+y+" = ");
return x+y;
}
//staticメソッドを定義しました
//オブジェクト指向プログラムをコントロールするため
//staticを含めさまざな修飾子があるようです
//私の勉強が進んだら加筆します
}
Python
#Pythonのサブルーチンは def で始める
#サブルーチン内はインデントを下げる
def SubRoutine(x, y):
print(f"{x} + {y} = ")
return x+y
#サブルーチンは使うより先に定義する必要がある
#インデント下げが終了したら、終了より前までがサブルーチンになる
#下記がメインルーチン
answer= SubRoutine( 2, 3 )
print(answer)
サブルーチン・関数は書き方や機能がたくさんあるのは分かっていたから、できるだけ基本を書こうと思っていましたがやはり盛り沢山になりましたね。
でも、基本的な動作は似通っているので、理解に苦しむことは無いと思います。書き方に苦しむだけ。(笑)