(가) 정적 입력의 장점을 인용 런타임에 도달 할 수 컴파일 타임에 잡힌 오류의 전체 클래스가 있다는 것입니다. 예를 들어 함수 매개 변수로 정적 유형의 클래스 또는 인터페이스가있는 경우 실수로 잘못된 유형의 객체를 전달하지 않을 것입니다 (명백하고 잘못된 캐스트가없는 경우).
물론 이것은 올바른 유형의 잘못된 객체를 전달하거나 올바른 기능을 부여했지만 잘못된 작업을 수행하는 인터페이스 구현을 중단시키지 않습니다. 또한, PHP/Python/etc 사용자가 컴파일 타임이나 런타임에 오류를 잡을지를 누가 신경 써야하는지 100 % 코드 커버리지가 있다면?
개인적으로, 정적 타이핑이있는 언어로 재미있는 시간을 보내고, 재미있는 시간은없는 언어로했습니다. 타이핑의 종류와 다른 두 언어 중 하나를 선택하지 않아도되고, 일반적으로 더 중요한 것들이 걱정할 필요가 없기 때문에 결정적인 문제는 거의 없습니다. 필자는 정적으로 형식화 된 언어를 사용할 때 의도적으로 "컴파일러에 기대기"라는 식의 코드를 작성하여 잘못된 방식으로 컴파일하지 않을 것입니다. 예를 들어 한 곳에서 변경을 수행 한 다음 수행 된 모든 컴파일 오류를 수정하고 클린 컴파일 할 때까지 반복하여 수행 할 수있는 특정 리팩터가 있습니다. 전체 테스트 스위트를 여러 번 실행하여 동일한 작업을 수행하는 것은별로 실용적이지 않을 수 있습니다.그러나 IDE가 다른 언어로 동일한 리팩터를 자동화하거나 테스트를 신속하게 완료하는 것은 전례가 아니므로 가능한 것이 아닌 편리 성의 문제입니다.
편리함과 코딩 스타일을 넘어서서 합법적 인 관심사를 가진 사람들은 코드의 정확성에 대한 공식적인 증명을 위해 노력하는 사람들입니다. 정적 유형 공제는 명시 적 정적 유형 지정이하는 대부분의 작업 (전부는 아님)을 수행 할 수 있고 키보드의 상당한 마모를 줄일 수 있다는 사실을 모르고 있습니다. 그래서 정적 타이핑을 사용하면 사람들이 쉽게 증명할 수있는 방식으로 코드를 작성해야합니다. 다음 POV에서 뭔가있을 수 있습니다. 나는 "if"라고 말합니다 : 모릅니다. 어쨌든 대부분의 사람들이 정적으로 형식화 된 코드를 증명하는 것처럼 아닙니다.
는 즉석에서 변수 유형을 변경하는 등은
나는 반신 반의하는 가치의 생각합니다. 그것은 (파이썬/장고) 같은 것을 할 항상 유혹 :
user = request.GET['username']
# do something with the string variable, "user"
user = get_object_or_404(User,user)
# do something with the User object variable, "user"
을하지만 실제로, 같은 이름은 함수 내에서 다른 일에 사용되어야 하는가? 아마도. 아마도 그렇지 않습니다. "재사용", 예를 들어, 정적으로 입력 된 언어로 된 다른 것들에 대한 정수 변수는 대폭 권장되지 않습니다. 욕망은,
가, BTW 일반적으로 약한 입력이 암시 적 형식 변환이 발생한다는 것을 의미 명확한 코드에 대한 열망을 무시해서는 안되는 시간의 아마 95 % ..., 간결하고, 설명 변수 이름의 생각해야하지 및 강한 입력하지 않는 것을 의미합니다. 이 정의에 따르면, C는 산술 타입에 관한 한 약하게 타입 지정되었으므로, 나는 그것이 당신이 의미하는 것이 아니라고 가정합니다. 나는 철저한 철저한 타이핑은 도움보다 성가신 것으로 간주되고, "완전한 약한 타이핑"(무엇이라도 다른 것으로 변환 될 수있는 것)은 대부분의 언어에서 무의미하다고 생각합니다. 따라서 코드를 파악하기가 너무 어려워지기 전에 얼마나 많은 수의 암시 적 변환을 허용 할 수 있는지에 대한 질문이 있습니다. C++에서 변환 연산자와 명시 적이 지 않은 one-arg 생성자를 구현할지 여부를 결정하는 데있어 계속되는 어려움을 참조하십시오.
"강력한"및 "약한"타이핑이란 무엇을 의미합니까? 정적 대 동적? 명시 적 대 암시 적 유형 이름? 명시 적 대 암시 적 캐스팅? 안전 대 안전하지 않은 캐스팅? – dan04
C는 약하게 입력됩니다. –
C는 어떻게 강하게 입력됩니까? – chimeracoder