Coding/Python Matlab

파이썬 vs 루비

smores 2012. 1. 17. 07:18

얼마전 펄과 파이썬을 열심히 저울질하다 파이썬으로 가닥을 잡고 공부를 시작했다. 물론 펄이 아직까지도 관심이 가지만... (가장 큰 이유는 CPAN)

엊그제 우연히 까마귀님 블로그 들렸다가 파이썬에서 루비로 옮겨가신것 같아서 갑자기 루비에 관심이 생겼다. 아직 시작 단계이니 어떤것이 나을려나 비교해 보고 싶어졌다. 까마귀님 블로그에 덧글로 질문도 남겨놓았고 답변 기다리는 중이지만...

구글링하다 다음과 같은 비교를 보게 되었고 (주로 가독성에 대한 비교) 아직까지 각각의 언어의 능력 (다양한 확장 라이브러리 등)에 대해서는 모르겠지만 최근의 언어라면 왠만하면 다른 언어에서 지원하는 것 거의 지원할 거 같고...

일단 코딩에 대해서는 가독성에 대해 상당히 예민한 편이라 게시된 글이 큰 도움이 되었다.

예전 C 쓸때부터 { } 위치와 탭 스페이스 갯수 땜시 한동안 꽤나 난리 쳤었다. 이것도 일종의 결벽증이려나... 그런데 자바에 오니 { 시작 위치가 내가 C/C++ 에서 주로 쓰던것과 다른 것 때문에 (물론 그냥 내 방식으로 써도 되겠지만) 또 한차례 마음에 안들어 홍역을 치렀다. 왠지 마음에 안들면 몸 어디 한군데가 가렵고 그곳이 어딘지 모르는 듯한 느낌이... -_-;   


다음의 글로만 보면 아무래도 나는 파이썬이 훨씬 내 체질에 맞을 듯 하다. 루비의 경우 클래스에서 @ 쓰는데 그만 질겁을... 펄의 변수 타입에 따른 두문자의 공포가 되살아나는 심정이랄까...


http://www.gpgstudy.com/forum/viewtopic.php?topic=14122 

루비 vs 파이썬: 가독성 올려짐: 2007-01-09 13:33
인용과 함께 답변 이 게시물을 del.icio.us에 추가

루비와 파이썬의 가독성은 
인용:

- ruby: 인간 친화적이냐? 
- python: 간결함이냐? 

으로 나뉘어집니다. 

인용:

1. ***** 출력하기 
코드:
python:
    print "*" * 5
 
ruby:
    5.times { print "*" }


2. for each 
코드:
python:
    for x in ["a", "b", "c"]:
        print x,
 
ruby:
    ["a", "b", "c"].each { |x| print x }



3. dict 
코드:
python:
    nameDict = {
        "a" : 1,
        "b" : 2,
        "c" : 3,
    }
    print nameDict["a"]
 
ruby:
    nameDict = {
        "a" => 1,
        "b" => 2,
        "c" => 3,
    }
    print nameDict["a"]


4. is_function 
코드:
python:
    def is_none_true(): # 인덴트로만 구분하므로 코드 길이가 짧습니다.
        return none
 
    def is_zero_true():
        return 0
 
    if is_none_true():
        print "none is true"
    elif not is_none_true():
        print "none is false" # 파이썬에서는 false 로 none 과 False 를 사용합니다.
 
    if is_zero_true():
        print "zero is true"
    else:
        print "zero is false" # 파이썬에서 0 은 false 입니다
 
ruby:
    def is_nil_true?() # 함수에 물음표 사용 가능합니다.
        return nil
    end
     
    def is_zero_true?()
        return 0
    end
     
    if is_nil_true?
        print "nil is true\n"
    elsif not is_nil_true?
        print "nil is false\n" # 루비에서 false 로 nil 을 사용합니다.
    end
     
    if is_zero_true?
        print "zero is true\n" # 루비에서 0 은 True 입니다.
    else
        print "zero is false\n"
    end


5. members python(: + 인덴트, self) vs ruby(end, @) 
코드:
python:
    class Object:
        def Run(self): # 꼭 self 를 쓰지 않고 s 라고 써도 됩니다만 어쨌든 멤버 접근 하기가 귀찮은건 사실입니다.
            self.a = 10
            print self.a
 
    obj = Object() # 함수 호출과 헷갈린다라는 의견이 있지만 간결합니다.
    obj.Run()
     
ruby:
    class Object
        def Run()
            @a = 10 # @ 를 보는 순간 perl 의 공포가 생각납니다만; 쓰기는 좋습니다.
            print @a
        end
    end
 
    obj = Object.new # 새로운 객체를 생성한다는것이 명확합니다.
    obj.Run()