プログラミング言語入門:定義・種類・パラダイム別の特徴と例
内容
· 1 プログラミング言語の種類
o 1.1 高レベル対低レベル
o 1.2 宣言的プログラミングとインパーティブプログラミング
o 1.3 機能的対手続き的
o 1.4 スタックベース
o 1.5 オブジェクト指向
o 1.6 流れ重視
· 2つのルール
· 3 オブジェクト指向プログラミング
· 4つの例
o 4.1 Visual Basicの例
o 4.2 Pythonの例
o 4.3 C#の例
o 4.4 Haskellの例
· 5 関連ページ
プログラミング言語とは、コンピュータが動作するために何をすべきかをコンピュータに指示するための記述言語の一種です。プログラミング言語は、すべてのコンピュータプログラムやコンピュータソフトウェアを作るために使用されています。プログラミング言語とは、コンピュータが何かをするために従う命令セットのようなものです。
プログラマーは、プログラムを作成するためにプログラミング言語でソースコードのテキストを書きます。通常、プログラミング言語は、人間が読みやすいように、コマンドの一部に実際の言葉を使用しています。多くのプログラミング言語では、通常の言語と同じように句読点が使われています。現在、多くのプログラムは「コンパイル」されています。これは、コンピュータがソースコードを別の言語(アセンブリ言語や機械語など)に翻訳することを意味します。
コンピュータのプログラムは非常に慎重に書かれなければなりません。プログラマがミスをしたり、プログラマが設計していないことをプログラムが行おうとしたりすると、プログラムは「クラッシュ」したり、動作を停止したりすることがあります。コードの書き方に問題がある場合、これを「バグ」と呼びます。非常に小さなミスが、非常に大きな問題を引き起こすことがあります。
プログラミング言語の定義(補足)
上記の基本説明を補足すると、プログラミング言語は次の要素で成り立っています:
- 構文(シンタックス):文法規則。どのように命令を書くかの形式。
- 意味論(セマンティクス):書いた命令が実行時にどのような意味を持つか。
- 実行モデル:コンパイルして機械語にするか、インタプリタで逐次実行するかなど。
- 標準ライブラリ:文字列処理や入出力など、よく使う機能の集合。
プログラミング言語の種類(レベルと分類)
高レベル言語は人間にとって読みやすく、生産性が高い設計がされています(例:Python、Java、C#)。低レベル言語はハードウェアに近く、細かい制御ができる反面、記述が難しい(例:アセンブリ、機械語)。
主要なプログラミングパラダイム
言語は設計思想によりさまざまな「パラダイム(考え方)」に分類されます。代表的なものを挙げます。
- 命令型(インパラティブ):プログラムがどのように計算を進めるか(ステップ)を記述する。C、Javaなど。
- 宣言型:何を達成したいかを記述し、実行方法は抽象化する。SQLやHTML(宣言的な構造)、一部の関数型言語。
- 手続き型(プロシージャル):関数やサブルーチンで処理を構造化する、CやPascalなど。
- 関数型:副作用を避け、関数の合成でプログラムを作る。Haskell、Erlang、関数的機能を持つScalaやJavaScriptなど。
- オブジェクト指向(OOP):データとそれに対する操作をオブジェクトとしてまとめる。Java、C#、Python(OOP対応)など。
- スタックベース:実行時にスタックを中心に操作する言語設計(例:Forth、PostScriptのような言語)。
- データフロー/流れ重視:データの流れやパイプラインを中心に記述する考え方(例:Unixのパイプ、流れを意識した言語やフレームワーク)。
2つのルール(初心者が押さえるべき基本)
ここでは「2つのルール」として、言語を使う上で特に重要なポイントを示します:
- 文法(シンタックス)を守る:セミコロン、インデント、括弧など言語ごとの規則を正しく使わないとコンパイル/実行時エラーになります。
- 意味(セマンティクス)を理解する:例えば「=」が代入で「==」が比較になるなど、言語固有の意味を誤解するとバグの原因になります。
オブジェクト指向プログラミング(詳細)
オブジェクト指向はソフトウェアを「オブジェクト(データ+操作)」の集合として設計します。主要な概念:
- クラスとオブジェクト:クラスは設計図、オブジェクトはその実体。
- 継承:既存のクラスを基に機能を拡張する。
- カプセル化:データとそれに対する操作を外部から隠すことで安全性を高める。
- ポリモーフィズム(多態性):同じ操作名で異なる実装を持たせる。
利点としては設計の整理、再利用性、拡張性が挙げられます。欠点は過剰設計や性能面でのオーバーヘッドになる場合がある点です。
例:代表的な言語と簡単なコード
Visual Basic(簡単な関数)
Function Add(a As Integer, b As Integer) As Integer Return a + b End Function Sub Main() Dim result As Integer = Add(2, 3) MsgBox("結果は " & result) End Sub
Python(シンプルで読みやすい)
def add(a, b): return a + b if __name__ == "__main__": print(add(2, 3)) # 出力: 5
C#(オブジェクト指向の例)
using System; class Calculator { public int Add(int a, int b) { return a + b; } } class Program { static void Main() { var calc = new Calculator(); Console.WriteLine(calc.Add(2, 3)); // 出力: 5 } }
Haskell(関数型の記述)
add :: Int -> Int -> Int add x y = x + y main :: IO () main = print (add 2 3) -- 出力: 5
まとめと学び方のヒント
- まずは1つの言語を深く学ぶと、他言語への理解が早まります(基本概念は共通することが多い)。
- 実際に小さなプロジェクトを作ってみる(電卓、TODOアプリなど)と理解が定着します。
- 言語の公式ドキュメントや標準ライブラリに慣れることが重要です。
さらに詳しい情報は関連ページや各言語の公式ドキュメントを参照してください。
プログラミング言語の種類
プログラミング言語には多くの種類があります。ほとんどのプログラミング言語は1つのタイプだけでは追随しないので、言語ごとにタイプを割り当てるのは難しい。それぞれのタイプの例は、そのタイプの中で最もよく知られている例であるため、以下の各セクションでは、それぞれのタイプの例を示しています。
高レベル対低レベル
| この項ではさらに情報を必要としています。(2018年8月) |
高レベルのプログラミング言語は、低レベルのプログラミング言語に比べてハードウェアに関する知識を必要としません。高レベルプログラミング言語は、ソースコードを低レベルプログラミング言語に変換するためのインタプリタを必要とします。
宣言的プログラミングと命令的プログラミング
宣言的プログラミング言語は「問題」を記述しますが、通常、問題がどのように解決されるべきかは述べません。問題の記述には論理が使われ、問題を「解決」することは、論理的公理のシステムを自動的に証明するように見えることが多い。このようなプログラミング言語の例としては、Prolog、XSLT、LISP、SQLなどがあります。
インペレーティブプログラミング言語は、状態変化のシステムを記述します。開始時には、プログラムは特定の状態にあり、コンピュータにはアクションを実行するために従うべきステップが与えられています。ステップに従うことで、プログラムは「状態を変える」ことになります。
一般的には、宣言型プログラミング言語の方が安全で短いです。反復的プログラミング言語は、より使いやすいため、より一般的になっています。
機能的対手続き的
関数型プログラミングは、数学の関数のようなプログラミングを見ています。プログラムは、何らかの情報とともに入力を受け取り、その情報を使って出力を作成します。間に状態を持たず、計算に関係のないものを変更することもありません。
プロシージャルプログラムは、ステップや状態変化のセットを指定または記述します。
スタックベース
スタックベースの言語は、プログラムのメモリの一部をカードのスタックのように見ています。スタックでできることはほとんどありません。データ項目をスタックの一番上に置くことができます。この操作は一般に「プッシュ」と呼ばれています。データ項目をスタックの一番上から削除することができます。この操作は一般に「ポップ」と呼ばれています。スタックの一番上にある項目を削除せずに見ることができます。これを「のぞき」といいます。
プログラムを「push 5; push 3; add; pop;」と書くと、スタックの一番上に5を置き、5の上に3を置き、一番上の2つの値を足して(3 + 5 = 8)、3と5を8に置き換えて、一番上の(8)を出力します。スタックベースのプログラミング言語の例としては、PostscriptやForthなどがあります。
オブジェクト指向
オブジェクト指向プログラミング言語では、データを一つの単位に変えるデータや関数を配置します。この単位を「オブジェクト」と呼びます。オブジェクトは相互に作用し、別のオブジェクトのデータを変更することができます。これは通常、カプセル化や情報の隠蔽と呼ばれています。最近のプログラミング言語のほとんどはオブジェクト指向であるか、少なくともこのスタイルのプログラミングを可能にしています。Java、Python、Ruby、C++、C#などのC言語がその例です。
流れを重視した
フロー指向プログラミングは、異なるコンポーネントを接続するようにプログラミングを見ています。これらのコンポーネントはメッセージを前後に送ります。単一のコンポーネントは、内部的に変更する必要がなく、異なる「プログラム」の一部になることができます。
ルール
すべてのプログラミング言語には、できることとできないことについてのルールがあります。これらには次のようなものがあります。
- 正しい数字(数字の種類、数字の大きさや小ささなど
- 言葉(予約語、大文字小文字の区別
- プログラミング言語でできることの限界
ほとんどの言語には、ソースコードの書き方のルールを定義する公式の標準があります。プログラミング言語の中には、2つ以上の標準を持っているものもあります。これは、新しい標準が古い標準に取って代わるときに起こることがあります。例えば、Perl 5 標準は 1993 年に Perl 4 に取って代わられました。これは、2人の人が同時に2つの標準を作ったために起こることがあります。例えば、APLにはいくつかの標準があります。
オブジェクト指向プログラミング
オブジェクト指向プログラミング(OOPと短縮されることもあります)は、プログラムのすべての部分がオブジェクトであるプログラミングの一形態です。オブジェクトとは、同じ構造を持つメモリの断片であり、何度も繰り返し使用することができます。銀行口座、ビットマップ、ビデオゲームのヒーローなどは、すべてプログラム内のオブジェクトになります。オブジェクトは、プロパティ(オブジェクトが保存する情報の断片)とメソッド(オブジェクトができること)で構成されています。Dog オブジェクトは、身長や hairColor などのプロパティを持っているかもしれません。メソッドには bark() や wagTail() などがあります。
すべてのオブジェクトは、クラスと呼ばれるテンプレートから作成されます。クラスは、オブジェクトを作るための型と考えることができます。クラスは、そのオブジェクトが持つすべてのプロパティとメソッドを定義します。クラスから作成されたオブジェクトは、そのクラスのインスタンスと呼ばれます。クラスは他のクラスを拡張することができます。つまり、そのクラスのすべてのプロパティとメソッドを受け取り、独自のメソッドを追加することができます。
プログラミング言語では、あるクラスがどのように見えるかの例を紹介します。
class Dog extends Mammal { //これらはプロパティです。 String breed = "Collie" String type = "Herding Dog" // これらはメソッド です void wagTail(){ // 多少の毛づくろいをします } bark(){ //ここで void bark(){ // ここで毛づくろいをします } //ここで毛づくろいをします}DogクラスはMammalクラスを継承しているので、すべての犬は毛の長さなどの哺乳類のプロパティと、eat()やsleep()のようなメソッドを持っています。
オブジェクト指向プログラミングは、Java、C#、Objective-C、C++、Python、Ruby、Javascript、ActionScriptなど、今日最も人気のあるプログラミング言語の多くで使用されています。
例としては、以下のようなものがあります。
ビジュアルベーシックの例
ここではVisual Basicで書かれた簡単なプログラムを紹介します。
このプログラムは、ユーザーに年齢を尋ね、ユーザーが入力したものに基づいて応答します。ユーザーが何か数字以外のものを入力した場合は、そのように表示されます。ユーザーがゼロ未満の数字を入力した場合は、そのように表示されます。ユーザーが100歳以上と入力した場合は、"それは古い!"と表示されます。ユーザーが正しい年齢を入力した場合、プログラムはユーザーに彼または彼女が何歳であるかを返します。
Pythonの例
上のプログラムと同じことをPythonで行うプログラムを紹介します。
C#の例
上のプログラムと同じですが、C#で。
Haskellの例
またしても同じことですが、Haskellで。
関連ページ
- プログラミング言語一覧
- プログラマー
- コンパイラ
- コンピュータプログラミング
質問と回答
Q:プログラミング言語とは何ですか?
A:プログラミング言語とは、コンピュータに何をすべきかを指示する記述言語の一種です。コンピュータが何かをするために従う命令のセットのようなもので、人間が理解しやすいように、命令の一部に実際の言葉を使うのが普通です。
Q:プログラミング言語の例にはどのようなものがありますか?
A:プログラミング言語の例としては、Python、Ruby、Java、JavaScript、C、C++、C#などがあります。
Q:プログラミング言語では、どのようにプログラムを書くのですか?
A:プログラムは、プログラミング言語のソースコードにテキストを記述することで作成されます。通常、句読点も使用します。
Q:プログラミング言語で書かれたプログラムはどうなるのですか?
A:プログラミング言語で書かれたプログラムは、コンパイルされなければなりません。これは、コンピュータがソースコードを、コンピュータが読むことができるけれども人が読むのはずっと難しい別の言語(アセンブリやマシン語など)に変更したり翻訳したりすることを意味します。
Q:プログラムを書くときに間違いがあるとどうなるのでしょうか?
A:プログラムを書くときに間違いがあったり、プログラムが設計されていないことをしようとしたりすると、プログラムが動かなくなることがあり、これを「クラッシュ」と呼びます。これは「クラッシュ」と呼ばれるもので、コードの書き方が原因で起こる場合は「バグ」と呼ばれます。小さな間違いでも、大きな問題を引き起こす可能性があるのです。
Q:なぜコンピュータのプログラムは慎重に書かなければならないのですか?
A:コンピュータのプログラムは慎重に書かなければなりません。小さな間違いでも大きな問題を引き起こし、クラッシュやバグにつながる可能性があるからです。