Dec 162013
 

루비(Ruby)언어 정리

조건문

if

if Boolean [then | :]
   code1
[elsif Boolean [then | :]
   code
]...
[else
   code ]
end
  • Boolean : 식의 Return 값이 Boolean형인 결과 값
  • code1 : 조건(Boolean)이 참일 경우 실행
  • elsif : elseif 가 아니고 elsif인 것에 주의할 것

unless

if문과 반대로 작동함

unless Boolean [then | :]
   code1
[else
   code ]
end
  • Boolean : 식의 Return 값이 Boolean형인 결과 값
  • code1 : 조건(Boolean)이 거짓일 경우 실행

if/unless를 수식어 형태로 사용

puts "true" if res > 100 : 100보다 클 경우 true를 출력

puts "false" if new <= 100 : 100 이하일 경우 false를 출력

case 문

case value
when expression [, comparision]... [then | :]
   code
when expression [, comparision]... [then | :]
   code
.
.
.
[else
    code]
end

조건에 알맞는 value값에 대해 when의 조건에 맞는 것을 실행함

goal = 100
case goal
when 95..100
    puts "A+"
when 90...95
    puts "A"
when 85...90
    puts "B+"
when 80...85
    puts "B"
when 75...80
    puts "C+"
when 70...75
    puts "C"
else
    puts "F"
end

위와 같은 형식으로 Range와 함께 사용 가능

? 연산자

condition ? true : false 형식으로 이용.

예제: res = r >= 70 ? "pass" : "fail"

순환문

while

while condition [ do | : ]
   code
end 

condition의 조건이 참일 경우에만 실행

until

until condition [ do | : ]
    code
end

condition의 조건을 만족할 때 까지 실행

while/until의 수식어 형태 사용

value += 10 until value == 100

value += 1 while value < 100

for

for variable [, variable]... in collection [do | :]
    code
end

collection을 차례대로 variable에 넣으면서 code를 실행한다.

  • 예제 1
for value in 1..10
   data += value
end
  • 예제 2
for data in ["I", "love", "you"]
   puts data
end

Ruby Iterator

collection do |variable|
   code
end

collection의 내용을 variable에 하나씩 넣으면서 code를 실행. 아래는 이를 사용한 예제.

data = ["Hello", "World", "!!"]
res = ""

0.upto(grades.length - 1) do |loop_index|
    res = data[loop_index] + " "
end

puts res
  • 0.upto(n) : 0부터 n까지 순환문을 만듬
  • 10.downto(0) : 10부터 0까지 값을 감소시키며 순환
  • 2.step(11, 3) : 11까지 2부터 3씩 증가시키는 순환문 작성(예 : 2, 5, 8, 11)
  • 5.times : 5회 반복
  • data.each : data가 컬렉션이면 모든 항목들을 순서대로 가져옴
  • loop : 무한 루프 (break문을 통해서 반복문 탈출)

반복문에서 사용할 수 있는 구문

  • break : 반복문을 탈출
  • redo : 반복문의 현재 단계를 한 번 더 실행
  • next : 다음 단계를 실행함 (C++/JAVA++의 continue와 같음)
  • retry : 반복문을 처음부터 다시 시작

메소드 정의

hello란 이름의 메소드 정의

def hello
   puts "Hello World!!"
end

사용 방법은 hello라고 하는 것 만으로 가능

  • 메개변수 전달방법
def hello(name)
   puts "Hello World!!, " + name
end

hello "Gildong"
  • 가변 개수
def hello(data, *others)
    puts data + "!! Hello World!! " + others.join(", ")
end

hello "Ruby", "Gildong", "Gilsoon", "Cheolsoo"

Ruby에서 *는 배열이라는 뜻임. 파라미터를 넘길 경우에도 사용 가능

  • 메소드 값을 리턴
def sum(a, b)
    return a + b
end
  • 2개 이상의 값 리턴
def sum_minus(a, b)
    return a+b, a-b
end
arr = sum_minus(30, 20)   # 배열 형태
s, m = sum_minus(30, 20)  # 각각 리턴값이 s, m으로 리턴
  • 변수의 유효 범위

동일 이름일 경우에 매소드 내부가 최우선

  • 블록 (block)

메소드에 파라미터(Parameter)처럼 전달될 수 있는 코드를 말함, {}를 이용하여 작성

{ puts "Hello World!!" }

또는

do
   puts "Hello World!!" 
end

형태로 작성 가능함

yield문을 이용하여 블록을 실행할 수 있다.

def hello
    yield
end

hello { puts "Hello World!!" }
  • 블록에 데이터 전달
def hello
   yield "Ruby", "Gildong"
end

hello { |word1, word2| puts word1 + " Hello World!! " + word2 }

||안에 있는 변수에 차례대로 데이터가 전달된다.

  • 반복자와 함께 블록 사용
["Hello", "World", "!!"].each {|word| puts word}
4.times {puts "!"}
  • BEGIN/END 블록
BEGIN {puts "Hi "}

puts "Hello World!"

END { puts "Bye!" }

Ruby 프로그램이 메모리에 올라갈 때 BEGIN 블록이 실행 되며 종료 될 때 END 블록이 실행된다.


 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.