Menu
CoddyTech

Định nghĩa lớp

Thuộc phần Lập trình hướng đối tượng trong hành trình Ruby của Coddy. Bài học 2 trên 57.

Một lớp mô tả một loại đối tượng: nó biết gì và có thể làm gì. class Dog ... end khai báo lớp, còn Dog.new tạo một đối tượng thuộc lớp đó, gọi là một instance. Bạn có thể gọi phương thức được định nghĩa bằng def bên trong lớp trên mọi instance:

class Dog
  def speak
    "Woof"
  end
end

rex = Dog.new
puts rex.speak
puts rex.class

Đầu ra:

Woof
Dog

new tạo đối tượng rồi gọi phương thức initialize với các đối số bạn truyền cho new. initialize thiết lập đối tượng, thường bằng cách lưu các đối số vào biến thực thể, có tên bắt đầu bằng @:

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

  def speak
    "#{@name} says Woof"
  end
end

puts Dog.new("Rex").speak
puts Dog.new("Bella").speak

Đầu ra:

Rex says Woof
Bella says Woof

Các phương thức nhận đối số như mọi phương thức Ruby khác và trả về giá trị của biểu thức cuối cùng. Mỗi lần gọi new sẽ tạo một đối tượng riêng:

class Calculator
  def add(a, b)
    a + b
  end

  def average(numbers)
    numbers.sum.to_f / numbers.size
  end
end

calc = Calculator.new
puts calc.add(2, 3)
puts calc.average([1, 2, 3, 6])

Đầu ra:

5
3.0

Tên lớp là các hằng số được viết theo kiểu CamelCase (BankAccount); tên phương thức và biến dùng snake_case (deposit_money). new kiểm tra các đối số dựa trên initialize, vì vậy thiếu đối số sẽ gây ra ArgumentError:

class Point
  def initialize(x, y)
    @x = x
    @y = y
  end
end

begin
  Point.new(1)
rescue ArgumentError => e
  puts e.message
end

Đầu ra:

wrong number of arguments (given 1, expected 2)
challenge icon

Thử thách

Dễ

Hoàn thiện lớp Formatter. Phương thức title(text) trả về văn bản với mỗi từ được viết hoa chữ cái đầu (the hobbit cho kết quả The Hobbit), slug(text) trả về các từ ở dạng chữ thường, nối với nhau bằng - (the-hobbit), còn initials(text) trả về chữ cái đầu tiên của mỗi từ ở dạng chữ hoa (TH).

Code được cung cấp tạo một đối tượng Formatter và, với mỗi dòng đầu vào, in ba kết quả trên các dòng riêng biệt.

Code của bạn nằm trong formatter.rb. main.rb chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

require_relative 'formatter'

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input = []
while (line = gets)
  input << line.chomp
end
formatter = Formatter.new
input.each do |line|
  puts formatter.title(line)
  puts formatter.slug(line)
  puts formatter.initials(line)
end
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Ruby online