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