Python도 매우 좋은 범용 프로그래밍 언어입니다. Python에서 Ruby로 넘어오면 Python을 배울 때보다 조금 더 구문이 늘었을 뿐이라는 걸 알게 될 것입니다.
비슷한 점
Python처럼, Ruby에서도…
- 대화형 프롬프트가 있습니다(
irb
라고 부릅니다). - 커맨드 라인에서 문서를 읽을 수 있습니다(
pydoc
대신ri
명령을 사용합니다). - 라인 종결이 없습니다(일반적인 줄 바꿈 제외).
- 문자열 리터럴은 Python의 따옴표 세 개로 감싼 문자열처럼 여러 줄에 걸쳐 입력할 수 있습니다.
- 대괄호는 리스트에, 중괄호는 사전형에 사용합니다.(사전형은 Ruby에선 “해시”라고 부릅니다.)
- 배열은 같은 동작을 합니다(배열을 더하면 하나의 긴 배열을 만들지만,
a3 = [ a1, a2 ]
처럼 구성하면 배열의 배열이 됩니다). - 객체는 강 타입인 동시에 동적 타입입니다.
- 모든 것은 객체이며, 변수는 객체의 참조일 뿐입니다.
- 키워드는 조금 다르지만, 예외는 거의 비슷하게 동작합니다.
- 내장형 문서화 툴이 있습니다(Ruby에서는 rdoc이라 부릅니다).
- 일급(first-class) 함수, 익명 함수, 클로저와 함께 함수형 프로그래밍 지원이 뛰어납니다.
다른 점
Python과는 다르게, Ruby에서는…
- 문자열은 변경 가능합니다.
- 상수(변경할 의도가 없는 변수)를 만들 수 있습니다.
- 강제적인 대소문자 규칙이 있습니다(예를 들어, 클래스 이름은 대문자로 시작해야 하고, 변수는 소문자로 시작해야 합니다).
- 한 종류의 리스트 컨테이너(배열)밖에 없으며 배열은 변경 가능합니다.
- 큰따옴표를 사용한 문자열은 (
\t
같은) 이스케이프 시퀀스와 특수한 “표현식 치환” 구문을 사용할 수 있습니다(이는"add " + "strings " + "together"
처럼 적을 필요 없이 Ruby 표현식을 문자열 사이에 넣을 수 있게 합니다). 작은따옴표는 Python의r"raw strings"
와 같습니다. - “새로운 스타일”, “옛날 스타일” 클래스가 없습니다. 한 종류입니다. (Python 3 이상은 이 문제가 없습니다만, Python 2와의 완벽한 하위 호환은 되지 않습니다.)
- 속성에 직접 액세스할 수 없습니다. Ruby에서는 전부 메서드 호출입니다.
- 메서드를 호출할 때의 괄호는 대부분 생략 가능합니다.
- Python의
_자발적인_
밑줄__규칙__
대신public
,private
,protected
로 액세스를 강제할 수 있습니다. - “믹스인”은 다중 상속 대신 사용합니다.
- 빌트인 클래스에 메서드를 추가하고 수정할 수 있습니다. 두 언어 다 어느 시점에서든 클래스를 열고 수정할 수 있지만, Python은 빌트인 클래스의 수정을 방지하고 있고, Ruby는 아닙니다.
True
나False
대신true
나false
를 사용합니다. (그리고None
대신nil
을 사용합니다.)- 참 거짓을 평가할 때
false
와nil
만이 거짓 값으로 평가됩니다. (0
,0.0
,""
,[]
를 포함해) 나머지는 전부 참입니다. elif
대신elsif
입니다.import
대신require
입니다. 그것 말고 사용법은 같습니다.- (아래의 docstring 대신) 코드 위의 일반적인 주석은 문서를 생성하는 데 사용합니다.
- 좀 더 기억해야 하지만, 빨리 배울 수 있는 많은 단축 명령이 있습니다. 단축 명령은 Ruby를 좀 더 재미있고, 생산적이게 합니다.
- (Python의
del
문처럼) 한 번 설정한 변수를 해제하는 방법은 없습니다. 오래된 값을 가비지 컬렉션하도록 변수를nil
로 리셋할 수는 있지만 변수는 스코프가 끝날 때까지 심볼 테이블에 남습니다. yield
키워드가 다르게 동작합니다. Python에서는 함수의 호출 스코프 바깥으로 반환해서 실행하게 됩니다. 해당 함수로 다시 돌아오는 건 외부 코드의 책임입니다. Ruby에서는yield
가 마지막 인수로 전달된 다른 함수를 실행하고, 그 즉시 함수로 돌아옵니다.- Python은 익명 함수로 람다 하나만을 지원하지만, Ruby는 블록, 프록, 람다를 포함합니다.