언어&플랫폼/ruby 2012. 10. 26. 14:29

주석 : #

 

정수

: 루비에서 정수는 Fixnum 또는 Bignum 클래스의 객체. Fixnum이 범위를 초과할 때마다, 그 객체는 자동으로 Bignum 객체로 변환된다. Bignum 객체의 범위는 사실상 사용할 수 있는 메모리에 달려있다.

 

 부동소수점

: 1.e3라고 쓰면 Fixnum 클래스의 e3 메서드를 호출하는 것으로 인식하기 때문
이다. 루비 1.8부터는 소수점 앞에도 반드시 숫자를 하나는 둬야 한다.           

12.34 → 12.34
-0.1234e2 → -12.34
1234e-2 → 12.34

 

문자열

a = 123
“\123mile“ → Smile
“Say \“Hello\““ → Say “Hello“
%Q!“I said ‘nuts‘,“ I said! → “I said ‘nuts‘,“ I said
%Q{Try #{a + 1}, not #{a - 1}} → Try 124, not 122
%<Try #{a + 1}, not #{a - 1}> → Try 124, not 122
“Try #{a + 1}, not #{a - 1}“ → Try 124, not 122
%{ #{ a = 1; b = 2; a + b } } → 3
 

변수/메서드 이름의 모호성 (ruby 구조가 마냥 좋아 보이지만은 않다)

클레멘스 한제(Clemens Hintze)가 올린 아래의 코드 조각은 모호성에 대한 다
소 병적인 예제다.


def a
    print “Function ‘a‘ called\n“
    99
end
for i in 1..2
    if i == 2
        print “a=“, a, “\n“
    else
        a = 1
        print “a=“, a, “\n“
    end
end

 

실행 결과:
a=1
Function ‘a‘ called
a=99

분석 중에 루비가 첫 번째 print 문에서 a를 만났을 때는, 아직 a에 대한 대입이
일어난 적이 없기 때문에, 이는 메서드 호출이라고 가정한다. 잠시 후, 두 번째
print 문에 다다랐을 때, 이때는 대입문을 이미 보았으므로, 이는 변수로 여긴다.

 

 

class Methods:

함수가 class difinition 밖에 정의되어 있다면 그것은 디폴트로 private이다.

하지만 class Methods는 디폴트로 public이다.

 

 

modules :

장점 2가지

1. namespace를 제공, 이름충돌을 막는다

2. mixin 을 구현 할 수 있다.

 

mixin - ruby는 다중 상속을 지원하지 않는다. 하지만 module을 사용하면 가능하다.

 

모듈은 인스턴스를 가질 수 없다. 왜냐하면 모듈은 클래스가 아니기
때문이다. 하지만, 클래스 선언에 모듈을 포함(include)할 수 있다. 모듈을 포함하면 이 모듈의 모든 인스턴스 메서드는 갑자기 클래스의 인스턴스 메서드처럼 동작하기 시작한다. 즉, 이 메서드가 클래스에 녹아서 섞여버린(mixed in) 것이다.
믹스인 된 모듈은 실제로는 일종의 상위 클래스처럼 동작한다.

 

 

집고 넘어 가자

require : c나 c++의 include와 비슷하다. java의 import와 비슷하다. 3rd program에서 이미 정의된 module을 사용하고 싶을때 module file을 부르기위한 구문이다.

require 'trig.rb'
require 'moral' #moral.rb 파일(.rb를 쓰지 않아도 된다)


include : class 안에서 module을 사용하고 싶을때 사용한다.

 

1. c개발자의 include와는 다르다. c는 전처리기를 이용하여 코드내용을 추가 시키는 것이지만, ruby의 include는 단지 해당 모듈에 대한 참조를 만들 뿐이다.

 

모듈이 작업중인 파일에 존재한다? : include 만 쓰면 된다.

아니다?                                        : require 해야 한다.

2.  include는 단순히 클래스에 모듈의 인스턴스 메서드를 복사하는 것이 아니
다. 그 대신, include는 클래스에 포함될 모듈에 대한 참조를 만든다. 만일 여러 클래스가 하나의 모듈을 포함할 경우, 이 클래스들은 모두 같은 모듈을 참조하게 된다. 그리고 프로그램 실행할 때 그 모듈의 메서드 정의를 수정하면, 그 모듈을 include하는 모든 클래스는 새로운 동작을 수행할 것이다

(메서드만 그렇다. 인스턴스 변수는 객체마다 고유)

 

 

 

load도 있네.

다른 파일을 포함하기 위해선

load 'aaa.rb'

require 'aaa.rb'

require 'aaa' 로 할 수 있다.

 

어디 어디 가면 두개의 차이점이 rb를 안써도 되냐 안되냐로 쓰여있었다.

 

음.. 차이점이라고 하기 매우 무색하다.

조금더 차이점이라 할 수 있는 것은 아래와 같다.

 

load require 차이점

load 메서드 -> 실행 될 때마다 해당 이름을 가진 루비 소스코드를 포함

require -> 해당 파일을 한번만 로드한다.

 

 

module - 조금 뒤에 나왔지만..

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end

class Sample
include A
include B
   def s1
   end
end

samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1

 

 

 

 

상속

 

[코드]

 

class Test1
  a       = 3   #지역변수
  @aa   = 4   #인스턴스 변수. 초기화 되지 않는다(nil이됨 ). initialize로만 가능
  @@aaa = 7   #클래스 변수(같은 클래스 안에서만 전역변수)
 
  def initialize(a)   #자바 생성자와 같다.
    @aa = a
  end
 
  def say_hello(name, talk)
    puts "hi, #{name}. #{talk} "
  end
 
  def print_value
    a     = 4
    puts a, @aa, @@aaa  #함수안의 a만 부를 수 있다.
  end
 
end

 

class Test2 < Test1  #상속
  def initialize(a)
    super(a)          #자바를 아는가? 그것이다. 그러니까 Test1의 initialize

                          #를 호출한다.
  end 
 
end

 

t1 = Test1.new(7)

t1.say_hello('cozy', 'i hate U')
t1.print_value
puts '--------------------------------'
t2 = Test2.new(5)
t2.print_value                              
t2.say_hello('ya', 'ne moendea')

 

[결과]

 

hi, cozy. i hate U
4
7
7
--------------------------------
4
5
7
hi, ya. ne moendea

 

 

 

계속..

 

 

 

java Vs Ruby 다른점 간단히 써둔 ppt : http://www.slideshare.net/Belighted/ruby-vs-java

 

posted by cozyboy
:
언어&플랫폼/ruby 2012. 10. 24. 15:00

주소 : http://www.tutorialspoint.com/ruby/ruby_blocks.htm

외국 사이트지만, 분류와 샘플 코드가 잘 되어 있다.

제어문 문법, 반복문, 예외처리 등등 목차가 반듯하며, 두세줄 짜리 샘플 코드가 있다. 코더는 말이 필요 없다. 코드만 있으면 될뿐. (암튼 영어지만, 알기 쉽다는 말임)

 

ruby 외에

ANT, Python, java, javascript, JSP, SQL, MySQL, C++, JDB, 등등등 많은 것들의 tutorial을 제공한다(pdf 다운도 가능).

 

posted by cozyboy
:
언어&플랫폼/ruby 2012. 10. 22. 13:46

이름의 첫번째 글자가 이 이름이 어떻게 사용될지를 정한다는 것이다.

 - 지역 변수, 메서드 형 식인수, 메서드 이름은 모두 소문자나 밑줄(_)로 시작

 - 전역 변수는 달러 표시($)로 시작하고

 - 인스턴스 변수는 앳 표시(@)로 시작한다.

 - 클래스 변수는 앳 표시 두 개(@@)로 시작하며

 - 클래스 이름, 모듈 이름, 상수는 대문자로 시작한다.

 

의미를 갖는 첫 번째 문자 이후에는 알파벳과 숫자 그리고 밑줄(_)을 이용한 어
떠한 조합이 와도 상관없다(@ 다음에는 숫자가 올 수 없다는 단서 조항이 있기는
하지만).

 

예외 ) 여러 단어로 이루어진 이름의 경우

인스턴스 변수  : 단어 사이에 밑줄을 넣어서 구분(instance_var),

클래스 이름     : MixedCase와 같이 각 단어의 첫 글자를 대문자로 한다.

posted by cozyboy
:
언어&플랫폼/ruby 2012. 10. 19. 17:58

1. 설치

[root@localhost ~]# yum install install ruby ruby-devel ruby-irb ruby-libs ruby-rdoc ruby-ri rubygems

 

 

2. tools 설명

  1) RubyGems(루비젬) : 루비젬(RubyGems)은 루비의 각종 라이브러리를 자동으로 설치하고 관리해주는 패키지 관리 유틸리티.(ruby용 yum or apt-get과 같다)

 

gem list -r msgpack : yum list | grep msgpack 과 같다

  -r : remote 로 gem에서 관리하는 곳에서 찾겠다는 것

  -l : local 로 내 컴퓨터에서 찾겠다는 것

 

실행 결과

*** REMOTE GEMS ***

msgpack (0.4.7 ruby mswin32 x86-mingw32)
msgpack-coder (0.0.1)
msgpack-idl (0.1.1)
msgpack-idl-java (0.1.1)
msgpack-jruby (1.2.0 java)
msgpack-rails (0.0.1)
msgpack-rpc (0.5.1)
msgpack_rpc_server (0.1.5)

 

gem install msgpack-rpc (gem으로 다운을 받으면 알아서 library  공간에 설치 된다. gem을 이용하여 각기 다른 버전을 운용할 수도 있다.)

 

 

 

  2) 루비 문서화 도구 RDoc, ri : 만일 소스 파일이 RDoc을 이용해서 문서화하고 있다면, 이 파일의 문서 부분을 추출하여 HTML과 ri 형식으로 변환할 수 있다. 

- RDoc 문서 site : http://www.ruby-doc.org 

 

현재 rb 코드 가 존재 하는 폴더에서

rdoc --op doc/

현재 존재하는 루비코드에 대한 doc가 자동으로 생성된다. (export javadoc 과 같다)

 

 

  3) ri : 같은 문서를 로컬에서 볼 수 있는 명령행 뷰어 프로그램

ex) ri GC, ri enable, ri GC.enable 과 같이 사용 할 수 있다

------------------------------------------------------------Class: GC
The GC module provides an interface to Ruby‘s mark and sweep
garbage collection mechanism. Some of the underlying methods are
also available via the ObjectSpace module.
--------------------------------------------------------------------
Class methods:
    disable, enable, start
Instance methods:
    garbage_collect

 

 

  4) irb(Interactive Ruby 대화형 루비 쏄)  : irb는 명령행 히스토리를 완
벽하게 지원하고, 줄 편집, 작업 제어 등의 기능이 있는 루비 셸 프로그램이다

ex)
% irb
irb(main):001:0> def sum(n1, n2)
irb(main):002:1>   n1 + n2
irb(main):003:1> end
=> nil
irb(main):004:0> sum(3, 4)
=> 7
irb(main):005:0> sum(“cat“, “dog“)
=> “catdog“

irb 탭 자동완성 : ~/.irbrc, irb.rc, _irbrc, $irbrc(좌측에서 우측 순으로 찾음)에 require 'irb/completion' 기입 (설치된 루비 인터프리터가 readline library 지원해야 한다). tab키고 자동완성 됨

 

 

 

3. Eclipse용 Ruby Development Tools (RDT)  url

: http://download.aptana.com/studio3/plugin/install

 

eclipse plugin 설치는 다들 아는 그 방법임.

url은 변경될 수도 있다. 그것을 위해 rdt 배포 사이트 첨가 : http://www.aptana.com/ 

 

RDT(Ruby dev tool) 설명

: http://www.ibm.com/developerworks/kr/library/os-rubyeclipse/

 

new -> Ruby Project 있을것임.

eclipse에 자바 혹은 c 와 같이 다른 프로젝트들이 있다면 workspace를 Ruby 전용으로 하나 더 만들자.  ruby는 경로에 매우 민감하다고 하는데, RDT를 실행 할때 다른 프로젝트들이 어떻게 변할 지 모른다. 시험해보지 말자. x박스 뜬다.

 

 

4. ruby 배우기, 훑기 좋은 사이트/블로그

기초 내용 훑기 : http://gnuteam.tistory.com/118

외국어 지만 강추 (책이 필요 없다. 만약.. c 혹은 기초언어 하나정도 알고 있다면,  몰라도 쉬움. 아마도)

 : http://www.tutorialspoint.com/ruby/ruby_blocks.htm

 

루비 한페이지 정리 : http://www.fincher.org/tips/Languages/Ruby/

 

한글(영어는 죽어도 싫다면., 그래도 위 싸이트가 훨씬 좋다) : http://www.ruby-lang.org/ko/documentation/

 - 루비를 설치할 필요도 없이 웹 브라우저만 가지고 루비를 실행해 볼 수 있다. 이site에서

 

posted by cozyboy
: