Menu
Coddy logo textTech

Definire le classi

Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 2 di 57.

Una classe descrive un tipo di oggetto: ciò che sa e ciò che può fare. class Dog ... end dichiara la classe e Dog.new crea un oggetto di quella classe, un'istanza. Un metodo definito con def all'interno della classe può essere chiamato su ogni istanza:

class Dog
  def speak
    "Woof"
  end
end

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

Output:

Woof
Dog

new crea l'oggetto e poi chiama il suo metodo initialize con gli argomenti che hai fornito a new. initialize configura l'oggetto, di solito memorizzando gli argomenti in variabili di istanza, i cui nomi iniziano con @:

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

Output:

Rex says Woof
Bella says Woof

I metodi accettano argomenti come qualsiasi metodo Ruby e restituiscono il valore della loro ultima espressione. Ogni chiamata a new crea un oggetto separato:

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])

Output:

5
3.0

I nomi delle classi sono costanti scritte in CamelCase (BankAccount); i nomi dei metodi e delle variabili usano snake_case (deposit_money). new verifica i suoi argomenti confrontandoli con initialize, quindi un argomento mancante genera ArgumentError:

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

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

Output:

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

Sfida

Facile

Completa la classe Formatter. Il suo metodo title(text) restituisce il testo con ogni parola in maiuscolo (the hobbit dà The Hobbit), slug(text) restituisce le parole in minuscolo unite da - (the-hobbit) e initials(text) restituisce la prima lettera di ogni parola in maiuscolo (TH).

Il codice fornito crea un oggetto Formatter e, per ogni riga di input, stampa i tre risultati su righe separate.

Il tuo codice va in formatter.rb. main.rb contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

require_relative 'formatter'

# Codice di input/output fornito: lascialo così com'è
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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Ruby online