YAMADA TAISHI’s diary

ゲームについてとか私の日記とか。このブログのあらゆるコードは好きにどうぞ。利用規約があるものは記事内のGitHubのRepositoryのリンクで貼られていると思うので、そちらを参照ください。

【備忘録】マルチパラダイムプログラミング言語とは何のこと?

本記事は備忘録です。

C#の勉強をしている際に見かけた文章があります。

C#は"マルチパラダイムプログラミング言語"です。

私はマルチパラダイムプログラミング言語という言葉を知りませんでした。
今回マルチパラダイムプログラミング言語という言葉を調べたので覚書として残しておこうと思います。


目次


マルチパラダイムプログラミング言語

wikiによると

マルチパラダイムプログラミング言語 (マルチパラダイムプログラミングげんご、multiparadigm programming language)は、複数のプログラミングパラダイムに対応するプログラミング言語の総称である。

らしい。

ふむ、なんだそれは?
全く理解出来ない。

そもそも、プログラミングパラダイムとは何を言い表すのか知りませんでした。


プログラミングパラダイムとは

またwikiでプログラミングパラダイムを調べてみます。

プログラミングパラダイム (英: programming paradigm)とは、プログラミングにおけるパラダイムである。

パラダイム……?

パラダイム (paradigm) とは、科学史家・科学哲学者のトーマス・クーンによって提唱された、科学史及び科学哲学上の概念。一般には「模範」「範」を意味する語

なるほど、規範という意味らしいです。
つまり、直訳するとプログラミングの規範という意味でしょうか?

まだ、しっくり来ません。

ネットで検索するとプログラミングパラダイムとして以下の表を見つけました。

f:id:OrotiYamatano:20181202231931p:plain https://vega.ei.tohoku.ac.jp/~takashi/lecture-B-2004/lecture-05.html#ct2-3

なんとなく、しっくり来ました。
プログラミングの基本スタイルの事だと思われます。

関数型プログラミングオブジェクト指向プログラミングといった言葉については理解していましたが、
これらのことをプログラミングパラダイムと呼ぶらしいということがわかりました。
ちょっと待ってください。プログラミングパラダイム(プログラミングの規範)と呼ぶものはこんなに狭い定義なのでしょうか?
「プログラミングパラダイム(プログラミングの規範)と呼ぶのだから
コレだけを、プログラミングパラダイムと呼ぶのはおかしいのでは無いか」と思い始めました。

例えばプログラミングで言うところのデータ型(型推論や静的型付け、動的型付け)も
プログラミングパラダイムの一つと呼ぶのかも知れない。
もしかしたら本当は結構広義な意味かもしれないです。

ちょっと調べてみます。

こんなものを見つけました。 www.weblio.jp

たとえばOzでは、論理型、関数型、オブジェクト指向、データフローコンカレントなど、多数のパラダイムを内包している。

この文章を見る限り、論理型(データ型)はプログラミングパラダイムの一部だという風にくめます。
どうやら結構広義な意味のようです。

しかし、基本的にプログラミングパラダイムというと、ネットを見る限り日本では各プログラムの基本スタイルのことをプログラミングパラダイムと言い表すみたいです。


マルチパラダイムプログラミング言語とは

つまり、マルチパラダイム言語とは、マルチ(複数)パラダイム(規範)プログラミング言語
手続き型、オブジェクト指向プログラミングなど複数の特性を併せ持つプログラミング言語ということのようです。

なるほど。
それならばC++はマルチパラダイムプログラミング言語ということになる。
C++オブジェクト指向プログラミングも出来るし、手続き型プログラミングも出来るのでマルチパラダイムプログラミング言語なのでは?
調べてみると案の定ネットにはマルチパラダイムと書かれていました。
C++パラダイムは(手続き型プログラミング、データ抽象、オブジェクト指向プログラミング、ジェネリックプログラミングの組み合わせ)らしい。

PHPもマルチパラダイム言語ではなかろうか?
PHPのプログラミングパラダイムを調べてみると(関数型とオブジェクト指向)と書いており、マルチパラダイムとは書いていませんでした。
2つのプログラミングパラダイムだとマルチパラダイムと呼ばないのかも知れないです。

結局、普通のプログラミングパラダイムとマルチパラダイムの呼び分けがどうなっているのか、詳しいことはよく分かりませんでした。

ではC#のプログラミングパラダイムなんだろうかと気になったので調べます。

調べてみたら、以下のようなパラダイムだと判明(wiki参照)
構造化, 命令型, オブジェクト指向, 関数型, イベント駆動型, ジェネリック, リフレクション, 並行計算
なるほど。理解。確かにマルチパラダイム言語です。

3つ以上のプログラミングパラダイムで構成されていれば、マルチパラダイムプログラミング言語と考えていれば、まぁ間違いは無さそうです。


以上、マルチパラダイムプログラミング言語とはでした。