나는 이런 말을 이해하지 못했습니다. 솔직히 말해서 함수의 반환 유형을 선언하더라도 많은 코드 줄을 작성한 후에는 함수를 잊을 수 있으며 잊어 버릴 수 있습니다. 텍스트 편집기로 확인하십시오.
반환 유형을 잊어 버린 것이 아니라 항상 발생합니다. 공구가 반환 유형을 잊었다는 것을 알려주는 기능에 관한 것입니다.
또한 함수가 type funcname()...
, whitout knowing type 으로 선언 되면 함수는 호출되는 각 줄을 검색해야합니다 funcname
. 파이썬 등에서는 검색 할 수 def funcname
있거나 function funcname
한 번만 발생하기 때문입니다. 선언에서.
이것은 구문 문제이며 정적 타이핑과는 전혀 관련이 없습니다.
C 패밀리 구문은 전문 도구를 사용하지 않고 선언을 찾으려고 할 때 실제로 비우호적입니다. 다른 언어에는이 문제가 없습니다. Rust의 선언 구문을 참조하십시오.
fn funcname(a: i32) -> i32
또한 REPL을 사용하면 다른 입력으로 반환 유형에 대한 함수를 테스트하는 것이 쉽지 않습니다. 정적으로 유형이 지정된 언어의 경우 코드 줄을 추가하고 선언 된 유형을 알기 위해 모든 것을 다시 컴파일해야합니다.
모든 언어를 해석 할 수 있으며 모든 언어에 REPL이있을 수 있습니다.
따라서 정적으로 유형이 지정된 언어의 장점이 아닌 함수의 반환 유형을 아는 것 외에는 더 큰 프로젝트에서 정적 유형이 실제로 어떻게 도움이됩니까?
추상적 인 방법으로 답변하겠습니다.
프로그램은 다양한 작업으로 구성되며 이러한 작업은 개발자가 가정 한 일부 방식으로 구성됩니다.
일부 가정은 암시적이고 일부는 명시 적입니다. 일부 가정은 근처의 작업과 관련이 있으며, 일부 가정은 다른 작업과 관련이 있습니다. 진리의 가치가 중요한 장소에 가능한 한 명시적이고 표현이 가까울 때 가정을 쉽게 식별 할 수 있습니다.
버그는 프로그램에 존재하지만 어떤 경우에는 유지되지 않는 가정의 표현입니다. 버그를 추적하려면 잘못된 가정을 식별해야합니다. 버그를 제거하려면 프로그램에서 해당 가정을 제거하거나 가정이 실제로 유지되도록 무언가를 변경해야합니다.
가정을 두 가지 종류로 분류하고 싶습니다.
첫 번째 종류는 프로그램의 입력에 따라 유지 될 수도 있고 그렇지 않을 수도있는 가정입니다. 이런 종류의 잘못된 가정을 식별하려면 가능한 모든 프로그램 입력 공간에서 검색해야합니다. 교육받은 추측과 합리적인 사고를 사용하여 문제를 좁히고 훨씬 작은 공간에서 검색 할 수 있습니다. 그러나 여전히 프로그램이 조금만 커지면 초기 입력 공간은 엄청난 속도로 커집니다. 모든 실제적인 목적을 위해 무한한 것으로 간주 될 수 있습니다.
두 번째 종류는 모든 입력에 대해 확실히 적용되거나 모든 입력에 대해 잘못 가정 한 것입니다. 우리는 이런 종류의 가정이 잘못되었다고 판단 할 때 프로그램을 실행하거나 입력을 테스트 할 필요조차 없습니다. 우리가 올바른으로 이런 종류의 가정을 식별 할 때, 우리는 우리가 버그 (추적 할 때 걱정이 덜 의심 하나가 어떤 버그). 따라서 가능한 많은 가정이 이런 종류에 속한다는 점에서 가치가 있습니다.
두 번째 범주에 가정을 두려면 (입력과 상관없이 항상 참 또는 항상 거짓) 가정이 이루어지는 곳에서 최소한의 정보를 사용할 수 있어야합니다. 프로그램의 소스 코드 전체에서 정보가 오래되었습니다 (예를 들어, 많은 컴파일러는 프로 시저 분석을 수행하지 않으므로 대부분의 정보에 대한 호출을 어려운 경계로 만듭니다). 필요한 정보를 최신 상태로 유지할 수있는 방법이 필요합니다 (유효하고 근처에 있음).
한 가지 방법은 가능한 한이 정보의 출처를 정보가 소비되는 장소에 가깝게하는 것이지만 대부분의 사용 사례에는 실용적이지 않을 수 있습니다. 또 다른 방법은 정보를 자주 반복하여 소스 코드에서 관련성을 갱신하는 것입니다.
이미 짐작할 수 있듯이 정적 유형은 소스 코드에 흩어져있는 유형 정보의 신호입니다. 이 정보는 두 번째 범주에서 유형 정확성에 대한 대부분의 가정을 제시하는 데 사용될 수 있습니다. 이는 거의 모든 작업이 유형 호환성과 관련하여 항상 정확하거나 항상 부정확 한 것으로 분류 될 수 있음을 의미합니다.
유형이 잘못되면 분석을 통해 늦지 않고 일찍 버그에주의를 기울여 시간을 절약 할 수 있습니다. 유형이 올 바르면 분석을 통해 버그가 발생하면 유형 오류를 즉시 배제 할 수 있으므로 시간이 절약됩니다.