RMXP 기초 Day 3 (Ruby 2부)
-
Upload
sunwoo-park -
Category
Software
-
view
224 -
download
2
description
Transcript of RMXP 기초 Day 3 (Ruby 2부)
RMXPDay 3
스크립트(계속) 조건 분기
• 주어진 조건식의 결과 (참 또는 거짓)에 따라 각각 다른 처리를 하기 위해 사용된다
• 이벤트 커맨드의 "조건 분기"와 같은 원리
비교 연산자• 두 식을 비교하여 조건식으로 표현할 때
• == 같다
• != 같지 않다
• < 작다
• > 크다
• <= 작거나 같다
• >= 크거나 같다
= 이 아니다! 혼동 주의할 것.
논리 연산자• and ("그리고", 양쪽의 식이 둘 다 성립하면 참(true), 그렇지 않으면 거짓
(false)이 된다)
• && and와 같은 뜻
• or ("또는", 양쪽의 식 둘 중 하나라도 성립하면 참(true), 그렇지 않으면(두개의 식 모두 성립하지 않는 경우) 거짓(false)이 된다)
• || or와 같은 뜻
• not ("아니다", 바로 뒤의 식이 성립하지 않으면 참(true), 그렇지 않으면(성립하면) 거짓(false))
• ! not과 같은 뜻
> p (100>77 and 1+1==2) true => nil > p (100>77 && 1+1==2) true => nil
> p (1+1==3 or 2+2==3) false => nil > p (1+1==3 || 2+2==3) false => nil
> p (not true) false => nil > p (!true) false => nil
조건 분기 - if문> a=7 => 7 > if a>=10 .. print "big" .. elsif a>=5 .. print "medium" .. else .. print "small" .. end medium => nil
if 조건1 실행_내용 elsif 조건2 실행_내용 elsif 조건3 실행_내용 (...) else 실행_내용 end
조건 분기 - unless
> a=7 => 7 > unless a>=10 .. print "small" .. end small => nil
unless 조건 실행_내용 end
조건 분기 - case> a=0 => 0 > case a .. when 0 .. print "good" .. when 1 .. print "normal" .. when 2 .. print "bad" .. end good => nil
case 변수 when 값1 실행_내용 when 값2 실행_내용 when 값3 실행_내용 end
조건 분기 - 삼항연산자(?:)
> a=3 => 3 > p (a>=10 ? "big" : "small") "small" => nil
조건식 ? 참일 때의 값 : 거짓일 때의 값
루프(반복)
• 반복하여 특정 처리를 하기 위해 사용된다
• 루비에서는 forin 문법을 이용하여 배열의 요소를 간단히 열거할 수 있다
루프 - while> a=0 => 0 > i=1 => 1 > while i<=5 .. a+=i .. i+=1 .. end => nil > p a 15 => nil
while 조건 실행_내용 end
범위(Range) 오브젝트
1..5 # 1부터 5까지(1 <= i <= 5) 1...5 # 1부터 4까지(1 <= i < 5)
루프 - for> a=0 => 0 > for i in 1..5 .. a+=i .. end => 1..5 > p a 15 => nil
for 변수 in 범위 실행_내용 end
루프 - 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
루프 - next> for i in 1..5 .. if i==3 .. next .. end .. p i .. end 1 2 4 5 => 1..5
함수• 일련의 처리에 이름을 붙여 하나로 모은 단위
• 예) exit, p, print, sprintf, ...
• 함수의 처리에 필요한 값을 인수로 넘겨줄 수 있다. 인수를 받거나 받지 않을 수 있다.
• 처리하고 난 결과를 반환(return)값을 통해 돌려주거나 돌려주지 않을(nil) 수도 있다
• 특정 함수의 반환값을 다른 함수의 인수로 지정할 수 있다
함수의 사용 예 (난수 발생)> 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
함수의 정의
> def dice .. return rand(6) + 1 .. end => nil > p dice 5 => nil
def 함수의_이름 함수의_내용 return (반환값) end
매개변수와 인수> 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
디폴트 인수
> def dice(n=6) .. return rand(n)+1 .. end => nil > p dice # p dice(6) 1 => nil
# 디폴트 인수는 호출시에 생략할 수도, 생략하지 않을 수도 있다. 생략할 경우, 매개변수에는 자동으로 디폴트 인수(기본값)가 대입된다. def 함수의_이름(매개변수1, 매개변수2, 매개변수3=기본값) 함수의_내용 return (반환값) end
Ruby의 모든 데이터는 오브젝트> p 3.class Fixnum => nil > p 1.5.class Float => nil > p "Ruby".class String => nil > p (1..10).class Range => nil
메소드(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)
Ruby 레퍼런스
• 루비 코어 레퍼런스 (영문) - http://www.ruby-doc.org/core
• RDoc을 이용해 소스에서 추출한 레퍼런스입니다. String, Array, Symbol 등 모든 코어 클래스와 모듈에 대한 문서를 찾아볼 수 있습니다.
• https://www.ruby-lang.org/ko/documentation/
> a=65 # a는 Fixnum의 인스턴스 => 65 > p a.chr # chr는 Integer의 메소드
"A" => nil
상속(inheritance)
Animal
Cat Dog
Superclass
Subclass Subclass
상속(inheritance)
Integer
Fixnum Bignum
Superclass
Subclass Subclass
배열(Array)의 생성> a=[2000,"Alex",true,1..50] => [2000, "Alex", true, 1..50] > p a[0] 2000 => nil > p a[1] "Alex" => nil > p a[2] true => nil > p a[3] 1..50 => nil > p a [2000, "Alex", true, 1..50] => nil
배열(Array) 요소의 대입> a=[10,20,30] => [10, 20, 30] > a[0]=100 => 100 > a[3]=40 # 배열이 첨자를 포함하기 위해 동적으로 확장된다.
=> 40 > a[5]=60 # 이때 빈 공간에는 nil을 삽입한다.
=> 60 > p a [100, 20, 30, 40, nil, 60] => nil
배열(Array)의 조작> a=["one","two","three"] => ["one", "two", "three"] > p a.size # 배열의 요소 갯수
3 => nil > p a.include?("three") # 포함하니?
true => nil > p a.include?("seven") false => nil
배열(Array)의 반복> a=["one","two","three"] => ["one", "two", "three"] > for s in a .. p s .. end "one" "two" "three" => ["one", "two", "three"]
해시(Hash)의 생성> a={"Alex"=>2000,"Jack"=>2003} => {"Jack"=>2003, "Alex"=>2000} > p a["Alex"] 2000 => nil > p a["Jack"] 2003 => nil > p a["Rabbit"] nil => nil
해시(Hash) 값의 추가
> a={} => {} > a["Alex"]=2000 => 2000 > p a {"Alex"=>2000} => nil
해시(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
해시(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]
클래스(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
메소드(method) 정의> class Person .. def hello .. print "Hello" .. end .. end => nil
> alex=Person.new => #<Person:0x14ad48>
> alex.hello Hello => nil
def 메소드_이름 실행_내용 end
인스턴스 변수> 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
@변수_이름
attr_accessor, attr_reader
attr_accessor :name
attr_reader :name
def name return @name end def name=(name) @name = name end
def name return @name end
오브젝트 초기화(생성자)
class Person def initialize @name="Alex" end end
class Person def initialize(name) @name=name end end
alex=Person.new("Alex")
Method Overriding> class Hahaha .. def laugh(x) .. return "ha"*x .. end .. end => nil > class Wahaha < Hahaha .. def laugh(x) .. return "wa"+super .. end .. end => nil > man=Wahaha.new => #<Wahaha:0x14aa64> > p man.laugh(4) "wahahahaha" => nil
감사합니다.
http://www.ryuhyeon.com