Whiteship's Note


TextMate 괜찮군요~

Good Tools : 2008.08.27 21:31


사용자 삽입 이미지
이녀석으로 루비랑 좀 친해져볼까 합니다.

단축키를 커맨드+R 밖에 모르겠다는게 문젠데;;

한 줄 삭제, 자동 완성, 한 줄 복사 이 정도 단축키만 알아도 좋을텐데 말이죠...
top

TAG ruby, Textmate
  1. Favicon of http://decoder.tistory.com BlogIcon decoder 2008.08.27 22:29 PERM. MOD/DEL REPLY

    TextMate는 윈도용 클론이 있길래 함 써본적이 있는데, 영.. 이상하더군요 ㅋ
    맥이라 햄볶으시겠어요~ ㅋ

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2008.08.27 22:31 신고 PERM MOD/DEL

    맥북은 그냥 장난감 삼아 사용하고 있어요. 뭘 해도 노는 것 같은 기분이랄까요..

Write a comment.


1. 루비는 어떻게 동작하나?

RUBY/for Rails : 2007.06.06 10:35


참조 : 레일스를 위한 루비

- print 와 puts의 차이
puts는 출력을 한 다음에 항상 개행 문자 붙여준다.
puts는 개행 문자가 맨뒤에 붙어있을 경우 무시한다.(일부 OS(winXXX)에서는 말을 안듣는다.)

- 메소드 호출의 특이함
"100".to_i
100.to_s
직관적이고 편리하며 보다 더 객체지향적임

- 문법 오류 검사하기
ruby -cw 루비파일(c2f.rb)
c :: 문법검사
w :: 경고 메시지 보여주기

- 입출력
모니터로 출력은 살펴봤고
키보드로 입력은 gets
파일에서 입력은 File.read("파일명") 리턴값은 문자열
파일로 출력은 1. 파일 만들고(file = File.new("파일명") 2. 파일에 쓰고 file.puts "쓸것" 3. 닫기 file.close

- require 와 load
둘 다 다른 파일에 이는 코드를 현재 파일로 불러 온다.
차이점 : load는 호출할 때마다 해당 코드를 삽입 하지만 require는 한번만 삽입한다.
require 사용하여 라이브러리 로딩
예) require 'cgi' require 'REXML/Document'

- Command Line switch
-c 랑 -w는 살펴봤고
-e :: 뒤에 오는 문자열 실행
-v :: 버전 표시 + 상세 설명 모드에서 실행
-l :: 뒤에 오는 문자열 뒤에 무조건 개행
-rname :: name에 지정한 확장을 로드함(require)
--version :: 버전 표시

- Ruby 설치 폴더 찾기
1. irb -rrbconfig 실행
2. Config::CONFIG["찾을 폴더 식별자"]
찾을 폴더 식별자 :: bindir, rubylibdir, archdir, sitelibdir, sitearchdir

- 프로파일링
ruby -r profile 루비파일(c2f.rb)
프로그램을 수행하는데 드는 시간을 라인별로 확인할 수 있다. good

- ri 와 RDoc
RDoc은 JavaDoc와 같은 녀석
ri는 Java에 없는 것으로 RDoc의 정보를 찾아서 보여줌. 예)ri require

- ERb
매우 중요한 프로그램
HTML안에 루비코드를 포함시켜둔 다음 그 파일을 erb를 사용하여 읽으면 ERb가 루비 코드를 해석하여 HTML 파일을 재구성한다.
<% %>는 루비코드 실행 => JSP의 스크립틀릿
<%= %>는 루비코드로 출력 => JSP의 표현식

'RUBY > for Rails' 카테고리의 다른 글

2. 레일스는 어떻게 동작하는가?  (0) 2007.06.14
1. 루비는 어떻게 동작하나?  (0) 2007.06.06
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.


Eclipse에서 Ruby사용하기.

RUBY/Getting Started : 2006.09.22 12:12


http://www-128.ibm.com/developerworks/opensource/library/os-rubyeclipse/
Ruby프로젝트 생성, test, debug.

http://rubyeclipse.sourceforge.net/download.rdt.html
Ruby 플러그인 설치 방법.


'RUBY > Getting Started' 카테고리의 다른 글

RoR vs Java  (2) 2007.06.09
Eclipse에서 Ruby사용하기.  (0) 2006.09.22
Ruby in Twenty Minutes 4  (0) 2006.09.21
Ruby in Twenty Minutes 3  (0) 2006.09.20
Ruby in Twenty Minutes 2  (2) 2006.09.19
Ruby in Twenty Minutes 1  (0) 2006.09.18
Ruby 설치하기  (0) 2006.09.16
top

Write a comment.


Ruby in Twenty Minutes 3

RUBY/Getting Started : 2006.09.20 22:40


저번 글에서 만들어 두었던 class의 객체를 생성합시다.


g 객체를 한번 생성하면 그 이름이 Pat이라는 것을 기억하는군요. 흠.. 만약에 name 변수에 직접 접근하면 어떻게 될까요?


오호.. 안되는 군요..

Under the Object’s Skin

인스턴스 변수들은 항상 객체 속안에 숨겨져 있습니다. (인스턴스 변수는 @name 과 같이 @를 붙여서 만드나 봅니다.) 심하게 감춰져 있지는 않고 객체를 조사해보면 그들에게 접근 할 수 있는 다른 방법들이 존재합니다만...Ruby는 data를 숨기기 좋은 객체 지향 접근법을 사용합니다.

그럼 Greeter 객체 안에는 어떤 메소드들이 있을까요?


와오.. 엄청나게 많네요. 여기 보이는 메소드들은 Greeter 객체가 가지고 있는 모든 메소드입니다. 조상(부모도 포함됐겠죠? :)으로 부터 받은 많은 메소드들도 포함되어 있습니다. 만약에 우리가 만든 method들만 보고 싶다면 조상들에게 정의되어 있는 메소드를 보길 원치 않는 다는 의미로 false를 파라미터로 넘겨주면 됩니다.


자 그럼 이제 어떤 method들이 우리가 가진 객체가 반응을 하는지 봅시다:


say_hi와 to_s(어떤 것을 string으로 바꿔주는 method군요. 기본적으로 모든 객체들이 가지고 있습니다.) 그러나 name이란 메소드는 모르네요.

Altering Classes—It’s Never Too Late

만약에 name을 바꾸거나 보고 싶다면 어떻게 해야할까요? Ruby는 객체의 변수에 접근할 수 있는 쉬운 방법을 제공합니다.


Ruby에서는 class를 다시 열어서 수정을 할 수 있습니다. 기존에 이미 만들어져 있는 객체들은 바뀌지 않지만 이 후에 새로 만들어지는 객체들은 영향을 받습니다. 그래서 이제 새로운 객체를 만들고 @name 속성을 가지고 놀아봅시다.


attr_accessor 을 사용해서 getter에 해당하는 name과 setter에 해당하는 name= 두개의 메소드를 정의했습니다.

Greeting Anything and Everything, MegaGreeter Neglects None!

이 greeter 는 그다지 흥미롭지 않군요. 이 class는 오직 한번에 한사람만 다루는데요 여러 사람들에게 인사를 하는 class를 만들 순 없을까요?

그렇게 할 수 것을 Ruby interpreter인 IRB에 직접 쓰는 대신에 파일로 만들어 봅시다.

IRB를 끝내기 위해서 "quir"이나 "exit" 또는 그냥 컨트롤+D 를 입력합니다.

C:\Documents and Settings\keesun>ruby
class MegaGreeter
attr_accessor :names

#Create the object
def initialize(names = "world")
@names = names
end

#Say hi to everybody
def say_hi
if @names.nil?
puts "..."
elsif @name.respond_to?("each")

@name.each do
|name|
       puts "Hello #{name}!"
     end
   else
   puts "Hello #{@names}!"
   end
  end

  # Say bye to everybody
  def say_bye
   if @names.nil?
     puts "..."
   elsif @names.respond_to?("join")
     # Join the list elements with commas
     puts "Goodbye #{@names.join(", ")}.  Come back soon
   else
     puts "Goodbye #{@names}.  Come back soon!"
   end
  end

end

if __FILE__ == $0
  mg = MegaGreeter.new
  mg.say_hi
  mg.say_bye

  # Change name to be "Zeke"
  mg.names = "Zeke"
  mg.say_hi
  mg.say_bye

  # Change the name to an array of names
  mg.names = ["Albert", "Brenda", "Charles",
   "Dave", "Englebert"]
  mg.say_hi
  mg.say_bye

  # Change to nil
  mg.names = nil
  mg.say_hi
  mg.say_bye
end


cmd창을 열고 위처럼 입력한 뒤

컨트롤 + c를 입력하면 위에 입력한 것을 바로 처리합니다.

Hello world!
Goodbye world.  Come back soon!
Hello Zeke!
Goodbye Zeke.  Come back soon!
Hello AlbertBrendaCharlesDaveEnglebert!
Goodbye Albert, Brenda, Charles, Dave, Englebert.  Come back soon!
...
...

위와 같은 결과를 보셨다면 제대로 된 것입니다.

윈도우의 도스창에서 바로 실행시키지 않고.

위의 코드를 ri20min.rb 라고 저장한 뒤 ruby ri20min.rb 를 이용하여 실행하여도 같은 결과를 볼 수 있습니다.

'RUBY > Getting Started' 카테고리의 다른 글

RoR vs Java  (2) 2007.06.09
Eclipse에서 Ruby사용하기.  (0) 2006.09.22
Ruby in Twenty Minutes 4  (0) 2006.09.21
Ruby in Twenty Minutes 3  (0) 2006.09.20
Ruby in Twenty Minutes 2  (2) 2006.09.19
Ruby in Twenty Minutes 1  (0) 2006.09.18
Ruby 설치하기  (0) 2006.09.16
top

TAG ruby

Write a comment.


Ruby in Twenty Minutes 2

RUBY/Getting Started : 2006.09.19 21:59


저번에 이어 이번에는 "Hello World!"를 매번 전부 타자를 치지 않고 출력하는 방법은 없을 까요?

메소드를 만들어 봅시다.


위와 같이 코딩을 합니다.

def h 는 method 정의 부분을 시작하는 코드입니다. 이것은 Ruby에게 우리가 h라는 이름의 method를 정의하고 있다는 것을 알려줍니다.
다음 줄은 method의 body에 해당합니다. 우리가 전에 봤던 명령줄이랑 같습니다.
마지막으로 end는 Ruby에게 method 정의가 끝났다는 것을 알려줍니다.
Ruby의 nil 응답은 우리에게 method가 정의 됐다는 것을 알려줍니다.

The Brief, Repetitive Lives of a Method

이제는 위에서 만든 method를 몇번 호출해 봅시다.

매우 쉽네요. Ruby에서 method를 호출하는 방법은 method 이름을 부르면 되네요. 만약에 parameter들을 필요로 하지 않는 method라면 이렇게 해도 되는게 맞습니다. 비어있는 괄호를 추가시켜서 부를 수도 있지만 꼭 그럴 필요는 없지요.

만약에 kee sun이 아닌 특정 사람에게 인사를 전하고 싶다면 어떻게 해야할까요? h method가 이름을 parameter로 가지도록 재정의 하면 되겠네요.


몇가지 트릭이 사용되었는데요. 먼저 parameter로 이름을 주면서 method를 호출 해보고 다음에는 paramter가 없는 method를 다시 호출해 보았습니다. default parameter로 kee sun을 주었습니다. 이것은 name으로 오는 parameter가 없으면 "kee sun"을 출력하라는 것이네요.
그리고 원문에는 설명이 나와있지 않지만 아무래도 문자열.capitalize 메소드를 호출하면 문자열의 첫 문자를 대문자로 바꿔주는 듯 하네요.

Evolving Into a Greeter

만약에 진짜 greeter를 원한다면 어떨까요. 당신의 이름을 기억해두었다가 항상 당신에게 존경을 표하는 그런 것 말입니다. 당신은 아마도 그것을 위해 객체를 사용하길 원할 것입니다. "Greeter" class를 만들어 봅시다.


여기 새로 추가된 keyword는 class입니다. 이것은 Greeter라고 이름으로 새로운 class 정의 하고 class안에 method들을 정의합니다. @name 은 class내의 다른 method들에서 접근이 가능한 instance 변수 입니다. say_hi 와 say_bye 에서 사용한 것을 확인할 수 있습니다.



오늘은 여기까지 입니다. 다음 번에는 객체를 생성하여 사용하는 것을 살펴보겠습니다.


원문 : http://www.ruby-lang.org/en/documentation/quickstart/2/

번역 + 편역 : 기선

'RUBY > Getting Started' 카테고리의 다른 글

RoR vs Java  (2) 2007.06.09
Eclipse에서 Ruby사용하기.  (0) 2006.09.22
Ruby in Twenty Minutes 4  (0) 2006.09.21
Ruby in Twenty Minutes 3  (0) 2006.09.20
Ruby in Twenty Minutes 2  (2) 2006.09.19
Ruby in Twenty Minutes 1  (0) 2006.09.18
Ruby 설치하기  (0) 2006.09.16
top

TAG class, method, ruby
  1. Favicon of https://springframework.tistory.com BlogIcon 영회 2006.09.20 01:55 신고 PERM. MOD/DEL REPLY

    여기 루비 얘기 좀 있더라

    http://beyond.daesan.com/

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2006.09.20 10:14 신고 PERM MOD/DEL

    와오.. 그렇군요 ㅎㅎ 감사합니다.

Write a comment.


Ruby in Twenty Minutes 1

RUBY/Getting Started : 2006.09.18 12:01


http://www.ruby-lang.org/en/documentation/quickstart/
위 링크를 따라하며 글을 씁니다.

Introduction

이것은 20분정도 걸리는 짧은 tutorial입니다. 이미 Ruby를 설치했다는 가정하에 시작하겠습니다.

Interactive Ruby

IRB를 실행합니다.
  • Mac OS X 사용자는 터미널을 열고 irb를 type한뒤 enter를 칩니다.
  • Linux 사용자는 쉘을 열고 ibr를 type하고 enter칩니다.
  • Windows 사용자는 Start menu의 Ruby section에서 fxri를 엽니다.


위와 같은 화면이 뜹니다.

콘솔에서 "Hello World"를 입력합니다.


위와 같이 출력됩니다.

Ruby Obeyed You!

두번째 줄에 나타난 것은 IRB가 마지막 expression이 수행되었다는 것을 우리에게 알려주는 방법입니다. 만약에 "Hello Wrold!"를 출력하기 원한다면 조금만 더 추가하면 됩니다.

puts는 Ruby에서 뭔가를 출력하는 기본 명령어 입니다. 그럼 => nil은 무엇일까요?
expression의 결과 입니다. puts는 항상 nil을 return합니다. nil은 Ruby의 absolutely-positively-nothing value입니다.

Your Free Calculator is Here

IRB는 또한 기본 계산기로도 충분히 사용할 수 있습니다.

위의 연산 결과를 보시면 직관적으로 알 수 있습니다. ** 는 제곱 연산을 할 때 사용하네요.
Math.sqrt(9)는 Java에서 사용하던 Math class와 같은 방법으로 사용하는 것을 볼 수 있습니다.

Modules, Group Code by Topic

Math는 수학을 위해 만들어져 있는 모듈(built-in module)입니다. 모듈들은 Ruby에서 두가지 역할을 합니다. 여기서는 한가지 역할을 보여 줍니다: 비슷한 method들을 비슷한 이름으로 모아 두는 것입니다. Math는 sin()이나 tan()과 같은 method들 역시 포함하고 있습니다.

다음은 dot(쩜)입니다. dot이 한일이 무엇인가요? dot은 message의 수신자를 어떻게 식별하는지를 나타냅니다. message가 무엇이냐구요? 이번 경우에는 parameter인 9를 가지고 square root를 구하라는 method를 호출한다는 의미의 sqrt(9)가 message입니다.

method 호출의 결과값은 3.0입니다. 여기서 여러분은 아마 3이 아니라는 것을 알아차렸을 것입니다. 이것은 보통 square root가 정수가 아니기 때문입니다. 그래서 이 method는 항상 소수점을 가진 수를 return합니다.

만약에 우리가 이 연산의 결과를 기억하고 싶다면 어떻게 해야할까요? 변수에 결과를 대입하세요.


총 4 단계로 이루어진 글인데요. 일단 여기서 1 단계를 마칩니다.

'RUBY > Getting Started' 카테고리의 다른 글

RoR vs Java  (2) 2007.06.09
Eclipse에서 Ruby사용하기.  (0) 2006.09.22
Ruby in Twenty Minutes 4  (0) 2006.09.21
Ruby in Twenty Minutes 3  (0) 2006.09.20
Ruby in Twenty Minutes 2  (2) 2006.09.19
Ruby in Twenty Minutes 1  (0) 2006.09.18
Ruby 설치하기  (0) 2006.09.16
top

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.


Ruby 설치하기

RUBY/Getting Started : 2006.09.16 11:24


http://www.ruby-lang.org/en/downloads/
위 링크에서 글을 보고 있습니다.

저는 windows에서 해볼 것이기 때문에 아랫 부분만을 봤습니다.

Ruby on Windows

TheWindows platform has several options for installing Ruby. The firstoption is simply installing the compiled binaries. The second option isto use the one-click installer. If you’re unsure about how to installRuby, the one-click installer may be the best option for you. (Inaddition to Ruby, the one-click installer also comes with a bunch ofadditional libraries built in.)


두 가지 방법이 있는 하나는 컴파일 된 바이너리 파일들을 설치하는 것이고 다른 방법은 훨씬 간펴한 원클릭 인스톨러로 설치하는 것이군요.

당연히;; 간편하게 원클릭 인스톨러를 다운 받습니다.

윽.. 인터넷이 느린건지 시간이 좀 걸리네요..

다운받는 동안
http://tryruby.hobix.com/
이 곳에서 Ruby를 체험해 볼 수 있습니다.

와.. 엄청나네요.. 이걸 어떻게 만들었을지.. 정말 아이디어 부터 디자인, 개발 한 것 까지 정말 대단하네요.. 시간가는 줄 모르고 빠져들었습니다. ㅋ 다운로드가 다 됐슴에도 불구하고 끝까지 따라 해보고 있습니다.

역시 설치는 클릭 몇번이면 끝나는 군요.

freeRIDE라는 IDE를 실행하고 다운받는 동안 놀아봤던 간단한 문장 몇개를 적은 뒤 run을 실행해 봤습니다.
그러나.. window에서 사용할 때는 debug 옵션에서 무언가 체크해줘야 한다는 에러메시지가 출력되더군요.
그래서 옵션이 어디있는가 찾아 보다가.. debug를 클릭했더니 ㅜㅜ 얼었네요.. 아 갈길이 머네요. 오늘은 한탬포 쉬겠습니다.




'RUBY > Getting Started' 카테고리의 다른 글

RoR vs Java  (2) 2007.06.09
Eclipse에서 Ruby사용하기.  (0) 2006.09.22
Ruby in Twenty Minutes 4  (0) 2006.09.21
Ruby in Twenty Minutes 3  (0) 2006.09.20
Ruby in Twenty Minutes 2  (2) 2006.09.19
Ruby in Twenty Minutes 1  (0) 2006.09.18
Ruby 설치하기  (0) 2006.09.16
top

TAG install, ruby

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.