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