5. 루프 - for
> a=0
=> 0
> for i in 1..5
.. a+=i
.. end
=> 1..5
> p a
15
=> 15
for 변수 in 범위
실행_내용
end
6. 루프 - loop, break
i=0
# 주의: 다음을 실행하면
"무한루프"에 빠지게 된다.
loop do
i+=1
p i
end
# 이럴땐 do ~ end 블록 사이에
break 를 호출하여 루프를 종료할
수 있다.
i=0
loop do
i+=1
if i==5
break
end
p i
end
7. 루프 - next
> for i in 1..5
.. if i==3
.. next
.. end
.. p i
.. end
1
2
4
5
=> 1..5
8. 함수
• 일련의 처리에 이름을 붙여 하나로 모은 단위
• 예) exit, p, print, sprintf, ...
• 함수의 처리에 필요한 값을 인수로 넘겨줄 수 있다. 인수를
받거나 받지 않을 수 있다.
• 처리하고 난 결과를 반환(return)값을 통해 돌려주거나 돌
려주지 않을(nil) 수도 있다
• 특정 함수의 반환값을 다른 함수의 인수로 지정할 수 있다
9. 함수의 사용 예 (난수 발생)
> p rand(100) # 0~99까지에서 임의의 수를 뽑는다.
54
=> nil
> x=10
=> 10
> y=20
=> 20
> p rand(x+y) # x+y=30, 즉 0~29에서 임의의 수를 뽑는다.
21
=> nil
> p rand(6)+1 # 0 대신 1부터 시작, 1~6에서 임의의 수를 뽑는다.
6
=> nil
10. 함수의 정의
> def dice
.. return rand(6) + 1
.. end
=> nil
> p dice
5
=> nil
def 함수의_이름
함수의_내용
return (반환값)
end
11. 매개변수와 인수
> def abs(x)
.. if x<0
.. return -x
.. else
.. return x
.. end
.. end
=> nil
> p abs(-3)
3
=> nil
# 여러 개의 매개변수는 콤마 ',' 로 구
분한다.
def 함수의_이름(매개변수1, 매개변수
2, 매개변수3)
함수의_내용
return (반환값)
end
12. 디폴트 인수
> def dice(n=6)
.. return rand(n)+1
.. end
=> nil
> p dice # p dice(6)
1
=> nil
# 디폴트 인수는 호출시에 생략
할 수도, 생략하지 않을 수도
있다. 생략할 경우, 매개변수에
는 자동으로 디폴트 인수(기본
값)가 대입된다.
def 함수의_이름(매개변수1,
매개변수2, 매개변수3=기본값)
함수의_내용
return (반환값)
end
13. Ruby의 모든 데이터는 오브
젝트
> p 3.class
Fixnum
=> nil
> p 1.5.class
Float
=> nil
> p "Ruby".class
String
=> nil
> p (1..10).class
Range
=> nil
14. 메소드(method)
> a="Ruby" # 변수 a에 문자열을 대입하였으므로 String 타입을 갖는다.
=> "Ruby"
> p a.size # 문자열의 길이를 반환하는 메소드 (String의 멤버)
4
=> nil
> p a.upcase # 문자열을 대문자로 변환하여 반환하는 메소드 (String의 멤버)
"RUBY"
=> nil
> a=3
=> 3
> p a.upcase # Fixnum 클래스에 upcase 메소드가 정의되지 않았으므로 실패
(eval): undefined method `upcase' for 3:Fixnum (NoMethodError)
15. Ruby 레퍼런스
• 루비 코어 레퍼런스 (영문) - http://www.ruby-doc.org/
core
• RDoc을 이용해 소스에서 추출한 레퍼런스입니다. String,
Array, Symbol 등 모든 코어 클래스와 모듈에 대한 문서
를 찾아볼 수 있습니다.
• https://www.ruby-lang.org/ko/documentation/
16.
17. > a=65 # a는 Fixnum의 인스턴스
=> 65
> p a.chr # chr는 Integer의 메소드
"A"
=> nil
25. 해시(Hash) 값의 추가
> a={}
=> {}
> a["Alex"]=2000
=> 2000
> p a
{"Alex"=>2000}
=> nil
26. 해시(Hash)의 조작
> a={"Alex"=>2000,"Jack"=>2003}
=> {"Jack"=>2003, "Alex"=>2000}
> a.delete("Jack") # 해시에서 값을 삭제
=> 2003
> p a
{"Alex"=>2000}
=> nil
> a={"Alex"=>2000,"Jack"=>2003}
=> {"Jack"=>2003, "Alex"=>2000}
> p a.include?("Alex") # 포함하니?(키값)
true
=> nil
> p a.include?("Rabbit")
false
=> nil
27. 해시(Hash)의 반복
> a={3=>6,4=>10,5=>15}
=> {5=>15, 3=>6, 4=>10}
> p a.keys
[5, 3, 4]
=> nil
> for k in a.keys
.. p k
.. end
5
3
4
=> [5, 3, 4]
> for v in a.values
.. p v
.. end
15
6
10
=> [15, 6, 10]
28. 클래스(class) 정의
> class Person
.. end
=> nil
> alex=Person.new
=> #<Person:0x14ae9c>
> class Animal
.. end
=> nil
> class Cat < Animal
.. end
=> nil
class 클래스_이름
end
class 클래스_이름 < Superclass
end
클래스_인스턴스 = 클래스_이름.new
29. 메소드(method) 정의
> class Person
.. def hello
.. print "Hello"
.. end
.. end
=> nil
> alex=Person.new
=> #<Person:0x14ad48>
> alex.hello
Hello
=> nil
def 메소드_이름
실행_내용
end
30. 인스턴스 변수
> class Person
.. def name
.. return @name
.. end
.. def name=(name)
.. @name=name
.. end
.. def hello
.. print "I am "+@name
.. end
.. end
=> nil
> alex=Person.new
=> #<Person:0x14aa64>
> alex.name="Alex"
=> "Alex"
> alex.hello
I am Alex
=> nil
@변수_이름