루비(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 블록이 실행된다.