FFFT

主にwebプロダクト開発に関連する話をつらつらと

型って大事(強い型づけ、弱い型づけ)

強い型づけと弱い型づけの話。

 

強い型づけはプログラムのコンパイル時にエラーを検知してくれる。

Javaやaltjava(scala, kotlinとか)、後はgolangなどの言語ですね。

 

対して弱い型づけはプログラムの実行時にエラーがはじめて検知される。

Rubyが代表的な言語でしょうか。

 

弱い型づけ言語は変数の宣言、メソッドの定義時に型を指定する必要がなく、コードがシンプルになって良いですがその分エラーの混入率が上がります。

 

たとえば、数値型を引数としないと動かないメソッドにメソッドの呼び出し元が文字列型を渡してしまい、エラーが発生

 

というケースを考えたときに弱い型づけ言語だとユーザーが画面から触って(実行して)はじめてそこにエラーがあることに気づきます。

 

強い型づけであればコンパイル時にエラーとなってユーザーがエラーを踏む前に開発者が発見することができます。

 

ユーザーがエラーを踏む前に、というところが重要かなと。

 

テスト書けばいいじゃーん、というのはあるかと思いますがそもそもテスト書くまでもなく排除できるエラーは排除すべき。

ユニットテストだとメソッドの呼び出し元が渡す値のパターンに想定漏れが起きる可能性もあり、結果バグを生む可能性もある。

何より型のためのテストを書くのかと。

 

「型はコンパイラが指摘してくれる」ってわかっていてコードを書くと気にして書かなくてはいけないものが減って、結果コードを書くスピードも上がります。

 

ちなみにRubyが嫌いという話ではありません笑

普通に使ってます。

作るプロダクトの規模と性質によるところかなと。

ある程度大規模なプロダクトを作ろうと思うと強い型づけ言語を選びたいと思います。