- ベストアンサー
関数と命令の違いについて
プログラミング言語の関数と命令の違いについてなのですが、 関数は返り値があるもの、命令は返り値が無いもの。 とどこかで読んだ覚えがあるのですが、 いくつかのプログラミング言語を使っているとそうは思わないときがあります。 (voidの関数のように、何も返さない関数もあると思います。) 検索して調べてみると、例えば、 HSPなどでは命令と関数が明確に区別されていますが、 なでしこでは曖昧のように思います。 (なでしこの場合、標準の機能は、どれも命令と呼ばれていますが、命令のくせに普通に値を返します。) しかし、もし、先述の通りだとすると、 何故、わざわざ区別する必要があるのでしょうか? すべて、関数にしてしまっても良いと思うのですが? また先述の、命令と関数の違いがそもそも間違っているのであれば、 正しい違いを教えていただけるとありがたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関数と命令、全く違うジャンルの言葉なんです。 命令(ORDER)は、元々アセンブラなどのプログラム言語で特定の動作 を行うコマンドを意味していました。ですので、古い対応のプログラム では、処理は全て「命令」だったんです。 一方、関数(Function)は、出自が表計算アプリ(MultiPlanなど)で、 「計算して結果を返す」数学的な用語の一環として使われました。これが オブジェクト言語が開発される中で、実装される処理が「要は結果を返す んだから同じことじゃないか」と、処理を指す用語として使われだした のが初めなんです。即ち「元々コンピュータ用語じゃなかった」んですね。 ということで、「クルマ」と「自動車」みたいな状況で2つの言葉が混在 しているんです。これら用語の細かい定義は、各々の言語セットの中で 決まっていますから、詳細はそちらを参照して下さい。ただし、出自の 関係から、どちらか片方が定義されて無い、なんて言語もありますけど。
その他の回答 (2)
関数と命令を区別する習慣は、cが一般化させたものだと思います。なでしこはその辺の区別があいまいと言うことですが、昔々の8bitマイコンで使われていたROM-BASICも確かそうでした。これは、全ての命令と関数を処理系が一緒くたに抱え込んでいて、後から追加したり削除したりすると言う発想がなかったせいじゃないでしょうか?そういう処理系では、区別する必要そのものがあまりありません。なぜなら、処理系が提供するものが全てであり、それが命令か関数かを意識してもしょうがないからです。あえて意識することはできますが、呼び名の違いでしかないです。 これがcだと、関数はどのライブラリに定義されているのかを知らないと使えませんから、命令か関数か(あるいはマクロか)の区別は非常に重要です。 結局、それを意識する必要があるかないかは、処理系によると言うことになりますね。
お礼
ありがとうございます。 C言語は勉強中で、マクロが何かがよくわかっていないのですが、 参考になりました。
- Tasuke22
- ベストアンサー率33% (1799/5383)
やっぱり言語によって違うのかな? Lispは関数とマクロしかなく、命令というのが ありませんね。 C/C++でも命令ってないんじゃないでしょうか? HSPって初耳ですが、考えたら命令という言葉は 私はアセンブラでしか知らないような気がします。 COBOLは命令だったかなあ?忘れた。 逆にCOBOLには関数って無かったような気が・・・
お礼
ありがとうございます。参考になります。
お礼
なるほど、ありがとうございます。 ということは、プログラミング言語全体として考えれば、 今では、どちらでも良い(同じ)のであって、 個々のプログラミング言語では、そもそもどちらかしか無かったり、 扱いが異なる場合もあるということでしょうか。