문제

나는 항상 정적으로 입력 한 언어 (C/C ++, Java)에서 작업했습니다. 나는 Clojure를 가지고 놀았고 나는 그것을 정말로 좋아합니다.

내가 걱정하는 한 가지는 다음과 같습니다. 3 개의 모듈을 인수로 사용하고 요구 사항이 변경되는 방식으로 다른 모듈을 함수로 전달해야한다고 말합니다. 나는 단지 기능을 변경하고 컴파일러는 내가 사용한 모든 곳에서 불평합니다. 그러나 Clojure에서는 기능이 호출 될 때까지 불평하지 않습니다. 방금 검색을 수행하고 교체 할 수는 있지만 전화를 놓칠 수있는 기회가있는 것 같습니다. 그 기능이 실제로 호출 될 때까지 눈에 띄지 않을 것입니다. 너희들은 이것을 어떻게 처리합니까?

도움이 되었습니까?

해결책

이것이 동적으로 입력 된 언어에서 자동 테스트/테스트 중심 개발이 더욱 중요한 이유 중 하나입니다. 나는 Clojure (주로 Ruby를 사용)를 사용하지 않았으므로 불행히도 특정 테스트 프레임 워크를 추천 할 수 없습니다.

다른 팁

첫 번째 Bruce Eckel이라는 매우 흥미로운 기사를 썼다는 것이 언급하고 싶습니다. 강력한 타이핑 대 강력한 테스트 (불행히도 링크는 현재 다운되었지만 곧 올 것이기를 바랍니다).

그의 아이디어는 컴파일 된 언어를 다룰 때 컴파일러가 자동 테스트의 첫 번째 자동 단계 역할을한다는 것입니다. 동적 언어로 이동할 때는이 첫 번째 수준의 자동 테스트를 잃습니다. 그러나 두 경우 모두,이 첫 번째 자동 수준은 테스트의 한 부분 일 뿐이며 그다지 중요한 부분도 아닙니다.

그의 요점은 프로그램을 올바르게 개발하고있는 경우, 즉 몇 가지 형태의 테스트 및 회귀 테스트를 수행하는 경우 컴파일러가 부족하면 어쨌든 약간의 기본 테스트를 추가해야하므로 큰 손실이 아닙니다.

그래서 내가주는 첫 번째 대답은 테스트에 집중하고, 어쨌든해야 할 일이며, 그러한 변화가 당신에게 너무 나쁘게 영향을 미치지 않아야한다고 생각합니다.

두 번째 내가 본 많은 동적 언어 (예 : Python)는 기존 코드를 깨지 않고 메소드/클래스가 수행하는 일을 변경하는 능력이 훨씬 더 좋다고 언급하고 싶습니다.

예를 들어, Python의 경우 메소드가 두 매개 변수를 수락하는 데 사용되었지만 이제 세 번째 매개 변수가 필요한 경우 기존 코드를 깨지 않고 항상 기본 매개 변수를 추가 할 수 있지만 이제 사용할 수 있습니다. 이것은 매우 기본적인 기술이지만 Python의 경우 (그리고 나는 대부분의 다른 동적 언어도 가정), 이러한 기술은 훨씬 더 흥미로울 수 있습니다. 동적이므로 특정 모듈에 대한 함수 구현을 거의 변경하고 변수의 의미를 변경하는 등을 변경할 수 있습니다.

Clojure가 Similair를 허용하는 기술을보고 상황에 적용되는지 결정하는 것이 좋습니다.

이 방법이 유일한 사용자가 아닌 공개 인터페이스의 일부인 경우와 똑같은 일을합니다.

추가 모듈에 새 모듈을 추가하고 기존 모듈을 변경하여 적절한 기본값으로 새 메소드를 호출합니다.

아, 그리고 당신의 프로그램이 그렇게 큰 경우, 좋은 테스트가 있는지 확인하십시오 (테스트는 Java보다 간단하게 만들어야합니다).

테스트 범위는 확실히 중요합니다. 그러나 동적으로 입력 한 언어를 사용하면 다른 방식으로 일할 수 있습니다. 강력하게 입력 된 언어 (Java와 같은)에서 인터페이스의 변경은 모든 발신자를 수정해야합니다. 루비에서는 이것을 할 수 있지만 아마도 그렇지 않을 것입니다. 대신, 몇 가지 방법 중 하나에서 방법에 유연성을 추가 할 수 있습니다. 즉:

  • Ruby에서 3 개의 매개 변수를 취하는 방법이 거의없는 경향이 있습니다 (Java와는 반대로). Java의 강력한 유형 인터페이스가 없기 때문에 문제를 작은 조각과 계단으로 나눕니다. 매개 변수를 1 개만 사용하는 방법을 작성한 다음 더 복잡해지면 리팩터를 작성하는 것이 훨씬 일반적입니다.
  • 더 많은 인수를 추가하면서 오래된 행동을 제자리에 두는 것이 가능합니다. 예를 들어, 두 인수 메소드에 세 번째 인수를 추가 해야하는 경우 기본 행동을 유지하기 위해 기본값을 설정하고 리팩토러를 저장합니다). JQuery와 같은 JavaScript 라이브러리에 익숙하다면 "선택적"인수로 모든 곳을 활용합니다.
  • 선택적 인수와 유사하게, 메소드는 유연한 매개 변수 목록을 취하도록 성장할 수 있습니다. 견고한 테스트 범위를 사용하면 기존 방법에 새로운 동작을 쉽게 추가하고 기존 코드를 깨뜨리지 않았다는 것을 안전하게 알 수 있습니다. 레일에서 "렌더링"과 같은 방법은 광범위한 옵션을 취합니다.

Clojure에서 컴파일러 지원이 없습니다. 당신이주는 특정한 예에서, 그것은 변경된 기능의 원래이며, Clojure 코드를 컴파일하여 선택할 것입니다. 나는 여전히 강력한 -> 동적 타이핑 전환을 만들고이 위안을 찾습니다!

동적 언어로 이동할 때 어느 정도의 리팩토링 및 타입 안전을 잃습니다. 컴파일러의 정보가 많을수록 컴파일 시간에 더 많이 할 수 있습니다.

Tim Bray가 논의합니다 여기, Cedric의 비판 여기, a 게시하다 Artima에서 오랫동안 논의합니다.

정적 타이핑이 정말로 필요하면 사용할 수 있습니다. https://github.com/clojure/core.typed 그리고 정적 변수 통과를 테스트하는 것은 Leiningen 모듈입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top