입출력
•
출력하기: print 3 → 3
•
개행과 함께 출력하기: puts 3 → 3\n
•
포맷해서 출력하기
a = "title"
b = "dora"
puts "#{a} #{b}" # title dora
puts "#{a.ljust(30)} #{b}" # 최소 30자의 길이로 왼쪽 정렬
Ruby
복사
배열
•
선언하기: ticket = [14,37,18]
•
정렬하기: ticket.sort!
•
인덱스 기반 접근하기: ticket[0]
•
출력하기
◦
그대로 출력하기: print ticket → [14, 37, 18]
◦
개행과 함께 출력하기: puts ticket → 14\n37\n18
문자열
•
대체하기: poem.gsum(”toast”, “honeydew”)
•
대소문자 바꾸기
◦
소문자로 바꾸기: poem.downcase
◦
대문자로 바꾸기: poem.upcase
◦
각각 바꾸기: poem.swapcase → “hELLO\nhOW ARE YOU?”
•
개행 기준으로 나누기: poem.lines → [”Hello\n”, “How are you?”\n”]
•
뒤집기: poem.lines.reverse → [“How are you?”\n”, ”Hello\n”]
•
합치기: poem.lines.reverse.join → “How are you?\nHello\n”
•
특정 텍스트 포함되어 있는지 확인하기: “user_123”.match(/^user_(\d+)/)
◦
my_string[0..4] == 'user_’ 도 가능함
심볼(Symbols)
•
문자열 앞에 콜론(:) 을 붙이면 심볼이 됨. 문자열보다 더 적은 메모리 차지함. 불변객체
•
books[”Dora”] = :splendid → {”Dora” = > :splendid}
해시(Hashes)
•
자바의 HashMap과 동일 (HashSet과 동일한 건 Set)
•
빈 해시 만들기: books = {} → {}
•
없는 키 접근 시 기본값 반환하게 만들기: ratings = Hash.new {0} → {}
◦
{} 는 Hash.new의 단축 표현
•
키와 값 넣기: books[”Dora”]=”good” → {”Dora”=>“good”}
•
키 모아보기: books.keys → [”Dora”, “Hello”]
•
값 모아보기: books.values → [”good”, :splendid]
•
키로 값 찾기: books[”Dora”] → “Hello” (없는 키면 아무것도 반환 안함)
블록(Blocks)
•
블록은 항상 메서드에 연결됨
반복문
•
반복하기
5.times { print "Dora " }
3.times { |i| # 0 1 2
puts i
}
for i in 0..nums.length
puts i
for j in i..nums.length
puts j
end
end
(1..nums.length).each { |i|
puts i
}
Ruby
복사
•
배열 순회하기
ratings = Hash.new {0}
books.values.each { |rate| # rate -> values 의 각 element
ratings[rate] += 1 # 키와 값 넣기
}
puts ratings # {"good"=>1, :splendid=>1}
Ruby
복사
•
해시 순회하기
books = {
"Dora" => {"title" => "good"},
"Dora2" => {"title" => "good2"}
}
books.each { |key, val|
puts val["title"]
}
Ruby
복사
함수
•
괄호 쓰든 안쓰든 상관 없음
puts "Hello"
puts("Hello")
poem.gsub("toast", "honeydew")
poem.gsub "toast", "honeydew"
Ruby
복사
•
함수 정의하기
def tame( number )
number.times {
puts "Hi" # Hi Hi Hi
}
return number # 없어도 같은 결과 나옴 (마지막 평가된 값을 자동으로 반환함)
end
puts tame(3) # 3
Ruby
복사
•
메서드 체이닝 이용하기
def count_plays(year)
get_shakey["William Shakespeare"]
.select { |k, v| # 블록을 사용해 선택할 항목을 정의하고, 선택된 값을 반환함
v["finished"] == year
}.each { |key, val|
puts val["title"]
}.count
end
def print_plays(year_from, year_to)
get_shakey["William Shakespeare"]
.select { |k, v|
year_from <= v["finished"] &&
year_to >= v["finished"]
}.each { |k, v|
puts "#{v["title"].ljust(30)} #{v["finished"]}"
}
end
def hungry?(time_of_day_in_hours)
if time_of_day_in_hours < 12
puts "Me not hungry"
false
else
puts "Me hungry"
true
end
end
Ruby
복사
조건문
•
결정 내리기
# if는 하나의 매개변수(테스트하고 싶은 표현식)를 요구함
if 1 < 2
puts "참"
else
puts "거짓"
end
# if는 메서드 앞이나 뒤에 위치할 수 있음
puts "참입" if 1 < 2
# 3항 연산자
puts 1 < 2 ? "참" : "거짓"
Ruby
복사
•
표현식의 결과는 true 또는 false 여야 함
5 <= 10 # => true
'abc' == 'def' # => false
true # => true
false # => false
123456 # => true
0 # => true
nil # => false
'xyz'.empty? # => false
# 'a' > 5 # => 에러: 문자열과 숫자를 비교할 수 없음
Ruby
복사
클래스
•
클래스 정의하기
class Blurb
attr_accessor "content", :time, :mood
# 해당 이름의 인스턴스 변수에 대한 getter, setter 자동 생성
# 읽기 전용: attr_reader, 쓰기 전용: attr_writer
end
blurb = Blurb.new
blurb.content = "루비 배우는 중!"
blurb.time = Time.now
blurb.mood = "행복함"
puts blurb.content # => "루비 배우는 중!"
puts blurb.time # => 현재 시간 출력
puts blurb.mood # => "행복함"
Ruby
복사
class Blurb
attr_accessor :content, :time, :mood
def initialize(mood, content="")
@time = Time.now # 객체 변수
@content = content[0..39]
@mood = mood
end
def moodify
if @mood == :sad
return "슬픔"
elsif @mood == :happy
return "기쁨"
end
"기본 기분"
end
end
puts Blurb.new(:sick).time # 접근자
Ruby
복사
class Blurbalizer
def initialize(title)
@title = title
@blurbs = [] # 새롭고 깔끔한 배열, Blurbs를 저장할 공간
end
def add_a_blurb(mood, content)
# <<는 배열의 끝에 추가하는 것을 의미
@blurbs << Blurb.new(mood, content)
end
def show_timeline
puts "Blurbify: #{@title}에는 #{@blurbs.count}개의 Blurbs가 있습니다"
@blurbs.sort_by { |t|
t.time
}.reverse.each { |t|
puts "#{t.moodify} #{t.content.ljust(40)} #{t.time}"
}
end
end
myapp = Blurbalizer.new "The Big Blurb"
myapp.add_a_blurb :moody, "Add Blurb here"
myapp.show_timeline
Ruby
복사
기타
puts s.class
puts s.methods
puts s.respond_to?(:match)
Ruby
복사