읽기 메서드와 쓰기 메서드
Coddy Ruby 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 7번째.
각 인스턴스 변수에 대해 리더 메서드를 작성하는 것은 반복적인 작업입니다. 클래스 본문에 있는 attr_reader :title은 @title을 반환하는 title 메서드를 생성합니다. 한 줄에 여러 이름을 나열할 수 있습니다:
class Book
attr_reader :title, :pages
def initialize(title, pages)
@title = title
@pages = pages
end
end
book = Book.new("Dune", 412)
puts book.title
puts book.pages출력:
Dune
412attr_writer :title는 세터인 메서드 title=를 생성하며, 이 메서드는 인수를 @title에 저장합니다. Ruby에서는 대입 구문을 사용하여 호출할 수 있습니다. book.title = "Emma":
class Book
attr_reader :title
attr_writer :title
def initialize(title)
@title = title
end
end
book = Book.new("Dune")
book.title = "Dune Messiah"
puts book.title출력:
Dune Messiahattr_accessor는 리더와 세터를 모두 생성합니다. 두 가지가 모두 있으면 +=와 같은 축약형도 작동합니다. player.score += 5는 player.score = player.score + 5를 의미하기 때문입니다:
class Player
attr_accessor :name, :score
def initialize(name)
@name = name
@score = 0
end
end
ada = Player.new("Ada")
ada.score += 5
ada.score += 3
ada.name = "Ada L."
puts "#{ada.name}: #{ada.score}"출력:
Ada L.: 8가능한 한 적게 노출하세요. 외부 코드에서 읽을 수는 있지만 변경할 수는 없는 값에는 attr_reader를 사용하고, 외부에서 값을 변경하는 것이 설계의 일부인 경우에만 writer를 추가하세요. 읽기 전용 속성에 할당하면 NoMethodError가 발생합니다:
class Book
attr_reader :title
def initialize(title)
@title = title
end
end
book = Book.new("Dune")
begin
book.title = "Emma"
rescue NoMethodError => e
puts e.message
end
puts book.title출력:
undefined method `title=' for an instance of Book
Dune챌린지
쉬움Book 클래스를 완성하세요. 외부 코드에서는 title, author, pages를 읽을 수 있으며, 0에서 시작하는 pages_read를 읽고 변경할 수 있습니다. progress는 백분율을 내림하여 Dune: 120/412 (29%)를 반환합니다.
제공된 코드는 입력의 처음 세 줄(title, author, pages)에서 책을 생성합니다. 그다음 각 줄에는 독자가 읽은 페이지 수가 하나씩 주어지며, 코드는 book.pages_read += n을 사용해 각각을 더합니다. 마지막으로 Dune by Frank Herbert와 진행 상황을 출력합니다.
코드는 book.rb에 작성하세요. main.rb에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.
직접 해보기
require_relative 'book'
# 제공된 입출력 코드: 그대로 유지하세요
input = []
while (line = gets)
input << line.chomp
end
book = Book.new(input[0], input[1], input[2].to_i)
input.drop(3).each { |n| book.pages_read += n.to_i }
puts "#{book.title} by #{book.author}"
puts book.progress
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 Ruby 컴파일러