나는 똑같은 것을 궁금해했다. 나는 컴파일러/통역 작가가 아니지만, 그 답은 완벽 해지는 것이 불가능하다고 생각합니다. 그러나 대부분의 경우이 값을 올바르게 사용할 수 있습니다.
먼저 "동적"언어를 "해석 된"언어로 변경하겠다. Ruby, Javascript 등으로 생각한다. 해석 된 언어는 런타임 기능을 활용하는 경향이있다.
예를 들어
, 대부분의 스크립트 언어는 그냥 문자열을 "실행"다음
-- pseudo-code but you get the idea
eval("echo(a)");
을 허용! 그 문자열도 리팩토링해야합니다. 변수가 없으면이 따옴표없이 문자를 인쇄 할 수 있습니까?
나는 이런 종류의 코딩이 아마도 예외이며, 거의 모든 시간에 훌륭한 리펙토링을 얻을 것이라고 믿고 싶다. 불행하게도 스크립팅 언어로 라이브러리를 살펴볼 때 일반적으로 이러한 예외가 발생하고 아키텍처를 기반으로한다고 생각됩니다.
또는 출자금 최대 비트
:
def functionThatAssumesInputWillCreateX(input)
eval(input)
echo(x)
def functionWithUnknownParms(...)
eval(argv[1]);
자바를 리팩토링하고, 문자열 INT에서 변수를 변경할 때 적어도, 당신은 여전히 INT 기대했던 모든 장소의 오류를 얻을 :
String wasInt;
out = 3 + wasInt;
인터 프리트 된 언어를 사용하면 런타임까지 이것을 볼 수 없을 것입니다.
이 역사적인 쪽지는 멋지다. (말장난을 용서해라.) 나는 그것이 가능한지 알아 내려고하지 않고있다. 루비에서도 우리는 "자동 리팩터링"을 가지고 있지만 실제로는 작동하지 않습니다. Netbeans에는 경고조차 있지만 실제는 꽤 황량합니다. 또한 스몰 토크에서 모든 유형을 선언하면 리팩토링에 도움이 될지 여부는 알 수 없습니다. 루비에서는 그렇게하지 못합니다. 그렇게하는 것이 어려운 일 중 하나입니다. –
죄송합니다. 역사적인 쪽지 만주는 것이 아닙니다. 저는 리팩토링 브라우저가 많은 스몰 토크 IDE에서 표준 도구라고 제안하고자했습니다. –