このすみ技術ろぐ

とあるWebエンジニアが、技術や趣味について書くブログです。

漸進的型付けというプログラミング言語

世の中には、静的型付けと動的型付けのプログラミング言語の他に、漸進的型付けというプログラミング言語があります。 オライリーの『プログラミングTypeScript』を読んでいたら登場したので、記事にしてみることにしました。

静的型付けのプログラミング言語

静的型付けのプログラミング言語では、変数の型や関数の引数が、あらかじめ宣言された型に固定されます。 次の例はC言語です。

# C言語は静的型付けです。
int x = 5;

int add(int num1, int num2)
{
    return num1 + num2;
}

静的型付けでは型があらかじめ宣言されているため、たとえばコンパイル型のプログラミング言語では、コンパイル段階で型の不一致によるエラーを検出できます。

動的型付けのプログラミング言語

動的型付けのプログラミング言語では、基本的に変数の型は固定されません。 次の例はRubyです。

# Rubyは静的型付けです。
say = "Hello world"

def add(num1, num2)
  return num1 + num2
end

動的型付けでは自由度の高さや、型を宣言する必要がないためコードの記述量が抑えられるといった特徴があります。

漸進的型付けのプログラミング言語

それでは次に、漸進的型付けのプログラミング言語です。 次の例はPHPです。

<?php
// PHPは漸進的型付けです

// 動的型付け言語として関数を定義する
function add1($num1, $num2) {
    return $num1 + $num2;
}

// 静的型付け言語として関数を定義する
function add2(int $num1, int $num2) {
    return $num1 + $num2;
}

PHPの例を見るとわかるように、斬新的片付けのプログラミング言語は静的型付けと動的型付けの特徴を併せ持つ、ハイブリットなプログラミング言語であることがわかります。

なぜ斬新的型付けが必要なのか

本記事では斬新的型付けの代表例として、PHPとTypeScriptを取り上げてみます。 ここで両者に共通していることは、型を定義するという概念が、後から取り入れられた点です。

  • PHPはもともと型を明示的に宣言しない言語だったため、型を宣言するPHPと型を宣言しないPHPが混在するから
  • TypeScriptはJavaScriptからの移行を想定しているが、元となるJavaScriptが動的型付けであり、移行期には型を宣言しない書き方が起こりえるから

PHPとTypeScriptでは、動的型付けから静的型付けへの移行を想定するために、斬新的型付けという手法を採用していることがわかります。

なお、TypeScriptは設定次第で、型付けを緩く制限することも厳しく制限することも可能です。 PHPも同じく、弱い型宣言と強い型宣言があります。

さいごに

斬新的型付けのプログラミング言語は、静的型付けと動的型付けの特徴を併せ持ちます。 そのため、どちらのプログラミングスタイルを採用しても、プログラムを記述できます。

しかしながら型を宣言することは、エラーの早期発見の他にも、プログラムがわかりやすくなるなど多種多様なメリットがあります。 動的な書き方が許容される斬新的型付けのプログラミング言語であったとしても、静的型付けのプログラミング言語と同じように扱い、型に厳格なコーディングを行うことを強く推奨します。

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

  • 作者:Boris Cherny
  • 発売日: 2020/03/16
  • メディア: 単行本(ソフトカバー)