동적 언어로 작성된 코드를 어떻게 탐색하고 리팩터링합니까?


14

저는 Python, Ruby 또는 Javascript를 작성하는 데 보일러 플레이트가 거의 필요하지 않습니다. 나는 간단한 기능적 구성을 좋아합니다. 나는 깨끗하고 간단한 구문을 좋아합니다.

그러나 동적 언어로 큰 소프트웨어를 개발할 때 내가 정말 나쁜 세 가지가 있습니다.

  • 코드 탐색
  • 내가 사용하는 객체의 인터페이스 식별
  • 효율적으로 리팩토링

IDE (Eclipse + PyDev)뿐만 아니라 간단한 편집기 (예 : Vim)를 시도했지만 두 경우 모두 메모리에 더 많은 노력을 기울이거나 코드를 지속적으로 "grep"하고 확인하여 코드를 읽어야한다고 생각합니다. 인터페이스. 여러 종속성이있는 큰 코드베이스로 작업 할 때 특히 그렇습니다.

리팩토링 (예 : 메소드 이름 변경)은 단위 테스트의 품질에 따라 크게 달라집니다. 그리고 응용 프로그램의 나머지 부분을 "차단"하여 단위 테스트를 분리하려고하면 스텁의 인터페이스가 내가 스텁하는 객체와 최신 상태를 유지할 것이라는 보장이 없습니다.

이 문제에 대한 해결 방법이 있다고 확신합니다. Python, Ruby 또는 Javascript에서 어떻게 효율적으로 작업합니까?


PyDev의 이름 변경 기능은 지금까지 훌륭했습니다.

답변:


3

코드 탐색

VIM보다 더 나은 편집기를 사용하십시오.

코모도 편집을 사용합니다.

기억에 더 많이 헌신해야한다고 생각합니다

좋은. 생각하는 것이 좋습니다. "학습"은 결국 "메모리"로 연결됩니다.

인터페이스를 식별하기 위해 지속적으로 "grep"하고 코드를 읽습니다.

이것이 일반적입니다. 당신이 그들을 기억할 수 없다면, 그들은 너무 복잡하지 않습니까? 단순화 할 시간입니다.

단순하게 만들기가 어렵습니다. 그러나 기억하기 어려운 경우 나쁜 디자인의 증상입니다.

나는 grep을 사용합니다. 그것은 나를 위해 작동합니다. 내 코모도 편집에는 멋진 검색이 많이 있습니다. 메모장도 마찬가지입니다. ++

내가 사용하는 객체의 인터페이스 식별

Doc Strings와 help()함수가 작동합니다. 나는 그들을 사용합니다. 매일.

효율적으로 리팩토링 ... 단위 테스트의 품질에 따라 크게 달라집니다.

그건 뉴스가 아니야 정적 언어에서도 마찬가지입니다.

정적 언어에서는 컴파일하는 한 실제로 작동 할 가능성이 높다고 가정 할 때 종종 게으르게됩니다. 이것은 명백히 거짓이지만 우리는 게으르다.


이 문제에 대한 해결 방법이 있다고 확신합니다.

이러한 문제는 "문제"가 아니며 "해결 방법"이 필요하지 않습니다.


동적 언어는 조작하는 객체의 유형을 모르는 것에 관한 것입니다. 매개 변수를 받으면 "quack ()"및 "feathers ()"메소드를 정의한다고 가정하지만 문서가 어디에 있는지 알지 못합니다 (사실, 여러 구현에 여러 개의 docstring이 있음).

"객체의 종류를 모른다"? 정말. 객체의 클라이언트를 디자인 할 때 내가 디자인 한 유형을 알고 있습니다.

여러 클라이언트에서 사용하는 서비스를 정의 할 때 quack()and 의 필수 인터페이스를 정의한 경우 "정확한"유형은 관련이 없습니다 feathers().

마지막으로, 미묘한 문제가있는 경우 드문 경우에 "정확한"유형을 결정하는 Read-Execute-Print-Loop 및 기타 도구가 있습니다. 그것이 실제로 매일 사용하는 것입니다.

>>> x = some_mystery_factory( some, args )
>>> type(x)
>>> dir(x)

적어도 파이썬에서는 객체의 유형을 풀기가 너무 어렵지 않습니다. 동적 언어에는 REPL이 있어야하므로 진행 상황을 쉽게 확인할 수 있습니다.

예상되는 매개 변수 순서도 모릅니다. IDE가 도움을주는 것이 어렵습니다.

그건 말이되지 않습니다. help()공장.

그리고 내 IDE는 종종 정의를 찾을 수 있습니다. 항상 그런 것은 아닙니다. 일부 복잡한 동적 구성은 기본 클래스를 쉽게 숨길 수 있습니다. 이 경우 실제로 메소드 정의를 찾기 위해 객체의 클래스에 대해 생각해야합니다. 물론 코드를 작성 중이므로 미스터리가 거의 없습니다.


6
기억에 더 많은 노력
Nicole

@Renesis : 인터페이스에 어떤 종류의 패턴이나 시스템이 있다면 암기하는 것은 나쁘지 않습니다.
S.Lott

1
나는 @Renesis가 인터페이스를 암기하면 내 생각을 실제 생각에서 멀어지게한다는 데 동의합니다. 팀의 다른 코더가 매개 변수를 주문하기로 결정한 방식을 크게 신경 쓰지 못했습니다. 큰 코드베이스가 다른 명명 표준을 가진 많은 다른 라이브러리를 사용한다는 사실은 드물지 않으며 이러한 구성 요소를 단순화하거나 통합하는 것이 불가능하거나 비현실적입니다.
Philippe Beaudoin

Re : Doc strings, 객체의 유형을 알면 괜찮지 만 종종 찾지 못하고 찾아야합니다.
Philippe Beaudoin

1
grr ... Vim : P
Anto


1

JetSrains 회사 는 ReSharper, TeamCity 및 IDEA의 저자입니다. 그들은 최근에 동적 언어를 살펴보기 시작했으며 이미 Python, PHP 및 Ruby 용 도구를 출시했습니다.

품질이 좋습니다. 이들은 선호하는 IDE를위한 또 다른 플러그인은 아니지만 완전한 기능을 갖춘 IDE이며 리팩토링 / 탐색 / 디버깅 등에 매우 좋습니다. IDEA 라이트와 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.