2009-07-20 7 views
2

, 나는 보통 내 코드는 다음과 같은 점에 도달 : 내가 당신에 대해 모르는Ruby의 N 끝을 더 잘 보이게 만드는 방법은 무엇입니까? 나는 몇 가지 스크립트를 작성할으로

  end 
     end 
     end 
    end 
    end 
end 

을, 그러나 이것은 나에게 매우 예쁘게. 이것에 대해 무언가 할 수 있습니까?

+1

이것은 Ruby에만 국한되지 않습니다. 계단 코드는 영원히 계속되었습니다. – Pesto

+1

Python은 바깥쪽에 만 계단식으로 들어가기 때문에 좋습니다. 나는 그것이 선택 사항이 아니라는 것을 알고 있지만 파이썬의 디자인 목표 중 하나였습니다. – Soviut

답변

19

:-) 파이썬을 사용? 더 많은 방법을 사용하도록 리 팩터링 하시겠습니까? 다른 루틴에 전달 된 블록을 대신 사용 하시겠습니까?

일반적으로 깊은 중첩은 방법이 너무 복잡해지고 분해되어야한다는 지표입니다. 리팩터링 된 메소드에 따라 내부 복합 문을 명명하여 암시 적 구조 문서에도 도움이 될 수 있습니다.

4

이러한 내부 블록이 쉽게 이름을 지정하고 (재사용 할 수있는가?), 작은 개별 기능으로 리팩토링하지 않는 이유는 무엇입니까? 그렇다면 결국 짧은 시퀀스로 끝날 것입니다.

그렇지 않으면 또 다른 방법은 너무 많이하지 둥지 코드를 수행

+0

누군가 파이썬을 제안 할 것이라고 확신했습니다 :) – Geo

+0

사실 파이썬과 포션 [http://github.com/why/potion/tree/master]을 염두에 두었습니다. 그러나 후자는 좀 더 실험적인 맛이었습니다.) –

5

작은 조각으로 분해하는 것이 좋습니다. 그런 중첩 된 블록이 많이 필요한 경우 end 키워드에 주석을 붙일 수 있습니다.

end # End conditional statement 
    end # End method declaration 
end # End class declaration 

그래도 추악하지만 적어도 분명합니다.

앞서 언급 한 다른 옵션들이 바람직합니다.

2

작고 테스트 가능한 기능을 사용해보십시오. 함수와 더 중요한 것은 논리를 테스트하기가 쉽지만 코드가 더 쉽게 읽을 수있게됩니다.

1

나는 중첩 보았다 "{}"블록과 4 공간 소프트 탭과 :

말, 말, 말, 말

나는이 수직 공간을 절약 가정,하지만 난 돈 깊은 중첩을 피하고 블록 끝 줄을 주석 처리하는 것에 대한 위의 의견은 유효한 접근 방법입니다. 심도있는 중첩은 속도 향상이 필요한 메소드 호출 오버 헤드를 피하는 것이지만 가독성은 거의 항상 "최적화"와 비슷합니다.

1

자신 만의 Ruby를 컴파일하는 것이 좋으면 ennnnnnnd 스타일 구문을 사용할 수 있습니다 RubyKaigi 토크입니다.) 불행히도 Ruby core가 제안한 rejected이 제안되었습니다.

+0

링크가 +1인데도 불구하고 여전히 만족스럽지 않습니다. –

+1

@MichaelKohl : 당신이 무언가를 할 수 있는지를 알기 위해 호기심을 가지고 있고, 당신을 깨닫는 지혜가 없어야한다고 생각합니다. –

관련 문제