SmalltalkBestPracticePatterns:7.5

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
7.5 Rectangular Block

Rectangular Block

Indented Control Flor(p.175)를 이용해 표현식을 작성하고 있다.

  • 블록을 어떻게 포맷팅하는가?


스몰토크는 메서드의 활성화 즉시 실행되는 코드와 실행이 지연되는 코드를 구별한다. 코드를 정확하게 읽기 위해서는 메서드 내 어떤 코드가 어떤 범주에 해당하는지 재빠르게 구별해야 한다.


코드가 차지하는 행은 가능한 한 적어야 하며, 가독성은 일정해야 한다. 짧은 메서드는 빠르고 완전하게 이해하기 쉽고, 브라우저에 더 쉽게 맞아 떨어진다. 반면 블록을 눈으로 선별하기 쉽게 만드는 것은 추가 행을 합리적으로 사용하는 방법이다.


이 문제에서 주의를 기울여야 하는 한 가지는 사람의 눈이 세로행과 가로행을 구별하고 덧붙이는 경향을 가진다는 사실이다. 블록을 표시하는 데에 사용되는 꺾쇠괄호는 눈으로 하여금 직사각형이 없는 데에도 전체 직사각형이 보이는 환상을 만들어낸다. 따라서:


  • 블록을 직사각형으로 만들어라. 꺾쇠괄호를 직사각형의 상단 좌측과 하단 우측 모서리로서 사용하라. 블록 내 statement가 간단할 경우 블록은 한 행에 들어맞는다. statement가 복잡할 경우 블록을 고유의 행에 가져와 들여써라.


한 줄 블록의 예를 들어보겠다:

ifTrue: [self recomputeAngle]
ifTrue: [^angle * 90 + 270 degreesToRadians]


두 개의 statement를 포함한다는 이유로 두 개의 행을 취하는 블록은 다음과 같다:

ifTrue:
    [self clearCaches.
    self recomputeAngle]


two parameter 메시지를 포함한다는 이유로 두 개의 행을 취하는 블록은 다음과 같다:

ifTrue:
    [self
        at: each
        put: 0]


Notes