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는 블록, 프록, 람다를 포함합니다.