ファンクション・サブルーチン・プロシジャー
授業でC言語を教えています.
私はこれまでいろいろなプログラミング言語に接してきました.その中でC言語とそのた他との違いの一つが,このスレッドの表題であるファンクション,サブルーチン,プロシジャーの扱いについてです.C言語は基本的にファンクション(関数)しかありません.ファンクション(関数)とはy=f(x)のように入力に対して出力があるものを指します.そして,出力のないファンクションをサブルーチン,プロシジャーと呼んでいたのですが,問題はこの2つの違いについてです.私はプログラミング言語ごとの表現で,サブルーチン,プロシジャーがあると思っていたのですが,あるサイトを見てこの違いを理解することができました.そのサイトのURLは
https://qiita.com/shibomb/items/41bbd57a6ed0e7211bd5
です.
ここを読むにファンクション,サブルーチン,プロシジャーの違いは次のようになります.
ファンクション:y=f(x)
プロシジャー:f(x)
サブルーチン:f()
つまり,引数有りで戻り値なしのものをプロシジャー,引数なしで戻り値もないものをサブルーチンというようです.還暦を前に新たなる知見を得ることができました.
私が初めて学んだプログラミング言語はBASICでした.当時のBASICにはサブルーチンはありましたが,プロシジャーというものはありませんでした.その後に学んだPascalには引数を渡せるプロシジャーがあったのを思い出しました.BASICのサブルーチンは,その実行に必要なデータや処理結果をすべてグローバル変数に頼らねばならず,今となっては大変危険な言語だなと思います.ただまだコンピュータ技術が現在のようではなかった1980年代としては,そういう言語仕様にするしかなかったのだと思います.
ところでC言語でファンクション,サブルーチン,プロシジャを表現するなら,
ファンクション:戻り値の型 func(引数列)
プロシジャー:void func(引数列)
サブルーチン:void func(void)
となるでしょうか.
私は,20年近くプログラミングの授業を担当していますが,還暦を前に今回のことを理解できて良かったです.授業にもフィードバクしていきたいと思います.