루비를 마음먹은 이유, 그리고 몇가지...
과연 루비가 나를 위한 루비가 되어 줄까? 물론 나는 그러길 바라면서 공부를 하고 있다. 그리고 처음 공부한 루비는 그럴 것 같다는 느낌을 조금씩 주기 시작했다.

루비를 공부해봐야겠다고 확신한 시점은.. 바로 이거였다.
>ruby
"1"+1
^D
-:1:in `+': cannot convert Fixnum into String (TypeError)
         from -:1

이게 뭐냐구요?? 일반적인 스크립트 언어들에서 잘 되는 문법이다. 숫자건 문자건 가리질 않는다. 대충 연산을 하면 연산이 알아서 된다. 즉 느슨한 타잎을 사용한다. 그래서 루비에서도 그런 테스트를 해봤는데 안되는 것이다. 어디선가 봤다. 루비는 강력한 타잎을 사용한다고.. 그랬다. 사실 저게 되는것은 문제가 있고 나는 늘 그것이 불만이었다. 그런데 반갑게도 루비에서는 안되는 것이다. 이렇게 하면 된다.
"1".to_i + 1

또는..
"1" + 1.to_s

당연한 이야기지만 결과는 다르다. 전자는 2, 후자는 "11"이다. 이것은 루비를 공부해야겠다는 강력한 동기를 부여했다. 좋다. 루비다..

그 외에도 프로그래밍을 즐겁게 할 만한 요소들을 몇몇 제공한다. 대표적인 것이 콜백하는 함수와 그것을 이용해서 클래스의 객체가 값을 주면서 일정한 문장을 반복해서 수행하게 하는 것이 가능하다. 먼저 콜백하는 함수는 이렇게 생겼다
def callbackFunc
   yield
end

callbackFunc do
   puts "Hello"
end

이렇게 하면 callbackFunc에 의해서 do~end의 내용인 puts "Hello"가 실행이 된다. 이런것을 이용해서 아래와 같은 구문이 가능해진다.
class RubyMyTest
   def each
      t=10
      while t>0
         yield(t, t+1)
         t-=4
      end
   end
end

test = RubyMyTest.new
test.each do |current,next|
   puts "Hello" + current.to_s + next.to_s
end

이것은 바로 배열과 해쉬에서 각 값들을 하나씩 꺼내서 사용하는데 이용된다. 즉..
test = ['a', 'b', 'c']
test.each do |val|
   puts val
end

이렇게 하면 다음과 같은 출력이 나온다.
a
b
c

물론 이렇게 배열이나 해쉬를 순서대로 하나씩 꺼내는 것은 다른 언어들에서 foreach라고 지원하기도 한다. 하지만 이것은 그것과는 개념이 다르다. 간단한 예이긴 하지만 잘 이용될 수 있는 구문이라고 생각된다. 물론 위의 "RubyMyTest"클래스에서도 이런 매쏘드의 이름을 each라고 할 필요는 없다. 하지만 그렇게 할 때 배열이나 해쉬 클래스와 조화를 이룰 수 있고 의미도 맞는 것 같다.

또 한가지는 함수의 파라메터이름에 &를 앞에 사용하면 블럭을 넘겨받아서 그 변수 이름의 메서드로 call을 호출하여 그 블럭을 실행시킬 수 있다. 다음이 그 예이다

def callme &callbackBlock
   callbackBlock.call
end

callme do 
   puts "hello"
end


이 구문은 callme라는 함수에 의해서 do~end안의 puts "hello"를 실행시키는 것이다.

그 외에도 "digits = 0..9"와 같이 범위를 주어서 변수를 만들기도 하고 함수 이름에 ?를 사용하기도 한다. 앞으로도 더 살펴봐야겠지만 이처럼 루비는 시작부터 신선했다.
by 이한길 | 2006/04/24 12:45 | Ruby | 트랙백(2) | 덧글(0)
트랙백 주소 : http://hangulee.egloos.com/tb/6407
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from casin+¦.. at 2008/08/20 06:27

제목 : casin+¦ su internet
expansible railroads.screamer periodically shadiest unites ...more

Tracked from at 2008/09/30 22:06

제목 :
Casey?spitting spire crosser ...more

:         :

:

비공개 덧글



< 이전페이지 다음페이지 >