루비스러운 코드
루비 코딩이 재미있는 이유는 무엇보다 ‘루비스러움’을 추구하는데서 오는 만족감에 있다. 깨끗한 코드를 생산했을 때의 쾌감을 아는 개발자라면 ‘루비’가 제격이다.
그렇다면 ‘루비스러운’ 코드가 뭘까? DSL을 주제로 하는 A Firstful of Languages에 올라온 메뉴를 만드는 코드(Example Mini Language: MenuBuilder)를 보면 조금 알 것 같다.
- mymenu = Node.new(:root, ‘root’)
questions = mymenu.add_node(:q, ‘/q’, ‘Questions’)
answers = mymenu.add_node(:a, ‘/a’, ‘Answers’)
letters = mymenu.add_node(:letter, ‘’, ‘Letters’)
bill = letters.add_node(:bill, ‘/letter/bill’, ‘To Bill’)
steve = letters.add_node(:stever, ‘/letter/steve’, ‘To Steve’)
데이터 스트럭처 시간에 만들어보았을 것 같은 트리를 만드는 전형적인 모습의 코드이다. 하지만 반복되는 문자때문에 쉽게 눈에 들어오지 않는다. 루비 공동체가 추구하는 제1원칙 ‘DRY’에 위배된다. 아래 코드가 훨씬 루비스러운 코드이다.
- mymenu = menu do
item :q, ‘/q’, ‘Questions’
item :a, ‘/a’, ‘Answers’
item :letter, ‘’, ‘Letters’ do
item :bill, ‘/letter/bill’, ‘To Bill’
item :steve, ‘/letter/steve’, ‘To Steve’
end
end
블록 문법을 이용하니 훨씬 간결하게 표현이 되었다. 이런 간결함, 읽기 편함, 아름다움을 추구하는 것이 루비스러움이다. 그리고 위 코드보다 아래같은 코드를 만들었을 때 훨씬 즐겁다.
도에인 언어를 만들겠다고 시작하는 것이 아니라, 루비스러움을 추구하다보니 최종 결과물이 도메인 언어처럼 보이는 것이다.
History
Last edited on 09/04/2007 14:59 by deepblue
Comments (0)