전체 보기
🚀

Ruby 언어 문법 정리

작성일자
2024/11/19
태그
ETC
프로젝트
책 종류
1 more property

입출력

출력하기: 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
복사

참고 자료