diff --git a/ko/documentation/ruby-from-other-languages/to-ruby-from-c-and-cpp/index.md b/ko/documentation/ruby-from-other-languages/to-ruby-from-c-and-cpp/index.md index e0aaa3f4c7..2c7ab9261c 100644 --- a/ko/documentation/ruby-from-other-languages/to-ruby-from-c-and-cpp/index.md +++ b/ko/documentation/ruby-from-other-languages/to-ruby-from-c-and-cpp/index.md @@ -4,7 +4,7 @@ title: "C나 C++에서 Ruby로" lang: ko --- -Ruby에서 코드가 C 또는 C++와 어떻게 다른지 항목 별로 설명하는 것은 상당히 +Ruby에서 코드가 C 또는 C++와 어떻게 다른지 항목별로 설명하는 것은 상당히 큰 차이가 있기 때문에 어렵습니다. 이 어려움의 원인 중 하나는 Ruby 런타임이 많은 일을 해 주기 때문입니다. Ruby는 C의 "숨겨진 메커니즘 없음" 원칙에서 가능한 한 멀리 있는 것 같습니다. @@ -15,7 +15,7 @@ Ruby의 요점은 런타임이 더 많은 작업을 수행하는 대신 인간 즉, Ruby 코드가 "같은 일을 하는" C 또는 C++ 코드보다 훨씬 느리게 실행될 것으로 예상할 수 있습니다. 동시에 Ruby 프로그램을 얼마나 빨리 시작하고 실행할 수 있는지, 작성하는 데 몇 줄의 코드가 필요한지 빠르게 이해할 수 있습니다. -Ruby는 C++ 보다 훨씬 간단합니다. Ruby는 여러분을 응석받이로 만들 것입니다. +Ruby는 C++보다 훨씬 간단합니다. Ruby는 여러분을 응석받이로 만들 것입니다. Ruby는 정적으로 타입이 결정되지 않고 동적으로 결정됩니다. 런타임은 실행 시간에 가능한 한 많은 작업을 수행합니다. 예를 들어, Ruby 프로그램이 "링크"(즉, 로드 및 @@ -37,7 +37,7 @@ C처럼, Ruby에서도... * 대부분의 연산자는 동일합니다(복합 할당 및 비트 연산자 포함). 그러나 Ruby에는 `++` 또는 `--`가 없습니다. * `__FILE__` 및 `__LINE__`이 있습니다. -* 특별한 `const` 키워드는 없지만 상수도 쓸 수 있습니다. 상수다움은 명명 +* 특별한 `const` 키워드는 없지만 상수도 쓸 수 있습니다. 상수인지 아닌지는 명명 규칙으로 결정됩니다. 대문자로 시작하는 이름은 상수입니다. * 문자열은 큰따옴표로 묶습니다. * 문자열은 변경 가능합니다. @@ -45,14 +45,14 @@ C처럼, Ruby에서도... 읽을 수 있습니다. * 동일한 종류의 커맨드 라인 디버거를 사용할 수 있습니다. -### C++과 비슷한 점 +### C++와 비슷한 점 C++처럼, Ruby에서도... -* 대부분 같은 연산자를 사용합니다(심지어 `::`까지). `<<`는 종종 목록에 요소를 +* 대부분 같은 연산자를 사용합니다(심지어 `::`까지). `<<`는 종종 배열에 요소를 추가하는 데 사용됩니다. 하지만 주의할 것이 하나 있습니다. Ruby에서는 `->`를 사용하지 않습니다. 항상 `.`입니다. -* `public`, `private` 및 `protected`는 유사한 작업을 수행합니다. +* `public`, `private`, `protected`는 유사한 작업을 수행합니다. * 상속 구문은 동일하게 한 문자이지만 `:` 대신 `<`를 사용합니다. * C++에서 `namespace`가 사용되는 방식과 유사하게 코드를 "모듈"에 넣을 수 있습니다. @@ -64,29 +64,29 @@ C++처럼, Ruby에서도... C와는 다르게, Ruby에서는... * 코드를 컴파일할 필요가 없습니다. 직접 실행하면 됩니다. -* 객체는 강력한 타입입니다(변수 이름 자체에는 타입이 전혀 없음). -* 매크로나 전처리기가 없습니다. 캐스트가 없습니다. 포인터도 없습니다(포인터 - 연산도 없습니다). typedefs, sizeof, enum도 없습니다. -* 헤더 파일이 없습니다. 기본 소스 코드 파일에서 기능(일반적으로 "메서드"라고 - 함)과 클래스를 정의하기만 하면 됩니다. -* `#define`이 없습니다. 대신 상수를 사용하십시오. +* 객체는 강 타입입니다(변수 이름 자체에는 타입이 전혀 없음). +* 매크로나 전처리기가 없습니다. 캐스팅이 없습니다. 포인터도 없습니다(포인터 + 연산도 없습니다). typedef, sizeof, enum도 없습니다. +* 헤더 파일이 없습니다. 메인 소스 코드 파일에서 함수(일반적으로 "메서드"라고 + 함)와 클래스를 정의하기만 하면 됩니다. +* `#define`이 없습니다. 대신 상수를 사용하세요. * 모든 변수는 힙에 저장됩니다. 또한, 가비지 컬렉터가 처리하므로 직접 해제할 필요가 없습니다. -* 메서드(예: 함수)에 대한 인수는 값으로 전달되며 값은 항상 개체 참조입니다. +* 메서드(예: 함수)에 대한 인수는 값으로 전달되며 그 값은 항상 객체 참조입니다. * `#include ` 또는 `#include "foo"` 대신 `require 'foo'`를 사용합니다. * 어셈블리를 사용할 수 없습니다. * 줄 끝에 세미콜론이 없습니다. -* `if` 및 `while` 조건 표현식에는 괄호 없이 사용합니다. +* `if` 및 `while` 조건 표현식을 괄호 없이 적습니다. * 메서드(예: 함수) 호출에 대한 괄호는 종종 생략 가능합니다. * 일반적으로 중괄호를 사용하지 않습니다. `end` 키워드로 여러 줄 구성(`while` - 루프와 같은)을 끝냅니다. + 루프 등)을 끝냅니다. * `do` 키워드는 소위 "블록"을 위한 것입니다. C와 같은 "do 문"이 없습니다. * "블록"이라는 용어는 다른 의미를 가집니다. 실행하는 동안 메서드 본문이 블록을 - 호출할 수 있도록 메서드 호출과 연결하는 코드 블록용입니다. + 호출할 수 있도록 메서드 호출과 연결하는 코드 블록을 가리킵니다. * 변수 선언이 없습니다. 필요할 때 즉시 새 이름을 지정하기만 하면 됩니다. * 참 거짓을 확인할 때 `false` 및 `nil`만 거짓 값으로 평가됩니다. 다른 모든 것은 - true입니다(`0`, `0.0` 및 `"0"` 포함). -* `char`가 없습니다. 단지 1자로 된 문자열입니다. + 참입니다(`0`, `0.0`, `"0"` 포함). +* `char`가 없습니다. 단지 한 글자로 된 문자열입니다. * 문자열은 null 바이트로 끝나지 않습니다. * 배열 리터럴은 중괄호 대신 대괄호 안에 들어갑니다. * 배열에 더 많은 요소를 넣으면 배열이 자동으로 커집니다. @@ -95,33 +95,33 @@ C와는 다르게, Ruby에서는... * 대부분의 경우 모든 것이 표현식입니다(즉, `while` 문은 실제로 rvalue로 평가됩니다). -### C++과 다른 점 +### C++와 다른 점 -C과는 다르게, Ruby에서는... +C++와는 다르게, Ruby에서는... -* 명시적인 참조가 없습니다. 즉, Ruby에서 모든 변수는 일부 개체에 대해 자동으로 +* 명시적인 참조가 없습니다. 즉, Ruby에서 모든 변수는 일부 객체에 대해 자동으로 역참조된 이름일 뿐입니다. -* 개체는 강 타입이지만 *동적* 타입이 지정됩니다. 런타임은 *실행 시간에* 해당 메서드 +* 객체는 강 타입이지만 *동적* 타입이 지정됩니다. 런타임은 *실행 시간에* 해당 메서드 호출이 실제로 작동하는지 확인합니다. -* "constructor"는 클래스 이름 대신 `initialize`라고 합니다. +* "생성자"는 클래스 이름 대신 `initialize`라고 합니다. * 모든 메서드는 항상 가상입니다. -* "클래스"(정적) 변수 이름은 항상 `@@`로 시작합니다.(예: `@@total_widgets`) +* "클래스"(정적) 변수 이름은 항상 `@@`로 시작합니다(예: `@@total_widgets`). * 멤버 변수에 직접 접근하지 않습니다. 공용 멤버 변수(Ruby에서 attributes로 부름)에 대한 모든 액세스는 메서드를 통해 이루어집니다. * `this`가 아니라 `self`입니다. -* 일부 메서드는 '?' 또는 '!'로 끝납니다. 실제로 메서드 이름의 일부입니다. +* 일부 메서드는 '?' 또는 '!'로 끝납니다. 실제로 메서드 이름의 일부분입니다. * 그 자체로는 다중 상속이 없습니다. Ruby에는 "믹스인"이 있습니다(즉, 모듈의 모든 인스턴스 메서드를 "상속"할 수 있음). * 일부 대소문자 규칙이 적용됩니다(예: 클래스 이름은 대문자로 시작하고 변수는 소문자로 시작). * 메서드 호출에 대한 괄호는 일반적으로 생략 가능합니다. * 언제든지 클래스를 다시 열고 메서드를 더 추가할 수 있습니다. -* C++ 템플릿이 필요하지 않습니다(주어진 변수에 모든 종류의 개체를 할당할 수 있고 +* C++ 템플릿이 필요하지 않습니다(주어진 변수에 모든 종류의 객체를 할당할 수 있고 타입은 어쨌든 런타임에 파악되기 때문입니다). 캐스팅도 없습니다. * 이터레이션은 약간 다르게 수행됩니다. Ruby에서는 별도의 이터레이터 - 객체(`vector::const_iterator iter`와 같은)를 사용하지 않습니다. 대신 - 연속적인 요소를 전달하는 코드 블록을 취하는 컨테이너 개체의 이터레이터 - 메서드(`each`와 같은)를 사용합니다. + 객체(`vector::const_iterator iter` 등)를 사용하지 않습니다. 대신 + 연속적인 요소를 전달하는 코드 블록을 취하는 컨테이너 객체의 이터레이터 + 메서드(`each` 등)를 사용합니다. * 컨테이너 타입은 `Array`와 `Hash` 두 가지뿐입니다. * 타입 변환이 없습니다. 그러나 Ruby를 사용하면 필요하지 않다는 것을 알게 될 것입니다. diff --git a/ko/documentation/ruby-from-other-languages/to-ruby-from-java/index.md b/ko/documentation/ruby-from-other-languages/to-ruby-from-java/index.md index ea8a9528af..8e6001af77 100644 --- a/ko/documentation/ruby-from-other-languages/to-ruby-from-java/index.md +++ b/ko/documentation/ruby-from-other-languages/to-ruby-from-java/index.md @@ -4,12 +4,12 @@ title: "Java에서 Ruby로" lang: ko --- -Java는 성숙하고 검증되어있고 (Java를 싫어하는 사람들은 여전히 이의를 +Java는 성숙하고 검증되어 있고 (Java를 싫어하는 사람들은 여전히 이의를 제기하겠지만) 빠릅니다. 하지만 장황하기도 합니다. Java에서 Ruby로 전환하면 코드량이 상당히 적어질 것입니다. 또 빠르게 프로토타입을 만들 때 시간이 적게 걸릴 것입니다. -### 비슷한 점들 +### 비슷한 점 Java처럼, Ruby에서도... @@ -17,15 +17,15 @@ Java처럼, Ruby에서도... * 객체는 강 타입입니다. * public, private, protected 메서드가 있습니다. * 내장된 문서화 툴이 있습니다(Ruby에서는 RDoc이라 합니다). rdoc으로 - 생성된 문서는 javadoc으로 생성된 문서와 매우 비슷합니다. + 생성한 문서는 javadoc으로 생성한 문서와 매우 비슷합니다. -### 다른 점들 +### 다른 점 Java와는 다르게, Ruby에서는... -* 코드를 컴파일 할 필요가 없습니다. 직접 실행하시면 됩니다. -* 여러 인기있는 서드파티 GUI 툴킷이 있습니다. Ruby 유저는 - [WxRuby][1], [FXRuby][2], [Ruby-GNOME2][3], [Qt][4]나 +* 코드를 컴파일할 필요가 없습니다. 직접 실행하면 됩니다. +* 여러 인기 있는 서드파티 GUI 툴킷이 있습니다. Ruby 유저는 + [WxRuby][1], [FXRuby][2], [Ruby-GNOME2][3], [Qt][4], [Ruby Tk](https://github.com/ruby/tk) 등을 사용할 수 있습니다. * 클래스 같은 것을 정의할 때 코드 블록에 중괄호를 넣는 대신, 선언 뒤에 `end` 키워드를 사용합니다. @@ -35,18 +35,18 @@ Java와는 다르게, Ruby에서는... * 2나 3.14159 같은 숫자를 포함해 모든 것이 객체입니다. * 정적 타입 체크가 없습니다. * 변수 이름은 라벨일 뿐입니다. 변수 이름에 관련된 타입은 없습니다. -* 타입 선언이 없습니다. 필요할 때 새로운 변수 이름에 대입만 하시면 그대로 - "동작"합니다. (예를 들어, `int[] a = {1,2,3};` 대신 `a = [1,2,3]`) -* 형변환이 없습니다. 그냥 메서드를 호출 하세요. 예외를 보게 될 때에는 - 유닛테스트가 코드를 실행하기도 전에 말해 줄 것입니다. +* 타입 선언이 없습니다. 필요할 때 새로운 변수 이름에 대입만 하면 그대로 + "동작"합니다(예를 들어, `int[] a = {1,2,3};` 대신 `a = [1,2,3]`). +* 캐스팅이 없습니다. 그냥 메서드를 호출하세요. 예외를 보게 될 때에는 + 유닛 테스트가 코드를 실행하기도 전에 말해 줄 것입니다. * `Foo foo = new Foo("hi")` 대신 `foo = Foo.new("hi")`를 사용합니다. * 생성자는 클래스 이름 대신 항상 “initialize”로 명명됩니다. -* 인터페이스 대신 “mixins”을 사용합니다. -* YAML을 XML보다 선호하는 경향이 있습니다. +* 인터페이스 대신 "믹스인"을 사용합니다. +* XML보다 YAML을 선호하는 경향이 있습니다. * `null` 대신 `nil`을 사용합니다. -* Ruby는 `==`과 `equals()`을 다르게 취급합니다. Ruby에서 값이 같은지를 +* Ruby는 `==`과 `equals()`를 다르게 취급합니다. Ruby에서 값이 같은지를 확인하려면 `==`를 사용하고(Java에서는 `equals()`), 객체가 같은지를 확인하려면 - `equal?()`를 사용합니다.(Java에서는 `==`) + `equal?()`을 사용합니다(Java에서는 `==`). diff --git a/ko/documentation/ruby-from-other-languages/to-ruby-from-perl/index.md b/ko/documentation/ruby-from-other-languages/to-ruby-from-perl/index.md index 78f514e6d2..277f09178e 100644 --- a/ko/documentation/ruby-from-other-languages/to-ruby-from-perl/index.md +++ b/ko/documentation/ruby-from-other-languages/to-ruby-from-perl/index.md @@ -8,7 +8,7 @@ Perl은 굉장합니다. Perl의 문서도 굉장합니다. Perl 커뮤니티도 처음부터 내장된 우아한 객체 지향 기능을 갈망하는 Perler에게는 Ruby가 적합할 수 있습니다. -### 비슷한 점들 +### 비슷한 점 Perl처럼, Ruby에서도... @@ -17,42 +17,42 @@ Perl처럼, Ruby에서도... * 일반적으로 사용되는 내장 기능이 상당히 많습니다. * 괄호는 종종 생략할 수 있습니다. * 문자열은 기본적으로 동일하게 작동합니다. -* Perl과 유사한 일반 구분 문자열 및 정규식 인용 구문이 있습니다. - `%q{this}`(작은따옴표) 또는 `%Q{this}`(큰따옴표) 및 `%w{단일따옴표 단어 목록의 - 경우}`처럼 보입니다. 원하는 경우 `%Q|can|` `%Q(use)` `%Q^other^` 구분 기호를 +* 일반 구분 문자열 및 Perl과 유사한 정규식 인용 구문이 있습니다. + `%q{this}`(작은따옴표) 또는 `%Q{this}`(큰따옴표) 및 `%w{작은따옴표 단어 목록의 경우}`처럼 + 보입니다. 원하는 경우 `%Q|can|` `%Q(use)` `%Q^other^` 구분 기호를 사용할 수 있습니다. -* `"#{like} this"`처럼 보이지만 큰따옴표 변수 보간이 있습니다.(그리고 `#{}` 안에 - 원하는 Ruby 코드를 넣을 수 있습니다) +* `"#{like} this"`처럼 보이지만 큰따옴표 변수 보간이 있습니다(그리고 `#{}` 안에 + 원하는 Ruby 코드를 넣을 수 있습니다). * 셸 명령 확장은 `` `backticks` ``를 사용합니다. * 내장된 문서 도구가 있습니다(Ruby는 rdoc이라고 함). -### 다른 점들 +### 다른 점 Perl과는 다르게, Ruby에서는... * Perl과 같은 상황에 따른 규칙이 없습니다. -* 변수는 참조하는 개체와 동일하지 않습니다. 대신 항상 개체에 대한 참조일 +* 변수는 참조하는 객체와 동일하지 않습니다. 대신 항상 객체에 대한 참조일 뿐입니다. -* `$` 및 `@`는 변수 이름의 첫 번째 문자로 사용되는 경우가 있지만 유형을 나타내는 +* `$` 및 `@`는 변수 이름의 첫 번째 문자로 사용되는 경우가 있지만 타입을 나타내는 것이 아니라 범위를 나타냅니다.(`$`는 전역, `@`는 객체 인스턴스, `@@`는 클래스 속성을 나타냅니다) -* 배열 리터럴은 괄호 대신 괄호 안에 들어갑니다. +* 배열 리터럴은 괄호 대신 대괄호 안에 들어갑니다. * 배열의 하위 배열을 작성해도 하나의 큰 배열로 병합되지 않습니다. 대신 배열의 배열을 얻습니다. * `sub`가 아니라 `def`를 사용합니다. * 각 줄의 끝에는 세미콜론이 필요하지 않습니다. 여기에 더해 함수 정의, 클래스 정의 및 case 문과 같은 것을 `end` 키워드로 끝냅니다. -* 개체는 강타입입니다. 타입 간 변환이 필요한 경우 `foo.to_i`, `foo.to_s` 등을 +* 객체는 강 타입입니다. 타입 간 변환이 필요한 경우 `foo.to_i`, `foo.to_s` 등을 직접 호출해야 합니다. -* `eq`, `ne`, `lt`, `gt`, `ge`, `le`은 없습니다. +* `eq`, `ne`, `lt`, `gt`, `ge`, `le`는 없습니다. * 다이아몬드 연산자(`<>`)가 없습니다. 일반적으로 `IO.some_method`를 대신 사용합니다. * 두꺼운 쉼표 `=>`는 해시 리터럴에만 사용됩니다. -* `undef`가 없습니다. Ruby에는 `nil`이 있습니다. (Ruby안의 다른 것처럼) `nil`은 - 객체입니다. 정의되지 않은 변수와는 다릅니다. 부울처럼 취급하면 `false`로 +* `undef`가 없습니다. Ruby에는 `nil`이 있습니다. (Ruby의 다른 것처럼) `nil`은 + 객체입니다. 정의되지 않은 변수와는 다릅니다. 불처럼 취급하면 `false`로 평가됩니다. * 참 거짓을 평가할 때 `false` 및 `nil`만 거짓 값으로 평가됩니다. 다른 모든 - 것은 true입니다(`0`, `0.0` 및 `"0"` 포함). + 것은 참입니다(`0`, `0.0`, `"0"` 포함). * [PerlMonks][2]는 없습니다. ruby-talk 메일링 리스트는 매우 유용한 곳입니다. diff --git a/ko/documentation/ruby-from-other-languages/to-ruby-from-php/index.md b/ko/documentation/ruby-from-other-languages/to-ruby-from-php/index.md index 74f2571b47..bb27cc9ecf 100644 --- a/ko/documentation/ruby-from-other-languages/to-ruby-from-php/index.md +++ b/ko/documentation/ruby-from-other-languages/to-ruby-from-php/index.md @@ -7,15 +7,15 @@ lang: ko PHP는 웹 애플리케이션에 널리 사용되고 있지만 Ruby on Rails를 사용하고 싶거나 일반적인 용도에 더 적합한 언어를 원한다면 Ruby를 살펴볼 가치가 있습니다. -### 비슷한 점들 +### 비슷한 점 PHP처럼, Ruby에서도... -* Ruby는 PHP와 같이 동적으로 타이핑되므로 변수 선언에 대해 걱정할 필요가 +* Ruby는 PHP와 같이 동적 타입을 사용하므로 변수 선언에 대해 걱정할 필요가 없습니다. -* 클래스가 있으며 PHP 5(`public`, `protected` 및 `private`)에서와 같이 클래스에 +* 클래스가 있으며 PHP 5(`public`, `protected`, `private`)에서와 같이 클래스에 대한 액세스를 제어할 수 있습니다. -* 일부 변수는 PHP와 동일하게 $로 시작합니다(전부가 아님). +* 일부 변수는 PHP와 동일하게 $로 시작합니다(전부는 아님). * `eval`도 있습니다. * 문자열 보간을 사용할 수 있습니다. `"$foo is a $bar"` 대신 `"#{foo} is a #{bar}"`를 사용할 수 있습니다. PHP에서와 같이 작은따옴표 @@ -27,12 +27,12 @@ PHP처럼, Ruby에서도... `array('a' => 'b')`는 `{'a' => 'b'}`가 됩니다. * `true` 및 `false`는 PHP처럼 동작하지만 `null`은 `nil`이라고 합니다. -### 다른 점들 +### 다른 점 PHP와는 다르게, Ruby에서는... -* 강력한 타이핑이 있습니다. `to_s`, `to_i` 등을 호출해야 합니다. 언어에 의존하지 - 않고 문자열, 정수 등을 변환합니다. +* 강 타입을 사용합니다. 문자열, 정수 등을 변환하려면 언어에 의존하는 대신 + `to_s`, `to_i` 등을 호출해야 합니다. * 문자열, 숫자, 배열, 해시 등은 객체입니다. abs(-1)을 호출하는 대신 -1.abs입니다. * 메서드 호출에서 괄호는 생략 가능합니다. 단, 어떤 매개변수가 어떤 메서드 호출로 @@ -43,6 +43,6 @@ PHP와는 다르게, Ruby에서는... * 변수는 참조입니다. * `abstract` 클래스나 `interface`가 없습니다. * 해시와 배열은 상호 교환할 수 없습니다. -* `false` 및 `nil`만 거짓입니다. `0`, `array()` 및 `""`는 조건문에서 모두 +* `false` 및 `nil`만 거짓입니다. `0`, `array()`, `""`는 조건문에서 모두 참입니다. * `raise`(PHP에서는 `throw`)를 포함하여 거의 모든 것이 메서드 호출입니다. diff --git a/ko/documentation/ruby-from-other-languages/to-ruby-from-python/index.md b/ko/documentation/ruby-from-other-languages/to-ruby-from-python/index.md index 6fd599331e..c42f5cdbe0 100644 --- a/ko/documentation/ruby-from-other-languages/to-ruby-from-python/index.md +++ b/ko/documentation/ruby-from-other-languages/to-ruby-from-python/index.md @@ -4,63 +4,71 @@ title: "Python에서 Ruby로" lang: ko --- -Python도 매우 좋은 범용적인 프로그래밍 언어입니다. Python에서 Ruby로 +Python도 매우 좋은 범용 프로그래밍 언어입니다. Python에서 Ruby로 넘어오면 Python을 배울 때보다 조금 더 구문이 늘었을 뿐이라는 걸 알게 될 것입니다. -### 비슷한 점들 +### 비슷한 점 Python처럼, Ruby에서도... -* 대화형 프롬프트가 있습니다. (`irb`라고 부릅니다.) -* 커맨드 라인에서 문서를 읽을 수 있습니다. (`pydoc` 대신 `ri` 명령을 - 사용합니다.) -* 라인 종결이 없습니다. (정상적인 줄 바꿈 제외). -* 문자열 리터럴은 Python의 3따옴표로 감싼 문자열처럼 여러 줄에 걸쳐 +* 대화형 프롬프트가 있습니다(`irb`라고 부릅니다). +* 커맨드 라인에서 문서를 읽을 수 있습니다(`pydoc` 대신 `ri` 명령을 + 사용합니다). +* 라인 종결이 없습니다(일반적인 줄 바꿈 제외). +* 문자열 리터럴은 Python의 따옴표 세 개로 감싼 문자열처럼 여러 줄에 걸쳐 입력할 수 있습니다. -* 괄호는 리스트에, 중괄호는 사전형에 사용합니다.(사전형은 Ruby에선 +* 대괄호는 리스트에, 중괄호는 사전형에 사용합니다.(사전형은 Ruby에선 "해시"라고 부릅니다.) -* 배열은 같은 동작을 합니다. (배열을 더하면 하나의 긴 배열을 만들지만, - `a3 = [ a1, a2 ]`처럼 구성하면 배열의 배열이 됩니다.) -* 객체는 강(strongly)타입인 동시에 동적(dynamically)타입입니다. +* 배열은 같은 동작을 합니다(배열을 더하면 하나의 긴 배열을 만들지만, + `a3 = [ a1, a2 ]`처럼 구성하면 배열의 배열이 됩니다). +* 객체는 강 타입인 동시에 동적 타입입니다. * 모든 것은 객체이며, 변수는 객체의 참조일 뿐입니다. * 키워드는 조금 다르지만, 예외는 거의 비슷하게 동작합니다. -* 내장형 문서화 툴이 있습니다. (Ruby에서는 rdoc이라 부릅니다.) +* 내장형 문서화 툴이 있습니다(Ruby에서는 rdoc이라 부릅니다). +* 일급(first-class) 함수, 익명 함수, 클로저와 함께 함수형 프로그래밍 지원이 + 뛰어납니다. -### 다른 점들 +### 다른 점 Python과는 다르게, Ruby에서는... * 문자열은 변경 가능합니다. * 상수(변경할 의도가 없는 변수)를 만들 수 있습니다. -* 강제적인 대소문자-규칙이 있습니다. (예를 들어, 클래스 이름은 대문자로 - 시작해야 하고, 변수는 소문자로 시작해야 합니다.) +* 강제적인 대소문자 규칙이 있습니다(예를 들어, 클래스 이름은 대문자로 + 시작해야 하고, 변수는 소문자로 시작해야 합니다). * 한 종류의 리스트 컨테이너(배열)밖에 없으며 배열은 변경 가능합니다. -* 따옴표를 사용한 문자열은 (`\t` 같은) 이스케이프 시퀀스와 특수한 "표현식 - 치환" 신택스를 사용할 수 있습니다.(이는 `"add " + "strings " + "together"`처럼 - 적을 필요 없이 Ruby 표현식을 문자열 사이에 넣을 수 있게 합니다.) - 홀 따옴표는 Python의 `r"raw strings"`와 같습니다. +* 큰따옴표를 사용한 문자열은 (`\t` 같은) 이스케이프 시퀀스와 특수한 "표현식 + 치환" 구문을 사용할 수 있습니다(이는 `"add " + "strings " + "together"`처럼 + 적을 필요 없이 Ruby 표현식을 문자열 사이에 넣을 수 있게 합니다). + 작은따옴표는 Python의 `r"raw strings"`와 같습니다. * "새로운 스타일", "옛날 스타일" 클래스가 없습니다. 한 종류입니다. (Python 3 이상은 이 문제가 없습니다만, Python 2와의 완벽한 하위 호환은 되지 않습니다.) -* 속성을 직접 액세스할 수 없습니다. Ruby에서는 전부 메서드 호출입니다. -* 메서드를 호출할 때의 괄호는 대부분 생략가능합니다. +* 속성에 직접 액세스할 수 없습니다. Ruby에서는 전부 메서드 호출입니다. +* 메서드를 호출할 때의 괄호는 대부분 생략 가능합니다. * Python의 `_자발적인_` 밑줄 `__규칙__` 대신 `public`, `private`, `protected`로 액세스를 강제할 수 있습니다. -* “mixins”은 다중 상속 대신 사용합니다. -* 빌트인 클래스에 추가하고 수정할 수 있습니다. 두 언어 다 어느 시점에서든 +* "믹스인"은 다중 상속 대신 사용합니다. +* 빌트인 클래스에 메서드를 추가하고 수정할 수 있습니다. 두 언어 다 어느 시점에서든 클래스를 열고 수정할 수 있지만, Python은 빌트인 클래스의 수정을 방지하고 있고, Ruby는 아닙니다. -* `True`나 `False` 대신 `true`나 `false`를 받습니다. (그리고 `None` 대신 - `nil`을 받습니다.) -* 참거짓을 평가할 때 `false`와 `nil`만이 거짓 값으로 평가됩니다. +* `True`나 `False` 대신 `true`나 `false`를 사용합니다. (그리고 `None` 대신 + `nil`을 사용합니다.) +* 참 거짓을 평가할 때 `false`와 `nil`만이 거짓 값으로 평가됩니다. (`0`, `0.0`, `""`, `[]`를 포함해) 나머지는 전부 참입니다. * `elif` 대신 `elsif`입니다. -* `import` 대신 `require`입니다. 그것 말고는 같습니다. -* 코드 (아래의 docstring 대신) 위의 평범한 주석을 문서를 생성하는 데 +* `import` 대신 `require`입니다. 그것 말고 사용법은 같습니다. +* (아래의 docstring 대신) 코드 *위의* 일반적인 주석은 문서를 생성하는 데 사용합니다. * 좀 더 기억해야 하지만, 빨리 배울 수 있는 많은 단축 명령이 있습니다. - 단축명령들은 Ruby를 좀 더 재미있고, 생산적이게 합니다. + 단축 명령은 Ruby를 좀 더 재미있고, 생산적이게 합니다. * (Python의 `del`문처럼) 한 번 설정한 변수를 해제하는 방법은 없습니다. - 낡은 콘텐츠를 가비지 컬렉션하도록 변수를 nil로 리셋할 수는 있지만 + 오래된 값을 가비지 컬렉션하도록 변수를 `nil`로 리셋할 수는 있지만 변수는 스코프가 끝날 때까지 심볼 테이블에 남습니다. +* `yield` 키워드가 다르게 동작합니다. Python에서는 함수의 호출 스코프 바깥으로 + 반환해서 실행하게 됩니다. 해당 함수로 다시 돌아오는 건 외부 코드의 책임입니다. + Ruby에서는 `yield`가 마지막 인수로 전달된 다른 함수를 실행하고, 그 즉시 함수로 + 돌아옵니다. +* Python은 익명 함수로 람다 하나만을 지원하지만, Ruby는 블록, 프록, 람다를 + 포함합니다.