web-dev-qa-db-ja.com

各種プログラミング言語の学習

私は何度も、すべてのプログラマーがそれぞれの言語のタイプの1つを学ぶべきだと聞いています。さて、これは必ずしも真実ではありませんが、それは良い考えだと思います。

私は手続き型言語(Perl)を学びましたが、他のタイプはあるですか?

それらの違いは何ですか?それぞれの例は何ですか?

24
Dynamic

用語は標準化されていませんが、一般的な方法は、主要なプログラミングパラダイムを次のように分類することです。

  • 手続き型
  • 機能的
  • 論理的
  • オブジェクト指向
  • ジェネリック

あなたはすでに手続き型プログラミングがどのようなものか知っているようです。

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++などの多くの言語は複数のパラダイムをサポートしていることに注意することが重要です。特定のパラダイムをサポートしているといっても、そのパラダイムのすべての機能をサポートしているとは限らないことも事実です。特定のパラダイムに必要な機能については多くの意見の相違があることは言うまでもありません。

34
Dima

プログラミング言語には、多くのほぼ直交する機能があります。最も顕著なものは、彼らがサポートするパラダイムにあります。 ウィキペディアの記事 はパラダイムを網羅しています。最も重要なパラダイムはおそらくこれらです:

  • 手続き型/構造化
  • 機能的
  • オブジェクト指向
  • イベント駆動型およびアスペクト指向
  • ジェネリック
  • 論理

しかし、言語は他の点でも異なります。

  • タイピングシステム(動的タイプと静的タイプ、強いタイプと弱いタイプ)
  • ビルドプロセスとランタイム環境(解釈済み、バイトコードコンパイル済み、完全にコンパイル済み)
  • メモリ管理(C/C++のような手動、Javaのような必須の自動ガベージコレクション、DのようなオプションのGCなど)
  • 評価の規律(熱心な対怠惰な;ほとんどの言語はデフォルトで熱心ですが、多くは遅延コンストラクトを提供します)
  • スコーピングルール(PHP、JavaScript、Cでスコープがどのように機能するか、他の点では構文が非常に似ている3つの言語を比較してください)
11
tdammers

現在流行しているいくつかの異なるプログラミングパラダイムがあります:

  • オブジェクト指向-VB.NET、C#、Javaこのカテゴリに分類されます。コードは、動作と関連データを持ち、メッセージを渡すことによって互いに通信するオブジェクトの周囲に配置されます。
  • 機能的-Haskel、Scheme、LISP、F#はこのカテゴリに分類されます。副作用のない純粋な関数。数学のように関数を考えてください。多くの場合、その構造を通じて言語自体を拡張できます。
2
Oded

ほとんどの主流言語は、命令型プログラミング、関数型プログラミング、宣言型プログラミングの側面を組み合わせています。ニッチ言語は、よりエキゾチックであるか、または何らかの理由で汎用プログラミングには適さない興味深い新しいアイデアを導入する傾向があります。一部の例は、決して網羅的ではありません。

  • Spreadsheet Languages(Excel、Google Forms):表形式のデータを処理するように設計されています。
  • 配列言語(APL、J):多次元配列をすばやく処理するように設計されています。 Jでは、(+/ % #)&.:*:は、配列のRMSを計算します。簡潔であることが有名で、判読できないことで有名です。
  • オートメーション言語(AutoHotkey、Bash):フォームへの入力、ファイルのアップロードなどの一般的なタスクを合理化するように設計されています。
0
Hovercouch

Prologロジックプログラミング言語であり、比較的簡単に始めることができます。手続き型プログラミングとはまったく異なる考え方が必要であるため、脳を伸ばそうとするときに検討することをお勧めします。

大学に行くなら、プログラミング言語のコースを受講してください。さまざまなタイプのプログラミング言語を紹介し、それらの用途に最適です。

0
c_maker