コンパイラ言語・インタプリンタ言語 動的型付けと静的型付け。プロトタイプベースとクラスベース
前提
コンピュータは、ソースコード言語で書いたままの状態ではプログラムを理解できない。
必ずコンピュータが理解できる"機械語"に変換してから読み込む。
インタプリンタ言語(Python,Ruby)
コードを実行する際に1行ずつ機械語に翻訳していく言語。
メリット
プログラムをすぐに実行できる
実行がうまくいかなくてもすぐにデバックできる
デメリット
実行速度が遅い
->1行1行読み込むので、その分実行速度は劣る。
コンパイラ言語(Swift)
全てのコードを機械語に翻訳した後一気に実行する言語。
メリット
実行速度が速い
デメリット
コンパイルするまでエラーを把握できない
-> 1行1行機械語に翻訳するインタプリタ言語の場合は、機械語に翻訳できないエラーが発生した時点で調査し修正することができる。
しかしコンパイラ言語の場合は、全て翻訳して一気に実行するまでどこでエラーが発生したか把握できない。
とはいえSwiftも走らせる前からエラーが出る。なんならRubyは走らせないと型エラーがわからないけれども、Swiftは走らせなくてもエラーがわかる。これはどういうことなのか。
静的型付き言語
Rubyは動的。Swiftは静的らしい。
-
Swiftは静的解析というものをしているらしい。
-
これはコードを実行せずに行われる検証であり、コーディングルールを踏まえ違反している箇所を指摘している。
-
ただこれは程度問題であり、Rubyでも変数間違いなどは適宜指摘してくれる。
-
はっきり分かれるわけではなく、グラデーションのある概念として捉えたほうが良さそう。
-
静的型付においては、予めプログラマが変数や関数の引数。返り値に対してどのようにデータを扱うかを指定する、つまり「型」を決めて扱うことを「静的型付け」という。
-
コンパイラやインタプリンタがプログラマによって書かれたプログラムコードを実行・解釈し、変数や関数の引数、返り値について、実行時に形を想定して扱うことを動的型付けという。
-
プロトタイプベースとは、オブジェクト指向プログラミング言語の一種で、変数やメソッドをクラスに依存せず追加できるようにしたもののこと。
-
クラスベースは変数とメソッドをクラス単位で定義できるようにしたもの。Swiftはこれやな。
代表的なプロトタイプベースの言語はJavaScriptだが、2015年にclass構文が導入され、使用できるようになったらしい。
とはいえ、内部的な仕組みはプロトタイプベースになっているらしい。
プロトタイプベース言語の仕組み
- オブジェクトを生成する際、その元となるオブジェクトを指定する。
- 標準組み込みオブジェクトであるObjectをもとに新たなオブジェクトを生成する場合は以下。
let user = new Object({username: "yuki", age: 25})
関数をもとに新たなオブジェクトを生成することも可能。
よくわからんな…