45
RMXP Day 3

RMXP 기초 Day 3 (Ruby 2부)

Embed Size (px)

DESCRIPTION

오프라인 강의 자료입니다. 오늘일자 강의는 사정상 토요일로 미뤄져서 슬라이드만 먼저 올립니다. 4일차 강의는 직접 해보는 실습 위주라 따로 슬라이드는 만들지 않을 것 같습니다. 이점 양해해 주시기 바랍니다.

Citation preview

Page 1: RMXP 기초 Day 3 (Ruby 2부)

RMXPDay 3

Page 2: RMXP 기초 Day 3 (Ruby 2부)

스크립트(계속) 조건 분기

• 주어진 조건식의 결과 (참 또는 거짓)에 따라 각각 다른 처리를 하기 위해 사용된다

• 이벤트 커맨드의 "조건 분기"와 같은 원리

Page 3: RMXP 기초 Day 3 (Ruby 2부)

비교 연산자• 두 식을 비교하여 조건식으로 표현할 때

• == 같다

• != 같지 않다

• < 작다

• > 크다

• <= 작거나 같다

• >= 크거나 같다

= 이 아니다! 혼동 주의할 것.

Page 4: RMXP 기초 Day 3 (Ruby 2부)

논리 연산자• and ("그리고", 양쪽의 식이 둘 다 성립하면 참(true), 그렇지 않으면 거짓

(false)이 된다)

• && and와 같은 뜻

• or ("또는", 양쪽의 식 둘 중 하나라도 성립하면 참(true), 그렇지 않으면(두개의 식 모두 성립하지 않는 경우) 거짓(false)이 된다)

• || or와 같은 뜻

• not ("아니다", 바로 뒤의 식이 성립하지 않으면 참(true), 그렇지 않으면(성립하면) 거짓(false))

• ! not과 같은 뜻

Page 5: RMXP 기초 Day 3 (Ruby 2부)

> p (100>77 and 1+1==2) true => nil > p (100>77 && 1+1==2) true => nil

Page 6: RMXP 기초 Day 3 (Ruby 2부)

> p (1+1==3 or 2+2==3) false => nil > p (1+1==3 || 2+2==3) false => nil

Page 7: RMXP 기초 Day 3 (Ruby 2부)

> p (not true) false => nil > p (!true) false => nil

Page 8: RMXP 기초 Day 3 (Ruby 2부)

조건 분기 - 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

Page 9: RMXP 기초 Day 3 (Ruby 2부)

조건 분기 - unless

> a=7 => 7 > unless a>=10 .. print "small" .. end small => nil

unless 조건 실행_내용 end

Page 10: RMXP 기초 Day 3 (Ruby 2부)

조건 분기 - 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

Page 11: RMXP 기초 Day 3 (Ruby 2부)

조건 분기 - 삼항연산자(?:)

> a=3 => 3 > p (a>=10 ? "big" : "small") "small" => nil

조건식 ? 참일 때의 값 : 거짓일 때의 값

Page 12: RMXP 기초 Day 3 (Ruby 2부)

루프(반복)

• 반복하여 특정 처리를 하기 위해 사용된다

• 루비에서는 forin 문법을 이용하여 배열의 요소를 간단히 열거할 수 있다

Page 13: RMXP 기초 Day 3 (Ruby 2부)

루프 - while> a=0 => 0 > i=1 => 1 > while i<=5 .. a+=i .. i+=1 .. end => nil > p a 15 => nil

while 조건 실행_내용 end

Page 14: RMXP 기초 Day 3 (Ruby 2부)

범위(Range) 오브젝트

1..5 # 1부터 5까지(1 <= i <= 5) 1...5 # 1부터 4까지(1 <= i < 5)

Page 15: RMXP 기초 Day 3 (Ruby 2부)

루프 - for> a=0 => 0 > for i in 1..5 .. a+=i .. end => 1..5 > p a 15 => nil

for 변수 in 범위 실행_내용 end

Page 16: RMXP 기초 Day 3 (Ruby 2부)

루프 - 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

Page 17: RMXP 기초 Day 3 (Ruby 2부)

루프 - next> for i in 1..5 .. if i==3 .. next .. end .. p i .. end 1 2 4 5 => 1..5

Page 18: RMXP 기초 Day 3 (Ruby 2부)

함수• 일련의 처리에 이름을 붙여 하나로 모은 단위

• 예) exit, p, print, sprintf, ...

• 함수의 처리에 필요한 값을 인수로 넘겨줄 수 있다. 인수를 받거나 받지 않을 수 있다.

• 처리하고 난 결과를 반환(return)값을 통해 돌려주거나 돌려주지 않을(nil) 수도 있다

• 특정 함수의 반환값을 다른 함수의 인수로 지정할 수 있다

Page 19: RMXP 기초 Day 3 (Ruby 2부)

함수의 사용 예 (난수 발생)> 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

Page 20: RMXP 기초 Day 3 (Ruby 2부)

함수의 정의

> def dice .. return rand(6) + 1 .. end => nil > p dice 5 => nil

def 함수의_이름 함수의_내용 return (반환값) end

Page 21: RMXP 기초 Day 3 (Ruby 2부)

매개변수와 인수> 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

Page 22: RMXP 기초 Day 3 (Ruby 2부)

디폴트 인수

> def dice(n=6) .. return rand(n)+1 .. end => nil > p dice # p dice(6) 1 => nil

# 디폴트 인수는 호출시에 생략할 수도, 생략하지 않을 수도 있다. 생략할 경우, 매개변수에는 자동으로 디폴트 인수(기본값)가 대입된다. def 함수의_이름(매개변수1, 매개변수2, 매개변수3=기본값) 함수의_내용 return (반환값) end

Page 23: RMXP 기초 Day 3 (Ruby 2부)

Ruby의 모든 데이터는 오브젝트> p 3.class Fixnum => nil > p 1.5.class Float => nil > p "Ruby".class String => nil > p (1..10).class Range => nil

Page 24: RMXP 기초 Day 3 (Ruby 2부)

메소드(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)

Page 25: RMXP 기초 Day 3 (Ruby 2부)

Ruby 레퍼런스

• 루비 코어 레퍼런스 (영문) - http://www.ruby-doc.org/core

• RDoc을 이용해 소스에서 추출한 레퍼런스입니다. String, Array, Symbol 등 모든 코어 클래스와 모듈에 대한 문서를 찾아볼 수 있습니다.

• https://www.ruby-lang.org/ko/documentation/

Page 26: RMXP 기초 Day 3 (Ruby 2부)
Page 27: RMXP 기초 Day 3 (Ruby 2부)

> a=65 # a는 Fixnum의 인스턴스 => 65 > p a.chr # chr는 Integer의 메소드

"A" => nil

Page 28: RMXP 기초 Day 3 (Ruby 2부)

상속(inheritance)

Animal

Cat Dog

Superclass

Subclass Subclass

Page 29: RMXP 기초 Day 3 (Ruby 2부)

상속(inheritance)

Integer

Fixnum Bignum

Superclass

Subclass Subclass

Page 30: RMXP 기초 Day 3 (Ruby 2부)

배열(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

Page 31: RMXP 기초 Day 3 (Ruby 2부)

배열(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

Page 32: RMXP 기초 Day 3 (Ruby 2부)

배열(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

Page 33: RMXP 기초 Day 3 (Ruby 2부)

배열(Array)의 반복> a=["one","two","three"] => ["one", "two", "three"] > for s in a .. p s .. end "one" "two" "three" => ["one", "two", "three"]

Page 34: RMXP 기초 Day 3 (Ruby 2부)

해시(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

Page 35: RMXP 기초 Day 3 (Ruby 2부)

해시(Hash) 값의 추가

> a={} => {} > a["Alex"]=2000 => 2000 > p a {"Alex"=>2000} => nil

Page 36: RMXP 기초 Day 3 (Ruby 2부)

해시(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

Page 37: RMXP 기초 Day 3 (Ruby 2부)

해시(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]

Page 38: RMXP 기초 Day 3 (Ruby 2부)

클래스(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

Page 39: RMXP 기초 Day 3 (Ruby 2부)

메소드(method) 정의> class Person .. def hello .. print "Hello" .. end .. end => nil

> alex=Person.new => #<Person:0x14ad48>

> alex.hello Hello => nil

def 메소드_이름 실행_내용 end

Page 40: RMXP 기초 Day 3 (Ruby 2부)

인스턴스 변수> 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

@변수_이름

Page 41: RMXP 기초 Day 3 (Ruby 2부)

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

Page 42: RMXP 기초 Day 3 (Ruby 2부)

오브젝트 초기화(생성자)

class Person def initialize @name="Alex" end end

class Person def initialize(name) @name=name end end

alex=Person.new("Alex")

Page 43: RMXP 기초 Day 3 (Ruby 2부)

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

Page 44: RMXP 기초 Day 3 (Ruby 2부)

감사합니다.

Page 45: RMXP 기초 Day 3 (Ruby 2부)

http://www.ryuhyeon.com