이 질문은 의미론
이 데이터를 주면 12
유형은 무엇입니까? 당신은 확실하게 알 방법이 없습니다. 정수 일 수 있습니다-float 일 수 있습니다-문자열 일 수 있습니다. 그런 의미에서 그것은 매우 "유형화되지 않은"데이터입니다.
이 데이터와 "임의의 언어와는 다른"임의의 데이터에 "추가", "빼기"및 "연결"과 같은 연산자를 사용할 수있는 가상의 언어를 제공하는 경우 (예 : 가상의 언어와는) "유형"은 다소 관련이 없습니다 (예 : : 아마 add(12, a)
수확량 109
에 12
더해a
).
C에 대해 잠시 이야기 해 봅시다. C를 사용하면 임의의 데이터로 원하는 것을 수행 할 수 있습니다. 두 개의 함수를 사용하는 경우 uint
원하는 것을 캐스팅하고 전달할 수 있으며 값은 단순히 uint
s 로 해석됩니다 . 그런 의미에서 C는 "유형화되지 않은"것입니다 (그러한 방식으로 처리하는 경우).
그러나-그리고 Brendan의 요점에 도달 12
- "내 나이가 " 라고 말하면 12
유형이 있습니다-적어도 우리는 그것이 숫자라는 것을 압니다. 상황 에 따라 언어에 관계없이 모든 유형이 있습니다.
이것이 내가 처음에 말한 이유입니다. 귀하의 질문은 의미론 중 하나입니다. "untyped"의 의미는 무엇입니까? 브렌든은 "정적 유형 없음"이라고 말했을 때 머리에 못을 박았다고 생각합니다. 인간은 자연스럽게 사물을 유형으로 분류합니다. 우리는 자동차와 원숭이 사이에 근본적으로 다른 것이 있다는 것을 직관적으로 알고 있습니다.
처음에 나의 예제로 돌아 가기- "유형에 신경 쓰지 않는"언어는 구문 오류를 일으키지 않고 "연령"과 "이름"을 "추가"할 수 있지만 ... 논리적으로 건전한 작업을 의미하지는 않습니다.
자바 스크립트를 사용하면 "오류"를 고려하지 않고 모든 종류의 미친 일을 할 수 있습니다. 그렇다고해서 논리적으로 건전한 것은 아닙니다. 개발자가 해결해야 할 것입니다.
컴파일 / 빌드 / 통역 시간에 유형 안전을 강제하지 않는 시스템 / 언어가 "유형화되지 않은"또는 "동적 유형화 된"입니까?
의미론.
편집하다
어떤 사람들은 "예,하지만 자바 스크립트에는"유형 "이 있습니다.
다른 사람의 답변에 대한 나의 의견에서 나는 말했다 :
Javascript에서는 "Monkeys"로 구축 한 객체와 "Humans"로 구축 한 객체를 가질 수 있으며 일부 기능은 "Humans"에서만 작동하고 일부 기능은 "Monkeys"에서만 작동하도록 설계 할 수 있습니다. "팔을 가진 것"에 관한 다른 사람들. 언어에 대한 언급이 있든 없든, "팔이있는 것"과 같은 객체 범주는 Javascript ( "동적")와 마찬가지로 어셈블리 ( "유형화되지 않은")와 관련이 없습니다. 그것은 모두 논리적 무결성의 문제입니다. 유일한 오류는 그 방법에 적합하지 않은 것을 사용하는 것입니다.
따라서 Javascript가 내부적으로 "유형의 개념"을 가지고 있고 따라서 "동적 유형"이라고 생각하고 이것이 "유형화되지 않은 시스템과는 분명히 다르다"고 생각한다면-위의 예에서 유형 "내부적으로 실제로 관련이 없습니다.
예를 들어 C #으로 동일한 작업을 수행하려면 인터페이스라는 인터페이스가 필요합니다. ICreatureWithArms
또는 이와 유사한 . Javascript에서는 그렇지 않습니다. C 또는 ASM에서는 그렇지 않습니다.
자바 스크립트가 "유형"에 대해 전혀 이해하고 있는지의 여부는 관련이 없습니다.