Der Unterschied zwischen der Programmierung mit Ruby-Klassen und der Programmierung ohne Ruby-Klassen

Klassenfreie Programmierung

(Beispiel)

#Benutzerdaten erstellen
users = []
users << { first_name: 'Hanako', last_name: 'Yamada', age: 8 }
users << { first_name: 'Taro', last_name: 'Yamamoto', age: 10 }

#Methode zum Erstellen eines Namens
def full_name(user)
  "#{user[:first_name]} #{user[:last_name]}"
end

#Benutzerdaten anzeigen
users.each do |user|
  puts "Vollständiger Name: #{full_name(user)},Alter: #{user[:age]}"
end

Problem

  1. Wenn Sie beim Hashing einen Schlüssel falsch eingeben, wird kein Fehler angezeigt und nil wird zurückgegeben. Daher bemerken Sie das Problem möglicherweise nicht.
  2. Hashes sind in der Regel "fragile und fragile Programme", da neue Schlüssel hinzugefügt und deren Inhalt geändert werden können.

(Beispiel 1)

users[0][:first_name] #=> "Hanako"
users[0][:first_mame] #=> nil

(Beispiel 2)

#Neuen Schlüssel ohne Erlaubnis hinzufügen
users[0][:food] = 'rice'
#Willkürlich zuerst_Namen ändern
users[0][:first_name] = 'dozaemon'
puts users[0]
#=> {:first_name=>"dozaemon", :last_name=>"Yamada", :age=>8, :food=>"rice"}

Programmieren mit Klassen

(Beispiel)

#Definieren Sie die Benutzerklasse
class User
  attr_reader :first_name, :last_name, :age

  def initialize(first_name, last_name, age)
    @first_name = first_name
    @last_name = last_name
    @age = age
  end
end

#Benutzerdaten erstellen
users = []
users << User.new('Hanako', 'Yamada', 8)
users << User.new('Taro', 'Yamamoto', 10)

# users[0].first_name

#Methode zum Erstellen eines Namens
def full_name(user)
  "#{user.first_name} #{user.last_name}"
end

#Benutzerdaten anzeigen
users.each do |user|
  puts "Vollständiger Name: #{full_name(user)},Alter: #{user.age}"
end

#=>Vollständiger Name: Hanako Yamada,Alter: 8
#Vollständiger Name: Taro Yamamoto,Alter: 10

Wenn Sie die Benutzerklasse einführen, tritt ein Fehler auf, wenn Sie einen Tippfehler machen.

(Beispiel)

puts users[0].first_name #=> 'Hanako'
puts users[0].first_mame #=> undefined method `first_mame' for #<User:0x00007f888d08c150> (NoMethodError)

Sie können auch verhindern, dass neue Attribute hinzugefügt oder deren Inhalt geändert werden.

(Beispiel)

#Ich kann keine Attribute ohne Erlaubnis hinzufügen
users[0].food = 'rice' #=> undefined method `food=' for #<User:0x00007fefae1300d8> (NoMethodError)

#Willkürlich zuerst_Name kann nicht geändert werden
users[0].first_name = 'tanjiro' #=> undefined method `first_name=' for #<User:0x00007faa210c0418> (NoMethodError)

Sie können der Klasse auch Methoden hinzufügen.

(Beispiel) Definieren Sie die Methode full_name in der User-Klasse

#Definieren Sie die Benutzerklasse
class User
  attr_reader :first_name, :last_name, :age

  def initialize(first_name, last_name, age)
    @first_name = first_name
    @last_name = last_name
    @age = age
  end

  #Methode zum Erstellen eines Namens
  def full_name
    "#{first_name} #{last_name}"
  end
end

#Benutzerdaten erstellen
users = []
users << User.new('Hanako', 'Yamada', 8)
users << User.new('Taro', 'Yamamoto', 10)

#Benutzerdaten anzeigen
users.each do |user|
  puts "Vollständiger Name: #{user.full_name},Alter: #{user.age}"
end

#=>Vollständiger Name: Hanako Yamada,Alter: 8
#Vollständiger Name: Taro Yamamoto,Alter: 10

Auf diese Weise kann eine Klasse Daten intern speichern und verfügt auch über eigene Methoden, die die darin enthaltenen Daten verwenden. Da die Daten und Methoden, die sich auf die Daten beziehen, immer festgelegt sind, ist es einfacher, die Daten und Methoden zu organisieren, als wenn die Klasse nicht verwendet wird.

Literaturhinweise

Einführung in Ruby für diejenigen, die Profis werden möchten

Recommended Posts

Der Unterschied zwischen der Programmierung mit Ruby-Klassen und der Programmierung ohne Ruby-Klassen
Verstehe den Unterschied zwischen abstrakten Klassen und Schnittstellen!
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
[Ruby] Unterschied zwischen get und post
[Ruby] Unterschied zwischen is_a? Und instance_of?
Programmieren mit Ruby (unterwegs)
[Java] Überprüfen Sie den Unterschied zwischen orElse und orElseGet mit IntStream
Der Unterschied zwischen der Ruby-Instanzmethode und der Klassenmethode ist leicht zu verstehen.
Unterschied zwischen Ruby-Instanzvariable und lokaler Variable
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
[Ruby] Unterschied zwischen print, put und p
[Java] Verstehe den Unterschied zwischen List und Set
[iOS] Verstehe den Unterschied zwischen Frame und Grenzen
[Rails / Active Record] Über den Unterschied zwischen create und create!
[Ruby] Unterschied zwischen Puts und Return, Output und Return
[Ruby] Klassen und Instanzen
Ruby-Klassen und -Instanzen
Unterschied zwischen vh und%
Unterschied zwischen i ++ und ++ i
Fühlen Sie den Grundtyp und Referenztyp leicht mit Rubin
Berechnen Sie die Differenz zwischen Zahlen in einem Ruby-Array
[Rails] Was ist der Unterschied zwischen Redirect und Rendering?
Vermitteln Sie mit Gradle den Streit zwischen Power Mock und Jacoco
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
Fühlen Sie den Grundtyp und Referenztyp leicht mit Rubin 2
[Swift] UITextField hat mir den Unterschied zwischen Null und "" beigebracht.
[Java] Hinweis zum Unterschied zwischen Äquivalenzbeurteilung und Gleichheitsbeurteilung beim Vergleich von String-Klassen
Unterschied zwischen Produkt und Variante
Unterschied zwischen redirect_to und render
Unterschied zwischen Java und JavaScript (wie man den Durchschnitt findet)
Unterschied zwischen redirect_to und render
Unterschied zwischen CUI und GUI
Unterschied zwischen Mockito-Core und Mockito-All
Unterschied zwischen Klasse und Instanz
Ich habe versucht, Methoden mit ähnlichen Funktionen für den Unterschied zwischen Java-Array und ArrayList zu vergleichen und ihnen zu entsprechen.
Unterschied zwischen Bundle und Bundle-Installation
Was ist der Unterschied zwischen einer Aktion und einer Instanzmethode?
Unterschied zwischen ArrayList und LinkedList
Unterschied zwischen render und redirect_to
Unterschied zwischen List und ArrayList
[Ruby] Unterschied zwischen Match / Scan
Unterschied zwischen .bashrc und .bash_profile
[Ruby] Singuläre Methoden und singuläre Klassen
Unterschied zwischen StringBuilder und StringBuffer
Informationen zu Ruby-Klassen und -Instanzen
Ruby-Methoden und -Klassen (grundlegend)
Unterschied zwischen render und redirect_to
Erstellen von Ruby-Klassen und -Instanzen
Überschreiben wir den Unterschied zwischen == (Identität) und der Methode equals (Äquivalenz).