Perl/KeepYourProgrammaticConfigurationDRY 페이지의 소스 보기
마지막으로 [b]
-- Loading page list... --
내용출력
로그인[l]
Diary
[f]
최근변경내역
[r]
페이지목록[i]
횡설수설[2]
게시판[3]
링크
수정할 수 없습니다: Perl/KeepYourProgrammaticConfigurationDRY 는 읽기 전용 페이지입니다.
* 원문: [http://www.effectiveperlprogramming.com/blog/407 Keep your programmatic configuration DRY « The Effective Perler] * 요점과 예제 코드 정리 * 잘못 해석한 부분 보이시면 지적 부탁드립니다~ 코드에 동일한 패턴이 반복될 경우, 공통된 부분을 추출한 후 재사용하도록 하는 게 좋다. 그런데 "설정"과 관련된 코드에서 이게 잘 안 된다. 여기서 얘기하는 "설정"은 xml, ini 이런 것들과는 무관하며, 간단히 코드의 실행부에 공급되는 데이타의 역할을 하는 코드 부분을 얘기한다. 간단한 예: 아래 코드에서는 각 앵커 데이타를 처리하는 공통 로직을 create_anchor_tag 서브루틴에 통합하였음 {{{#!vim perl my @anchors = ( { text => 'Effective Perl', href => 'http://www.effectiveperlprogramming.com' }, { text => 'Perl', href => 'http://www.perl.org' }, ); for my $anchor (@anchors) { create_anchor_tag($anchor); } }}} 이런 형태의 코드는 설정값이 복잡해지면 반복을 피하기 어렵다. 각 앵커의 세부 사항이 복잡해진 예: {{{#!vim perl my @anchors = ( { text => 'Effective Perl', href => 'http://www.effectiveperlprogramming.com', class => 'standard', style => '', lang => 'en', dir => 'ltr' }, { text => 'Perl', href => 'http://www.perl.org', class => 'standard', style => '', lang => 'en', dir => 'ltr' }, { text => 'Perl Foundation', href => 'http://www.perlfoundation.org', class => 'standard', style => '', lang => 'en', dir => 'ltr' }, { text => 'Perl6 России', href => 'http://www.perl6.ru', class => 'standard', style => '', lang => 'ru', dir => 'ltr' }, # ... and so on ); }}} 위 코드에서는 해쉬 키를 계속 반복하여 적어줘야 하고, class,lang,dir 등의 경우는 값도 거의 매번 동일하다. map을 사용한 리팩토링의 예: {{{#!vim perl my @anchors = map { { class => 'standard', style => '', lang => 'en', dir => 'ltr', %{$_} } } ( { text => 'Effective Perl', href => 'http://www.effectiveperlprogramming.com' }, { text => 'Perl', href => 'http://www.perl.org' }, { text => 'Perl Foundation', href => 'http://www.perlfoundation.org' }, { text => 'Perl6 России', href => 'http://www.perl6.ru', lang => 'ru' }, # ... and so on ); }}} 위 코드에서는 가장 빈번하게 사용되는 값들을 디폴트 값으로 제공하며, map 블록의 후반부에서 각각의 앵커 해쉬의 값을 사용하여 덮어쓰는 것도 허용한다. 조금 더 코드 반복을 줄여 보도록 하자. 각 앵커는 서로 다른 text와 href값을 가지기 때문에 이 둘은 매번 나타난다. 이 때마다 해쉬 키를 적어줘야 하는데, 물론 자연스럽게 문서화가 되는 효과가 있긴 하지만, 지금처럼 옵션이 몇 개 없을때는 굳이 키를 명시하지 않고 단지 순서로 구분하는 것도 충분하다. 다음 예에서는 각 앵커의 설정값을 익명 배열에 담고, 처음 두 개의 원소는 각각 text와 link인 걸로 가정한다. 그 외의 것들은 추가로 각 앵커 고유의 속성이 된다. {{{#!vim perl my @anchors = map { { text => shift @{$_}, href => shift @{$_}, class => 'standard', style => '', lang => 'en', dir => 'ltr', @{$_} } } ( [ 'Effective Perl' => 'http://www.effectiveperlprogramming.com' ], [ 'Perl' => 'http://www.perl.org' ], [ 'Perl Foundation' => 'http://www.perlfoundation.org' ], [ 'Perl6 России' => 'http://www.perl6.ru', lang => 'ru' ], # ... and so on ); }}}
----
---- [[컴퓨터분류]]
Perl/KeepYourProgrammaticConfigurationDRY
페이지로 돌아가기 |
다른 수정본 보기