루비 문자열 안에 표현식 넣기 프로그래밍

루비가 알골68처럼 표현식 자체가 값을 리턴하는 것도 놀랍지만

line = if ...
            ...
         else
             ...
          end

오늘 업무용으로 간단한 스크립트를 작성하다가 문자열내의 #{} 안의 {}도 일종의 코드 블록이 아닐까 싶어서 식을 넣으니 잘 작동하네요. 문자열 안의 {와 }도 결국 블록이라 식을 넣을 수 있으니 perl이나 php가 문자열 안에서 $변수의 형태로 편리를 주는 것보다 발전된 형태네요.

claa ...
   def 구분( line )
        열 = line.split(/\t/)
        if 포함(line)
            품명 = 열[$항목[:명칭]]
            합계액 = 수치화( 열[$항목[:합계액]] )
            print "%40s %10s %10s" % [ 품명, 열[$항목[:조제량]], 합계액]
            if @@기출약품.has_key?(품명)
                puts " #{합계액 > @@기출약품[품명]? "(+)" : "( )"} <= #{@@기출약품[품명]} "
            else
                puts
            end             
            @@기출약품[품명] = 합계액
             @합계액 += 합계액
        end
    end
end

덧붙여 루비에 -KE 옵션 같은 걸 주면 C#이나 자바처럼 한글 변수명을 쓸 수 있어서 편합니다. 어휘가 사고를 제한하는 경향이 있기 때문에 일부나마 모국어로 프로그래밍할 수 있으니 좋네요. 당분간 c/c++/ruby 조합이 쓸모가 많을 듯...





덧글

  • aero 2008/07/07 12:22 # 삭제 답글

    perl도 한글변수 사용가능합니다.

    use utf8;
    my $품명="알약";
    binmode STDOUT, ":encoding(UTF-8)";
    print STDOUT $품명;


    그리고 perl처럼 " "안에서 변수의 내용이 보간되는 것이 훨씬 유연합니다.
    스칼라 $scalar와 배열 @array은 그대로 적어주면 실제 내용으로 대체되죠
    대부분의 경우 변수를 그대로 사용하는 것이 대부분이지만 어떠한 표현식의
    결과를 "" 안에서 그대로 찍고 싶을때....
    Perl을 좀 공부해보셨다면 ${ }는 스칼라 디레퍼런스임을 하실겁니다.
    그래서 값을 로 레퍼런스를 만들어주고 다시 ${}로 디레퍼런스 하는
    테크닉을 써서 다음처럼 쓸 수 있습니다.

    my $a=12;
    print "$a / 2 = ". $a/2 ."n";
    print "$a / 2 = ${($a/2)}n"; #위와 동일한 결과

    만약 리스트를 리턴하는 함수의 내용을 바로 찍고 싶다면
    넘어온 리스트를 [ ]로 감싸서 익명배열로 만든다음 @{ }로
    배열을 디레퍼런스 하는 테크닉을 써서 다음과 같이 쓸 수 있습니다.

    print "list_ret+func() returned @{[ list_ret_func() ]}n";

    저는 Perl이 "" 안에서 변수를 보간(interpolation)하는 방식이 더 자연스럽다고 생각합니다.
    레퍼런스, 디레퍼런스 테크닉을 사용하면 어떠한 표현식의 결과도 다 바로 찍을 수 있고

    ruby #{ } 형식은 변수의 sigil을 없애면서 나타난 기형적인 형태라고 봐야겠죠.
  • 뽀도르 2008/07/07 13:06 # 답글

    펄의 형태가 더 보기 좋네요. 감사합니다. :)
댓글 입력 영역