この質問はすべてセマンティクスについてです
このデータを提供すると、12
タイプは何ですか?確実に知る方法はありません。整数かもしれません-浮動小数点かもしれません-文字列かもしれません その意味で、それは非常に「型なし」データです。
このデータとその他の任意のデータに対して「追加」、「減算」、「連結」などの演算子を使用できる架空の言語を指定した場合、「タイプ」は(私の架空の言語とは)多少無関係です(例:おそらく、add(12, a)
利回り109
である12
プラスのASCII値a
)。
Cについて少し話しましょう。Cを使用すると、任意のデータを使って、好きなことを何でもできます。2つuint
のs を取る関数を使用している場合-キャストして必要なものを渡すことができます-値は単にuint
s として解釈されます。その意味で、Cは「型なし」です(そのように扱う場合)。
ただし、-そしてブレンダンの要点に-「私の年齢は12
」と言った場合12
、型があります-少なくとも、それが数値であることはわかっています。コンテキストでは、言語に関係なく、すべてにタイプがあります。
これが私が最初に言った理由です-あなたの質問は意味論の一つです。「型なし」の意味は何ですか?ブレンダンが「静的型なし」と言ったとき、頭に釘を打ったと思います。人間は自然に物事をタイプに分類します。私たちは、車とサルの間には根本的に異なる何かがあることを直感的に知っています-それらを区別するように教えられることはありません。
最初に私の例に戻ると、「型を気にしない」(それ自体)言語では、構文エラーを生成せずに「年齢」と「名前」を「追加」できるかもしれません...論理的に健全な操作であるという意味ではありません。
JavaScriptを使用すると、「エラー」を考慮せずにあらゆる種類のクレイジーなことを実行できます。それはあなたがしていることが論理的に健全であるという意味ではありません。それは開発者がうまくいくためのものです。
コンパイル/ビルド/解釈時に型の安全性を強制しないシステム/言語は、「型なし」または「動的に型付き」ですか?
セマンティクス。
編集
「ええ、Javascriptにはいくつかの「タイプ」がある」という人がいるので、ここに何かを追加したかったのです。
他の誰かの答えに関する私のコメントで私は言った:
JavaScriptでは、「猿」になるように作成したオブジェクトと「人間」になるように作成したオブジェクトを使用でき、一部の機能は「人間」だけで動作するように設計でき、その他の機能は「猿」だけで動作するように設計できます。さらに、「武器のあるもの」のみに関するものもあります。言語がこれまでに言われたことがあるかどうかにかかわらず、「武器を持つもの」などのオブジェクトのカテゴリは、Javascript(「動的」)と同様にアセンブリ(「型なし」)とは無関係です。それはすべて論理的な整合性の問題です-唯一のエラーは、その方法に対応していないものを使用することです。
したがって、Javascriptが内部的に「型の概念」を持っていると見なし、したがって「動的型」を持っていると考え、これが「型のないシステムとは明らかに異なる」と考える場合、上記の例から、内部にある型」は本当に無関係です。
たとえば、C#で同じ操作を実行するには、呼び出されるインターフェイスICreatureWithArms
または類似のインターフェイスが必要です。JavaScriptではそうではない-CやASMではそうではない。
明らかに、JavaScriptが「タイプ」をまったく理解しているかどうかは関係ありません。