プログラミング言語の各タイプを学ぶ


24

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

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

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


8
言語を分類する方法は無数に重複していることに注意してください。最も一般的なのはプログラミングパラダイムですが、それでも大きな違いと小さな違いがあり、多くの完全に独立した軸があり、多くの言語はいくつかのパラダイムに分類されます。

1
カテゴリを忘れてしまいます-もしあなたが言語から学ぶことに本当に興味があるなら、LispとScalaの両方をお勧めします。もしあなたがこれらの2つを扱うことができれば、あなたは多くの分野をカバーしました。
ビルK

3
Peter Norvigのアドバイス:少なくとも半ダースのプログラミング言語を学んでください。クラスの抽象化をサポートする言語(JavaやC ++など)、機能の抽象化をサポートする言語(LispやMLなど)、構文の抽象化をサポートする言語(Lispなど)、宣言仕様をサポートする言語(PrologやC ++テンプレートなど)、これは、コルーチン(アイコンやスキームなど)をサポートし、コルーチン(サイザルなど)をサポートします。
legends2k 14

回答:


34

用語は標準化にはほど遠いものの、一般的な方法は、主要なプログラミングパラダイムを次のように分類することです。

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

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

機能的な言語機能はファーストクラスのオブジェクトとして扱われます。つまり、関数を引数として別の関数に渡すことができます。または、関数が別の関数を返す場合があります。関数型パラダイムはラムダ計算に基づいており、関数型言語の例は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 ++などの多くの言語が複数のパラダイムをサポートしていることに注意することが重要です。言語が特定のパラダイムをサポートすると言われている場合でも、すべてのパラダイムの機能をサポートしているわけではないことも事実です。特定のパラダイムにどの機能が必要であるかについては多くの意見の相違があることは言うまでもありません。


2
SQLはどのカテゴリに分類されますか?
カーク

@KirkKuykendall SQLは、スペシャリスト、つまり「小さな」言語になります。
ケビンLacquement

17
SQLは宣言型言語です。あなたはそれをあなたが望むものを伝え、それを得る方法を見つけ出します。(Prologのような「論理」言語は宣言型言語の異なるサブセットです)
Izkata

3
答えをより完全にするために、手続きの説明がありますか?
deworde

3
@Dimaニース要約。ただし、比較的些細な点は、「ジェネリックプログラミング」はC ++でのテンプレートの使用によるものではなく、Haskellなどの関数型言語でも非常に頻繁に使用されていることです。
アンドレスF.

11

プログラミング言語には、主に直交する機能がいくつかあります。最も顕著なものは、彼らがサポートするパラダイムにあります。Wikipediaの記事は徹底的パラダイムをカバー。最も重要なパラダイムはおそらくこれらです:

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

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

  • 入力システム(動的型と静的型、および強力型と弱型)
  • ビルドプロセスとランタイム環境(解釈済み、バイトコードコンパイル済み、完全にコンパイル済み)
  • メモリ管理(C / C ++のようなマニュアル、Javaのような必須の自動ガベージコレクション、DのようなオプションのGCなど)
  • 評価の規律(熱心と怠け者。ほとんどの言語はデフォルトで熱心ですが、多くの言語は怠constructな構成を提供します)
  • スコープ規則(PHP、Javascript、Cの3つの言語でスコープがどのように機能するかを比較してください。それ以外は構文の点で非常に似ています)

2

現在流行しているプログラミングパラダイムはいくつかあります。

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

これらは他の唯一のタイプですか?
ダイナミック

@ perl.j-いいえ、しかしこれらは最近広く使用されている主なものです。ウィキペディア- プログラミングパラダイムを参照してください。
-Oded

@ perl.jには、ForthやPostscriptなどのスタックベースもあります。ロジック:プロローグなど。
ジェッティ

2
そして、0番目のタイプはCです;)
yati sagade

本当の問題は、ほとんどのプログラミング問題を効果的にコーディングするために開発者がどれだけ必要とするかです。
ジェフ

0

Prolog論理プログラミング言語であり、比較的簡単に使い始めることができます。手続き型プログラミングとはまったく異なる考え方が必要であるため、脳を伸ばそうとするときは探索するのが良いでしょう。

大学に行く場合は、プログラミング言語のコースを受講する必要があります。さまざまな種類のプログラミング言語とそれらの最適な用途を紹介することを目的としています。


0

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

  • スプレッドシート言語(Excel、Googleフォーム):表形式のデータを処理するように設計されています。
  • 配列言語(APL、J):多次元配列を迅速に処理するように設計されています。Jでは(+/ % #)&.:*:、配列のRMSを計算します。簡潔であることで有名で、読めないことで有名です。
  • オートメーション言語(AutoHotkey、Bash):フォームへの入力、ファイルのアップロードなどの一般的なタスクを合理化するように設計されています
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.