Whiteship's Note


Reading and 'Riting

RUBY/Manual : 2006.11.04 23:02


Ruby는 다영한 I/O 라이브러리를 제공합니다. 하지만 이 책에서는 간단한 메소드 몇개 만을 사용합니다. 그 중에 두 개를 이미 보셨을 것입니다. puts와 print입니다. puts는 puts 뒤에 오는 아규먼트들을 각 각 newline(자바에서는 \n)을 추가하여 화면에 출력하며, print는 newline 문자 없이 아규먼트들을 출력해 줍니다. 또하나 자주 사용되는 것은 printf입니다. 이것은 형식 문자열로 아규먼트를 제어하는 형식입니다.(C나 Perl에 처럼)

printf "Number: %5.2f, String: %s", 1.23, "hello"

이렇게 입력을 하면

Number:  1.23, String: hello=> nil

이렇게 출력됩니다. %f는 실수를 출력할 것이고 %s는 문자열을 출력할 것이라는 것입니다. %와 f사이의 숫자는 (allowing five characters in total, with two after the decimal point) 이렇습니다. 즉 앞에 . 앞에 있는 숫자는 총 숫자를 말하고 . 뒤에 있는 숫자는 소숫점을 말한다고 합니다. 그래서 출력 실험을 해봤습니다.

irb(main):017:0> printf "%6.3f, %s", 123456789.1234567, "test"
123456789.123, test=> nil
irb(main):018:0> printf "%6.4f, %s", 123456789.1234567, "test"
123456789.1235, test=> nil
irb(main):019:0> printf "%1.4f, %s", 123456789.1234567, "test"
123456789.1235, test=> nil

. 뒤에 있는 숫자를 변경 해보니 결과물의 소숫점의 자릿수가 바뀌는 것을 확인 할 수 있습니다. 하지만 . 앞의 숫자에 어떤 영향을 받고 있는 것인지는 확인 할 수 없었습니다.

프로그램에 값을 입력시키는 방법도 여러가지가 있습니다. 그 중에 가장 전통적인 방법으로 gets를 사용합니다.

irb(main):022:0> line = gets
hi
=> "hi\n"
irb(main):023:0> print line
hi
=> nil
irb(main):024:0>

gets는 방금 읽어들인 문장을 리턴하는데 그 때 리턴되는 것을 전역 변수인 $_ 안에 저장합니다. 이 변수는 많은 경우에 기본으로 사용되는 특별한 변수 입니다. print를 아규먼트 없이 호출하면 &_ 안에 있는 것을 호출하게 됩니다. if 나 while문을 정규 표현식과 사용한다면 그 표현식은 $_ 변수에 대응하여 작동합니다. 예를 들어 다음 프로그램은 "Ruby"라는 단어간 들어간 모든 줄을 출력합니다.

while gets           # assigns line to $_
 if /Ruby/          # matches against $_
   print            # prints $_
 end

이 것을 저번 글에서 배웠던 이터레이터를 사용하여 다음과 같이 나타낼 수도 있습니다.

ARGF.each { |line|  print line  if line =~ /Ruby/ }

'RUBY > Manual' 카테고리의 다른 글

Reading and 'Riting  (0) 2006.11.04
Blocks and Iterators  (0) 2006.11.03
Regular Expressions  (0) 2006.10.05
Control Structures  (0) 2006.10.04
Arrays and Hashes  (0) 2006.10.02
Some Basic Ruby  (0) 2006.09.26
Ruby Is an Object-Oriented Language  (0) 2006.09.17
Roadmap  (0) 2006.09.16
top

Write a comment.


Blocks and Iterators

RUBY/Manual : 2006.11.03 11:45


이번 세션에서는 간단하게 Ruby의 장점중에 하나를 설명하겠습니다. 코드 블럭을 살펴보려고 합니다. 코드 블럭은 callback을 구현하거나(Java의 anonymous inner class보다 간단하게), 코드 덩어리(C의 funtion pointer보다 더 유연한)를 넘겨주거나, 이터레이터를 구현할 때 사용할 수 있습니다.

코드 블럭은 ( )사이 또는 do 와 end 사이의 코드 덩어리 입니다.
{ puts "Hello" }       # this is a block

do                     #
 club.enroll(person)  # and so is this
 person.socialize     #
end                    #

코드 블럭을 만들어 두고 yield 를 사용하여 여러번 호출 할 수 있습니다.

def callBlock
 yield
 yield
end
callBlock { puts "In the block" }

callBlock 이라는 메소드 안에는 yield 를 두 번 사용했습니다. 그리고 오른쪽에 코드 블럭이 있군요. 그럼 이 코드 블럭을 두 번 호출 하게 될 테니 화면에 in the block 가 두번 찍힐 것입니다.

In the block

In the block

You can provide parameters to the call to
yield: these will be passed to the block. Within the block, you
list the names of the arguments to receive these parameters between
vertical bars (``|'').
def callBlock yield , end callBlock { |, | ... }

코드 블럭은 Ruby에서 이터레이터를 구현할 때 사용됐습니다.
a = %w( ant bee cat dog elk )    # create an array
a.each { |animal| puts animal }  # iterate over the contents
이 것의 결과는 다음과 같습니다.
ant
bee
cat
dog
elk

each라는 메소드가 어떻게 구현되어 있는지 보겠습니다.

# within class Array...
def each
 for each element
   yield(element)
 end
end
You could then iterate over an array's elements by calling itseach method and supplying a block. This block would be called foreach element in turn.
[ 'cat', 'dog', 'horse' ].each do |animal|
 print animal, " -- "
end
produces:
cat -- dog -- horse --

Java와 C에서 사용하는 여러 loof를 Ruby에서는 단순한 메소드 호출을 사용하여 할 수 있습니다.

5.times {  print "*" }
3.upto(6) {|i|  print i }
('a'..'e').each {|char| print char }

produces:

*****3456abcde

*을 출력하는 코드 블럭을 다섯번 호출하고, 3~6까지 출력하고, a~e까지 출력했습니다.


'RUBY > Manual' 카테고리의 다른 글

Reading and 'Riting  (0) 2006.11.04
Blocks and Iterators  (0) 2006.11.03
Regular Expressions  (0) 2006.10.05
Control Structures  (0) 2006.10.04
Arrays and Hashes  (0) 2006.10.02
Some Basic Ruby  (0) 2006.09.26
Ruby Is an Object-Oriented Language  (0) 2006.09.17
Roadmap  (0) 2006.09.16
top

Write a comment.


Regular Expressions

RUBY/Manual : 2006.10.05 16:18


Regular Expressions

모든 프로그래머들은 Ruby에 이미 만들어져 있는 문자열, 정수, 실수, 배열 등과 같은 것에 익숙할 것입니다. 하지만 Ruby가 가지고 있는 regular expression은 스크립트 언어라고 불리는 것에만 있습니다. 말하기 부끄럽지만 text를 다루는데는 regular expression이 매우 유용합니다.

여기서는 그 전부에 대해 다루지는 않고 regular expression을 사용하는 몇가지 예만 살펴 보겠습니다. 56페이지 부터 시작하는 부분에서 이것에 대한 모든 것을 볼 수 있을 것입니다.

regular expression은 문자열에서 특정 패턴을 구분하는 간단한 방법입니다. Ruby에서는 / / 슬러쉬 사이에 패턴을 적어 넣음으로써 regular expression을 작성할 수 있습니다(/패턴/). 그리고 Ruby에서 이것은 당연히 객체이고 객체처럼 다뤄 집니다.

예를 들어 문자열에 Perl또는 Python을 포함하는 문자열에 매치하는 패턴을 작성하고 싶다면 다음과 같은 regular expression을 사용할 수 있습니다.

/Perl|Python/


"|" 파이프 문자를 이용하여 여러개의 문자열을 구분 할 수 있습니다. 그리고 괄호도 사용할 수 있지요. 따라서 위의 표현을 다음괕이 적을 수도 있습니다.
/P(erl|ython)/


그리고 반복되는 패턴을 기술 할 수도 있습니다. /ab+c/는 문자열이 a를 가지고 있고 a뒤에 하나 또는 그 이상의 b가 있고 그 뒤에 c가 있는 문자열에 매칭됩니다. +대신에 *를 써서 /ab+c/라고 표현하면 a뒤에 b가 없거나 하나 이상일 수 있고 그 뒤에 c가 있는 문자열에 매칭됩니다.

여러 문자 그룹중 하나를 매칭 시킬 수도 있습니다. \s 는 공백 문자(스페이스, 탭, 새줄 등등)와 매칭 됩니다. \d는 모든 정수를 매칭 됩니다. and ``\w'', which matchesany character that may appear in a typical word. The single character``.'' (a period) matches any character.

이것들을 사용하여 몇가지 유용한 regular expression을 만들 수 있습니다.

/\d\d:\d\d:\d\d/     # a time such as 12:34:56
/Perl.*Python/       # Perl, zero or more other chars, then Python
/Perl\s+Python/      # Perl, one or more spaces, then Python
/Ruby (Perl|Python)/ # Ruby, a space, and either Perl or Python

"=~" 이 오퍼레이션은 문자열에 regular expression을 매칭 하는데 사용할 수 있습니다. 만약에 문자열에서 해당하는 패턴이 발견되면 =~ 는 그 패턴이 시작하는 위치를 리턴하고 없다면 nil을 리턴합니다. 이 말은 if문이나 while문의 조건식에 사용할 수 있다는 것입니다. 다음의 예는 문자열에 'Perl' 또는 'Python'이 있는지 확인합니다.

if line =~ /Perl|Python/
 puts "Scripting language mentioned: #{line}"
end

Ruby의 메소드를 사용하여 패턴에 매칭되는 문자열을 다른 문자열로 교체 할 수 있습니다.

line.sub(/Perl/, 'Ruby')    # replace first 'Perl' with 'Ruby'
line.gsub(/Python/, 'Ruby') # replace every 'Python' with 'Ruby'

이 책 전반에 걸쳐 regular expression을 살펴 볼 것입니다.

'RUBY > Manual' 카테고리의 다른 글

Reading and 'Riting  (0) 2006.11.04
Blocks and Iterators  (0) 2006.11.03
Regular Expressions  (0) 2006.10.05
Control Structures  (0) 2006.10.04
Arrays and Hashes  (0) 2006.10.02
Some Basic Ruby  (0) 2006.09.26
Ruby Is an Object-Oriented Language  (0) 2006.09.17
Roadmap  (0) 2006.09.16
top

Write a comment.


Control Structures

RUBY/Manual : 2006.10.04 18:47


Control Structures

Ruby는 if나 while 같은 유용한 제어문을 가지고 있습니다. Java, c, Perl 프로그래머들은 이 제어문 바디에 괄호를 뺸 것을 눈치 챗을 것입니다. 대신에 자바는 end라는 키워드로 바디를 구분합니다.
if count > 10
 puts "Try again"
elsif tries == 3
 puts "You lose"
else
 puts "Enter a number"
end
while문도 비슷하게 end를 사용합니다.
while weight < 100 and numPallets <= 30
 pallet = nextPallet()
 weight += pallet.weight
 numPallets += 1
end
Ruby의  statement modifier라는 것을 사용하여 while이나 if문을 줄여 쓸 수가 있습니다. 사용 법은 먼저 딱 한 문장 만 기술을 하고 그 뒤 if나 while 키워드를 사용하고 조건을 명시하면 됩니다.

예를 들어 아래에 한 문장의 간단한 if문이 있습니다.
if radiation > 3000
 puts "Danger, Will Robinson"
end
이것을 아래와 같이 간단히 줄일 수 있습니다.
puts "Danger, Will Robinson" if radiation > 3000
한 문장의 while문이 아래에 있습니다.
while square < 1000
  square = square*square
end
이것도 아래 처럼 줄일 수 있습니다.
square = square*square  while square < 1000

'RUBY > Manual' 카테고리의 다른 글

Reading and 'Riting  (0) 2006.11.04
Blocks and Iterators  (0) 2006.11.03
Regular Expressions  (0) 2006.10.05
Control Structures  (0) 2006.10.04
Arrays and Hashes  (0) 2006.10.02
Some Basic Ruby  (0) 2006.09.26
Ruby Is an Object-Oriented Language  (0) 2006.09.17
Roadmap  (0) 2006.09.16
top

Write a comment.


Arrays and Hashes

RUBY/Manual : 2006.10.02 18:13


Arrays and Hashes


Ruby의 array와 hash는 인덱스가 있는 collection입니다. 둘 다 객체를 담아 두고 key를 사용하여 접근하는 콜렉션입니다. array에서 key는 정수이지만 hash는 어떤 객체도 key가 될 수 있습니다. 둘 모두 새로운 요소를 추가할 때 커기제 됩니다. array에 접근을 하는게 보다 효율 적이지만 hash는 보다 유연함을 제공합니다. 어떤 array이나 hash들도 여러 타입의 객체를 담아 둘 수 있습니다. 이 말은 하나의 array에 정수, 문자열, 실수를 담을 수 있다는 것입니다.


[ ] 이 괄호 사이에 요소들을 나열 하는 array literal을 사용하여 새로운 배열을 생성하고 초기화 할 수 있습니다. array 객체를 가지고 객체에 있는 각각의 요소들에 [] 안에 index를 사용하여 접근할 수 있습니다. 다음의 예에서 봅시다.

a = [ 1, 'cat', 3.14 ]   # array with three elements
# access the first element
a[0] »1
# set the third element
a[2] = nil
# dump out the array
a »[1, "cat", nil]


array 객체의 생성자를 사용하여 생성하거나 요소들이 없는 비어있는 괄호 [] 를 사용하여 배열을 생성할 수도 있습니다. Array.new .
empty1 = []
empty2 = Array.new


단어들의 배열을 생성할 때 "" 와 , 를 사용하기가 매우 번거로울 수 있는데 이 때 사용하기 편한 것이 있습니다. 바로 %w 입니다. 다음과 같이 사용할 수 있습니다.

a = %w{ ant bee cat dog elk }
a[0] »"ant"
a[3] »"dog"


Ruby의 hash는 배열과 비슷합니다. hash는 [] 말고 {} 이 괄호를 사용합니다. 반드시 하나의 요소에는 두 개의 객체가 제공되어야 합니다. 하나는 key 하나는 value입니다.


예를들어, 악기들을 오케스크라 위치에 따라 매핑하고 싶다면 다음과 같이 할 수 있습니다.

instSection = {  'cello'     => 'string',  
'clarinet'  => 'woodwind',  
'drum'      => 'percussion',  
'oboe'      => 'woodwind',  
'trumpet'   => 'brass',  
'violin'    => 'string'}


Hash는 array와 같이 [] 괄호를 사용하여 index화 됩니다.

instSection['oboe'] »"woodwind"
instSection['cello'] »"string"
instSection['bassoon'] »nil


마지막 예가 보여주듯이 hash에 해당하는 key가 없는 경우에 기본적으로 nil을 반환합니다. 하지만 가끔은 여러분이 원하는 기본값을 반환하도록 하고 싶을 것입니다. 예를 들어 해당하는 key가 몇 번 출현하는지 카운팅하는 hash의 경우 기본값을 0으로 하고 싶을 것입니다. 이것은 hash를 생성할 때 생성자에 기본값을 인자로 넘겨 주는 방식으로 할 수 있습니다.

histogram = Hash.new(0)
histogram['key1'] »0
histogram['key1'] = histogram['key1'] + 1
histogram['key1'] »1


배열과 해쉬 객체는 매우 유용한 메소드들을 많이 가지고 있습니다. 33page와 278page~317page에 걸쳐 이 메소드들에 대해 자세하게 나와있습니다.

'RUBY > Manual' 카테고리의 다른 글

Reading and 'Riting  (0) 2006.11.04
Blocks and Iterators  (0) 2006.11.03
Regular Expressions  (0) 2006.10.05
Control Structures  (0) 2006.10.04
Arrays and Hashes  (0) 2006.10.02
Some Basic Ruby  (0) 2006.09.26
Ruby Is an Object-Oriented Language  (0) 2006.09.17
Roadmap  (0) 2006.09.16
top

Write a comment.


Some Basic Ruby

RUBY/Manual : 2006.09.26 07:23


Some Basic Ruby

많은 사람들이 새로운 언어를 배울 때 지겨운 문법을 읽는 것을 좋아하지 않습니다. 그래서 방법을 생각해냈습니다. Ruby 프로그램을 작성할 때 꼭 알아야 하는 것들만 적어 놨습니다. 199페이지 부터 시작하는 18챕터에서 더 자세히 살펴보겠습니다.

간단한 Ruby 프로그램을 보며 시작합시다. 문자열을 반환하는 메소드를 작성했습니다. 이름을 문자열에 추가하여 반환하는 군요. 이 메소드를 몇번 호출해 봤습니다.

def sayGoodnight(name)  
result = "Goodnight, " + name  
return result
end
# Time for bed...
puts sayGoodnight("John-Boy")
puts sayGoodnight("Mary-Ellen")

Ruby는 statement마다 세미콜론(;)을 필요로 하지 않습니다. 그리고 주석은  # 문자로 시작합니다.

메소드는 def 키워드를 사용하여 정의하며 def뒤에 메소드의 이름을 적어주고 메소드의 파라미터들을 괄호() 안에 적어줍니다. 또 루비는 여러 문장을 묶거나 메소드의 정의를 구분하기 위해 중괄호를 사용하지 않습니다. 대신 end로 끝남을 알려줍니다. 메소드의 첫줄은 "Goodnight, "에 파라미터 name을 붙이고 그 다음 줄에서 result를 반환하고 있습니다. result 변수를 선언할 필요가 없습니다. 그냥 대입 할 때 생기게 됩니다.

메소드를 정의한 뒤 우번 호출을 했습니다. 그리고 두 경우다 결과를 puts 메소드에 넘겨줍니다. puts는 아규먼트로 넘어온 값을 단순히 newline과 함께 출력합니다.

Goodnight, John-BoyGoodnight, Mary-Ellen
``puts sayGoodnight("John-Boy")'' 이 문장은 두개의 메소드 호출을 하고 있습니다. 하나는 sayGoodnight이고 다은으로 puts입니다. 왜 sayGoodnight는 괄호를 사용해서 인자를 넘겨주는데 puts는 안그러냐구요? 그냥 취향입니다. 사실 아래 있는 것들 모두 같은 뜻입니다.

puts sayGoodnight "John-Boy"
puts sayGoodnight("John-Boy")
puts(sayGoodnight "John-Boy")
puts(sayGoodnight("John-Boy"))
하지만 삶은 그렇게 간단하지 않습니다. 괄호를 사용하면 어떤 인자가 어떤 메소드에 사용되는 것인지 헷갈리게 됩니다. 따라서 괄호는 단순한 경우에는 사용하지 않는것을 추천합니다.

이 예제는 Ruby의 문자열(string) 객체도 보여주고 있습니다. string 객체를 생성하는 방법은 다양하지만 가장 흔한 방법으로는 문자열 상수를 사용하는 방법입니다. 문자열 상수는 " " 나 ' ' 로 둘러쌓인 문자열을 말합니다. 이 두 형태의 차이점은 상수를 생성할 때 Ruby가 문자열에 처리를 하는 양이 다르다는 것입니다. ' ' 로 둘러쌓인 경우에 Ruby는 몇몇 예외처리 들과 매우 소수의 작업을 하며 ' ' 안에 있는 문자열 상수들이 문자열 값이 됩니다.

" "로 둘러쌓인 경우에 Ruby는 좀더 많은 일을 하는데, 우선. / 로 시작하는 문자를 binary 값을 바꿔줍니다. "\n"과 같은 경우 이 문자열을 newline 문자로 바꿔줍니다.

puts "And Goodnight,\nGrandma"

이 문장의 결과는 아래와 같습니다.

And Goodnight,Grandma

" "를 사용한 문자열은 #{ expression } 을 expression의 값으로 대체 할 수 있습니다. 이것을 사용하여 메소드를
재정의 할 수 있습니다.

def sayGoodnight(name)  result = "Goodnight, #{name}"  return resultend

#{...} 안에 있는 expression이 단순히 global, instance 또는 class 변수 일 경우에는 괄호를 사용하지 않아도 됩니다. string이나 Ruby의 기본 타입들은 47쪽부터 시작하는 챕터5를 보면 됩니다.

마지막으로 이 메소드를 좀더 단순하게 고칠수가 있는데 Ruby의 메소드는 맨 마지막 문장의 값을 return합니다. 따라서 return result문장을 지워도 됩니다.

def sayGoodnight(name)  "Goodnight, #{name}"end

하나만 더 알고 지나갑시다. Ruby의 naming 규칙입니다. 여기서 아직 배우지 않은 class 변수와 같은 말이 나오겠지만 그냥 들어두기 바랍니다.

Ruby는 여러가지 이름을 정할 때 약속이 있습니다. 지역 변수, 메소드 이름, 메소드의 파라미터들은 이름의 첫글자가 소문자로 시작합니다. 전역 변수는 $로 시작하고 인스턴스 변수는 @로 시작합니다. 클래스 변수는 @@이걸로 시작을 합니다. 마지막으로 클래스 이름, 모듈 이름, 상수는 대문자로 시작합니다.

'RUBY > Manual' 카테고리의 다른 글

Reading and 'Riting  (0) 2006.11.04
Blocks and Iterators  (0) 2006.11.03
Regular Expressions  (0) 2006.10.05
Control Structures  (0) 2006.10.04
Arrays and Hashes  (0) 2006.10.02
Some Basic Ruby  (0) 2006.09.26
Ruby Is an Object-Oriented Language  (0) 2006.09.17
Roadmap  (0) 2006.09.16
top

TAG ruby, string

Write a comment.


Ruby Is an Object-Oriented Language

RUBY/Manual : 2006.09.17 12:13


Ruby.new


이 책을 Top-down방식으로 구성하기 위해서 class와 object가 먼저 나오고 그 다음에 세부적인 문법들을 다루려고했지만 string이나 if문 연산자와 같이 기본적인 것을 모르면 class의 예를 들기가 어렵기 때문에 전체적으로는Top-down 방식으로 기술하지만 거기에 사용된 예를 이해하기 위한 세부적인 것 까지 추가하여 다르게 됩니다.

그럼 이제 부터 Ruby를 시작하기에 앞서 Ruby의 중요한 특징과 Ruby에서 사용되는 특별한 단어들에 대한 짧은 tutorial을 보겠습니다.

Ruby Is an Object-Oriented Language

Ruby는 진짜 객체지향 언어 입니다. 당신이 만들어 내는 모든 것이 객체 이고 그것들의 연산의 결과 역시 객체입니다. 하지만, 많은다른 언어들도 똑같이 객체 지향이라고 주장하며, 종종 객체 지향에 대한 다른 해석과 그들만이 사용하는 개념에 대한 다른 용어들을가지고 말을 합니다.

따라서 보다 세부적인 내용을 살표보기 전에, 먼저 우리가 사용할 용어들을 간략히 살펴봅시다.

Class는 state와 state를 사용하는 method들의 combination입니다.
(아래는 원문입니다.)
A class is a combination of state (forexample, the name of the song)and methods that use that state (perhapsa method to play the song).
Object는 class instance와 같은 말입니다.
(아래는 원문입니다.)
The word objectis usedinterchangeably with class instance (and being lazy typists,we'llprobably be using the word ``object'' more frequently).
Ruby는 이런 객체들은 생성자를 호출해서 만들 수 있습니다. 생성자는 class와 관련된 특별한 메소드 입니다. 기본 생성자는 new 를 통해서 불려집니다.

[CODE]song1 = Song.new("Ruby Tuesday")
song2 = Song.new("Enveloped in Python")
# and so on[/CODE]

이런 객체들은 같은 class로 부터 생성되었지만 그들은 각각 유일한 특성들을 가지고 있습니다.
먼저, 모든 객체들은 유일(무이)한 object identifier(짧게 object id라고도 합니다)를 가지고 있습니다.둘째,  당신은 instance variables을 정의할 수 있습니다. instance variable이란 각각의 객체에유일한 값을 가지고 있는 변수들을 말합니다. 이러한 변수들은 객체의 상태를 나타냅니다.

각각의 class들은 또한instance method들을 정의할 수 있습니다. 각각의 method는 자기 자신에 의해 호출되거나 class 밖에서호출되는 기능의 덩어리 입니다. 이러한 instance method들은 객체의 instance 변수와 객체의 상태에 접근할 수있고 습니다.

Method들은 객체에 메시지를 보내어 호출 됩니다(are invoked). message는method의 이름과 method가 필요로 하는 parameter들이 딸려 있습니다. 객체가 message를 받으면 해당하는method를 자신의 class에서 찾습니다. 만약에 발견하면 그 method는 수행되며 만약에 찾지 못하면...이 부분은나중에 다루겠습니다.

복잡하게 들릴지 모르겠지만 실제로는 매우 자연스럽습니다. 몇몇 method 호출을 살펴보겠습니다.(기억하세요 code 예제에 있는 화살표는 리턴되는 값을 보여줍니다.)

"gin joint".length » 9
"Rick".index("c") » 2
-1942.abs » 1942
sam.play(aSong) » "duh dum, da dum de dum ..."

Here, the thing before the period is called the receiver, andthe name after the period is the method to be invoked.  <- 무슨말인지 모르겠네요;
첫번째 것은 string의 길이를 요청했고, 두번쨰는 c가 몇번째에 있는지 알려달라고 했습니다. 세번째는 절대값을 마지막은 sam에게 노래를 불러 달라고 요청했습니다.

이쯤에서 다른 언어들과 Ruby의 차이를 말해야겠네요. Java에서는 어느 수의 절대값을 알고싶을 때 그 수를 따로 분리 되어 있는 함수를 호출하면서 인자로 넘깁니다. 아마도 다음과 같이 사용할 것입니다.
[CODE]number = Math.abs(number)     // Java code[/CODE]
Ruby에서는 절대값을 구하는 기능은 숫자들에 내장되어 있습니다. 세부사항은 숫자들이 내부적으로 알아서 관리합니다. 당신은 간단하게 abs message를 보내면 되는 것입니다.
[CODE]number = number.abs[/CODE]
이러한 것은 모든 Ruby객체에 적용됩니다: 이밖에도 C언어 에서는 strlen(name)이런 방법을 사용할 것을 Ruby에서는name.length를 사용합니다. 바로 이 부분이 우리가 Ruby가 진짜 객체 지향이라고 말하는 이유입니다.

'RUBY > Manual' 카테고리의 다른 글

Reading and 'Riting  (0) 2006.11.04
Blocks and Iterators  (0) 2006.11.03
Regular Expressions  (0) 2006.10.05
Control Structures  (0) 2006.10.04
Arrays and Hashes  (0) 2006.10.02
Some Basic Ruby  (0) 2006.09.26
Ruby Is an Object-Oriented Language  (0) 2006.09.17
Roadmap  (0) 2006.09.16
top

Write a comment.


Roadmap

RUBY/Manual : 2006.09.16 10:13


http://www.rubycentral.com/book/roadmap.html
위에 링크된 페이지를 보며 글을 작성합니다.

이 책은 총 네 파트로 나뉘어 지는데 다음과 같습니다.

In Part I, Ruby의 다양한 측면, Ruby tutorial을 보시게 됩니다. Ruby를 특별하게 하는 용어들과 개념에 대한 짧은 챕터들로 시작합니다. 물론 이 챕터들은 다른 챕터를 이해하기 위한 충분한 기본 문법도 제공합니다. tutorial은 top-down 방식으로  이 언어를 살펴볼 것입니다. 따라서 classes, objects, types , expressions 과 언어를 구성하는 모든 것을 살펴 볼 것입니다. 우리는 또한 문제가 발생했을 때 당신을 도울 수 있는 간략한 챕터로 마무리를 할 것입니다.

Ruby의 가장 멋진 점 중에 하나가 바로 주변 환경과 얼마나 잘 통합되느냐 입니다.
Part II, Ruby in Its Setting, 이부분을 공부하세요. 이 부분에서 당신은 Ruby를 실행하고, web에서 Ruby를 사용하기 위한 실용적인 정보를 찾을 수 있습니다. 당신은 Tk를 사용해서 어떻게 GUI를 생성하는지, 그리고 MS Windows 환경에서 Ruby를 어떻게 사용할지(native API calls, COM integration, Windows Automation) 배우게 될 것입니다. 결국에 Ruby를 확장하거나 당신의 code에 Ruby를 심는(embed) 것이  얼마나 쉬운지 알게 될 것입니다.

Part III, Ruby Crystallized, 이 부분은 매우 구체적인 내용을 포함하고 있습니다. 이 부분에서 당신은 언어의 매우 섬세한 모든 부분(the metaclassmodel, tainting, reflection, and marshaling)에 대해 볼 수 있습니다. You could probablyspeed-read this the first time through, but we found ourselves usingthe tables in this section even as we were writing the rest of thebook.


The Ruby Library Reference is Part IV. 매우 큽니다. 우리의 40개 이상의 기존에 만들어진 class와 mudule들에 있는 800개가 넘는 method들을 문서화 했습니다. It's big. We documentover 800 methods in more than 40 built-in classes and modules. 그중에서도, 우리는 Ruby에 있어 좀더 유용한 library module들 중 일부를 70페이지에 걸쳐 기술했습니다.


자 그럼 이책을 어떻게 읽어야 할까요?

그문제는 당신에게 달려있습니다. 당신의 일반적인 programming에 대한 level과 일부는 OO에 따라 당신은 이 책의 아주 적은 부분만을 읽기를 원할 것입니다. 그래서 우리가 다음과 같이 추천해 드립니다.

만약에 당신이 초보자라면, Part 1부터 읽기 바랍니다. 프로그램들을 작성할 때 library reference를 가까이 두기바랍니다. Array, Hash와 String같은 기본 class에 친숙해 지기 바랍니다. 환경에 점차 익숙해 짐에 따라, 당신은 Part 3에 있는 좀더 세밀한 부분을 알고 싶어질 것입니다.

만약에 자신이 Perl, Python, Java, or Smalltalk들에 익숙하다면,Chapter 2 부터 읽기를 제안합니다. 여기서 당신은 책을 따라 천천히 꾸준하게 책을 읽을 수도 있으며, 모든 부분을 skip하고 Part 3의 세밀한 부분으로 갈 수있습니다.

전문가들과 ``I-don't-need-no-stinking-tutorial'' 타입의 사람들은 199page부터 시작하는 Chapter 18에 있는 reference로 바로 뛰어 들 수 있습니다. library reference를 대강 살펴보더나 coffee coaster로 책을 사용할 수 있습니다.

물론, 책을 처음부터 읽거나 자신이 원하는 대로 읽어도 괜찮습니다.

아 그리고 잊지마세요. 만약에 자신이 알아 낼 수 없는 문제가 발생했을 때 도움을 드립니다. page 525쪽 부터 시작하는 Appendix C에 많은 정보가 있습니다.

'RUBY > Manual' 카테고리의 다른 글

Reading and 'Riting  (0) 2006.11.04
Blocks and Iterators  (0) 2006.11.03
Regular Expressions  (0) 2006.10.05
Control Structures  (0) 2006.10.04
Arrays and Hashes  (0) 2006.10.02
Some Basic Ruby  (0) 2006.09.26
Ruby Is an Object-Oriented Language  (0) 2006.09.17
Roadmap  (0) 2006.09.16
top

Write a comment.