115
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プログラミング言語を手続き型と関数型、静的型付けと動的型付けで4象限に分類する

Last updated at Posted at 2021-06-01

4象限.png

これは何?

私が所属しているIncrementsではエンジニア採用担当者向けにエンジニアリングに関するお役立ち資料を作成しております。

非エンジニアの採用担当者とエンジニアのコミュニケーションをより良いものにするため、採用担当者向けに作成しています。
今回作成したものが、Qiita内に同内容の記事が見当たらなかったため、私が資料を作成するに当たり学んだこと投稿します。

※本資料作成時の対象読者は採用担当者のため、非エンジニアにもわかりやすく理解をしてもらうため、表現に語弊を含む場合があります。気になる箇所があればコメント、編集リクエストをいただけると幸いです。

#目次
1.手続き型言語とは?
2.関数型言語とは?
3.静的型付け言語とは?
4.動的型付け言語とは?
5.プログラミング言語の4象限
6. まとめ
7. 参考記事

#1. 手続き型言語とは?
手続き型言語とはコンピュータに命令したい処理を順番通りに記述する言語です。
例えば卵焼きを作るという結果を表現する際に、以下の用に手順を順番通りに記載するようなものです。

例(Ruby)
egg = Egg.new
crack(egg) # 卵を割る
mix(egg) # 卵を混ぜる
harden(egg) # 卵を焼く
egg # 卵焼きになっている

実世界の考え方に似ているため、コードが記述しやすいという特徴があります。
代表的なものとしてはJavaやRubyなどがあります。

#2. 関数型言語とは?
関数型言語とはコンピュータに命令したい処理に関数を用いた記述を推奨された言語です。
ここでは関数についての詳細な説明はしないため、例を参考に大枠を掴んでいただければと思います。
例えば、卵焼きを作る際に以下のような考え方をします。

例(Elixir)
omlet = egg |> crack |> mix |> harden # 卵から卵焼きを生み出す
# omlet = harden(mix(crack(egg))) と同じ

手続き型言語を作業の命令だとすると、関数型言語は値の変換ルールをただ、定義して、それを組み立てて目的のものを生み出す、というような考え方に近いです。

関数という形で処理を定義するため、文脈として読みやすい、また、状態(&副作用)を持たないため不測挙動をプログラムがしにくい、という特徴があります
代表的なものとしてはHaskellやScalaなどがあります。

#3. 静的型付け言語とは?
静的型付け言語とは変数などのデータ型の宣言が必要なプログラミング言語です。

卵焼きを作る際の卵の選定時に、生卵でなければならない、という定義をするのが静的型付け言語です。

  1. 卵を割る(ここの卵は絶対に生卵)
  2. 卵を混ぜる
  3. 卵を焼く

データ型の宣言が必要なので、手間はその分かかりますが、リリースする前にエラーやバグに気づきやすいという特徴があります。
代表的なものとしてはSwiftやTypeScriptなどがあります。

#4. 動的型付け言語とは?
動的型付け言語とは変数などのデータ型の宣言が不要なプログラミング言語です。

卵焼きを作る際の卵の選定時に、生卵かゆで卵かなど卵の状態を定義をせずにプログラミング言語に判断を任せるのが動的型付け言語です。

  1. 卵を割る
  2. 卵を混ぜる
  3. 卵を焼く

データ型の判断はプログラミング言語に任せるため、仮にゆで卵が混入していたとしても割ってみるまで気づけないといったことが起こりえます。
データ型の宣言が不要なので、記述量が少なく済みますが、リリース後に実際にプログラムを実行してみないとエラーやバグに気づけないという特徴があります。
代表的なものとしてはJavaScriptやPythonなどがあります。

#5. プログラミング言語の4象限
各言語をこれまで説明した各分類に図示したものが以下
※本記事の読者がこよなく愛する言語が含まれてなければごめんなさい...

4象限.png

JavaScriptやSwift、TypeScriptは関数型プログラミングもできるため、境目に近いところに配置しています
※この言語はここじゃないよね?というご指摘があればコメントください!

関数型言語×動的型付け言語

  • Elixir
  • Erlang

関数型言語×静的型付け言語

  • Haskell
  • Scala
  • OCaml

手続き型言語×動的型付け言語

  • JavaScript
  • Python
  • Ruby
  • PHP
  • Julia
  • Perl

手続き型言語×静的型付け言語

  • Swift
  • TypeScript
  • Rust
  • Go
  • Objective-C
  • Kotlin
  • Java
  • C
  • C++
  • C#

#6. まとめ
この分類で以下のようなことが言えるのではないでしょうか?

  • 4象限の図を把握すると、同じ象限に属する言語同士は特徴が似ているためキャッチアップしやすい?
  • その次は横の象限、その次が縦の象限の順に広げていくとよさそう

特定の言語を習得し、つぎに何の言語を学ぼうかと考える際の参考になるかもしれません!

#7. 参考記事

115
81
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
115
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?