私は、すべてのプログラマーがそれぞれのタイプの言語の1つを学ぶべきだと何度か聞いたことがあります。今、これは必ずしも真実ではありませんが、私はそれが良い考えだと思います。
手続き言語(Perl)を学びましたが、他のタイプは何ですか?
それらの違いは何ですか、それぞれの例は何ですか?
私は、すべてのプログラマーがそれぞれのタイプの言語の1つを学ぶべきだと何度か聞いたことがあります。今、これは必ずしも真実ではありませんが、私はそれが良い考えだと思います。
手続き言語(Perl)を学びましたが、他のタイプは何ですか?
それらの違いは何ですか、それぞれの例は何ですか?
回答:
用語は標準化にはほど遠いものの、一般的な方法は、主要なプログラミングパラダイムを次のように分類することです。
あなたはすでに手続き型プログラミングがどのようなものかを知っているようです。
機能的な言語機能はファーストクラスのオブジェクトとして扱われます。つまり、関数を引数として別の関数に渡すことができます。または、関数が別の関数を返す場合があります。関数型パラダイムはラムダ計算に基づいており、関数型言語の例はLISP、Scheme、Haskelです。興味深いことに、JavaScriptは関数型プログラミングもサポートしています。
では論理プログラミング次のようなエンティティ間の関係を説明述語定義するpresident(Obama, USA)
かをpresident(Medvedev, Russia)
。これらの述語は、リテラル値だけでなく、非常に複雑になり、変数を含む可能性があります。すべての述語を指定したら、システムに質問をして、論理的に一貫した答えを得ることができます。
論理プログラミングにおける大きなアイデアではなく、コンピュータに伝えることですどのように物事を計算するために、あなたがそれを教えてどのようなものです。例:PROLOG。
オブジェクト指向のパラダイムは、ある意味では手続き型プログラミングの拡張です。手続き型プログラミングには、整数や浮動小数点数などのプリミティブ型、配列やリストなどの複合型、構造体などのユーザー定義型などのデータがあります。また、データを操作する手順もあります。対照的に、オブジェクト指向では、データとプロシージャの両方を含むオブジェクトがあります。これにより、カプセル化、継承、ポリモーフィズムなどの優れた機能を使用できます。例:Smalltalk、C ++、Java、C#。
ジェネリックプログラミングは、1983年にAdaで初めて導入され、C ++でテンプレートが導入されてから普及しました。これは、操作対象の実際のデータ型を指定せずにコードを記述し、コンパイラに認識させるという考え方です。たとえば、書く代わりに
void swap(int, int);
void swap(float, float);
....
あなたは書くだろう
void swap(T, T);
一度、そして実際にコードで使用されるT
ときに、コンパイラーが何であれ特定のコードを生成するようswap()
にします。
汎用プログラミングは、C ++、Java、およびC#によってさまざまな程度でサポートされています。
C ++などの多くの言語が複数のパラダイムをサポートしていることに注意することが重要です。言語が特定のパラダイムをサポートすると言われている場合でも、すべてのパラダイムの機能をサポートしているわけではないことも事実です。特定のパラダイムにどの機能が必要であるかについては多くの意見の相違があることは言うまでもありません。
プログラミング言語には、主に直交する機能がいくつかあります。最も顕著なものは、彼らがサポートするパラダイムにあります。Wikipediaの記事は徹底的パラダイムをカバー。最も重要なパラダイムはおそらくこれらです:
ただし、言語は他の点でも異なります。
現在流行しているプログラミングパラダイムはいくつかあります。
ほとんどの主流言語では、命令型プログラミング、関数型プログラミング、および宣言型プログラミングの側面が混在しています。ニッチ言語は、よりエキゾチックであるか、何らかの理由で汎用プログラミングには適さない興味深い新しいアイデアを導入する傾向があります。網羅的ではないいくつかの例:
(+/ % #)&.:*:
、配列のRMSを計算します。簡潔であることで有名で、読めないことで有名です。