La différence entre la programmation qui utilise des classes Ruby et la programmation qui n'utilise pas

Programmation sans cours

(Exemple)

#Créer des données utilisateur
users = []
users << { first_name: 'Hanako', last_name: 'Yamada', age: 8 }
users << { first_name: 'Taro', last_name: 'Yamamoto', age: 10 }

#Méthode pour créer un nom
def full_name(user)
  "#{user[:first_name]} #{user[:last_name]}"
end

#Afficher les données utilisateur
users.each do |user|
  puts "Nom complet: #{full_name(user)},âge: #{user[:age]}"
end

problème

  1. Avec le hachage, si vous avez mal saisi une clé, aucune erreur ne s'affiche et nil est renvoyé. Par conséquent, vous ne remarquerez peut-être pas le problème.
  2. Les hachages ont tendance à être des «programmes fragiles et fragiles» car de nouvelles clés peuvent être ajoutées et leur contenu modifié.

(Exemple 1)

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

(Exemple 2)

#Ajouter une nouvelle clé sans autorisation
users[0][:food] = 'rice'
#Arbitrairement d'abord_Changer de nom
users[0][:first_name] = 'dozaemon'
puts users[0]
#=> {:first_name=>"dozaemon", :last_name=>"Yamada", :age=>8, :food=>"rice"}

Programmation avec classes

(Exemple)

#Définir la classe User
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

#Créer des données utilisateur
users = []
users << User.new('Hanako', 'Yamada', 8)
users << User.new('Taro', 'Yamamoto', 10)

# users[0].first_name

#Méthode pour créer un nom
def full_name(user)
  "#{user.first_name} #{user.last_name}"
end

#Afficher les données utilisateur
users.each do |user|
  puts "Nom complet: #{full_name(user)},âge: #{user.age}"
end

#=>Nom complet: Hanako Yamada,âge: 8
#Nom complet: Taro Yamamoto,âge: 10

Si vous introduisez la classe User, une erreur se produira si vous faites une faute de frappe.

(Exemple)

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

Vous pouvez également empêcher l'ajout de nouveaux attributs ou la modification de leur contenu.

(Exemple)

#Je ne peux pas ajouter d'attributs sans autorisation
users[0].food = 'rice' #=> undefined method `food=' for #<User:0x00007fefae1300d8> (NoMethodError)

#Arbitrairement d'abord_Impossible de changer le nom
users[0].first_name = 'tanjiro' #=> undefined method `first_name=' for #<User:0x00007faa210c0418> (NoMethodError)

Vous pouvez également ajouter des méthodes à l'intérieur de la classe.

(Exemple) Définissez la méthode full_name dans la classe User

#Définir la classe User
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

  #Méthode pour créer un nom
  def full_name
    "#{first_name} #{last_name}"
  end
end

#Créer des données utilisateur
users = []
users << User.new('Hanako', 'Yamada', 8)
users << User.new('Taro', 'Yamamoto', 10)

#Afficher les données utilisateur
users.each do |user|
  puts "Nom complet: #{user.full_name},âge: #{user.age}"
end

#=>Nom complet: Hanako Yamada,âge: 8
#Nom complet: Taro Yamamoto,âge: 10

De cette façon, une classe peut contenir des données en interne et également avoir ses propres méthodes qui utilisent les données qu'elle contient. Puisque les données et les méthodes liées aux données sont toujours définies, il est plus facile d'organiser les données et les méthodes que lorsque la classe n'est pas utilisée.

Littérature référencée

Introduction à Ruby pour ceux qui veulent devenir des professionnels

Recommended Posts

La différence entre la programmation qui utilise des classes Ruby et la programmation qui n'utilise pas
Comprenez la différence entre les classes abstraites et les interfaces!
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
[Ruby] Différence entre obtenir et publier
[Ruby] Différence entre is_a? Et instance_of?
Programmation avec ruby (en route)
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
Facile à comprendre la différence entre la méthode d'instance Ruby et la méthode de classe.
Différence entre la variable d'instance Ruby et la variable locale
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
[Ruby] Différence entre print, put et p
[Java] Comprendre la différence entre List et Set
[iOS] Comprendre la différence entre le cadre et les limites
[Rails / Active Record] À propos de la différence entre créer et créer!
[Ruby] Différence entre les put et les retours, les valeurs de sortie et de retour
[Ruby] Classes et instances
Classes et instances Ruby
Différence entre vh et%
Différence entre i ++ et ++ i
Ressentez facilement le type de base et le type de référence avec ruby
Calculer la différence entre les nombres dans un tableau Ruby
[Rails] Quelle est la différence entre la redirection et le rendu?
Méditez la querelle entre Power Mock et Jacoco avec Gradle
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
Ressentez facilement le type de base et le type de référence avec ruby 2
[Swift] UITextField m'a appris la différence entre nil et ""
[Java] Remarque sur la différence entre le jugement d'équivalence et le jugement d'égalité lors de la comparaison de classes String
Différence entre produit et variante
Différence entre redirect_to et render
Différence entre Java et JavaScript (comment trouver la moyenne)
Différence entre redirect_to et render
Différence entre CUI et GUI
Différence entre mockito-core et mockito-all
Différence entre classe et instance
J'ai essayé de comparer et de correspondre à des méthodes avec des fonctions similaires pour la différence entre le tableau Java et ArrayList.
Différence entre l'installation de bundle et de bundle
Quelle est la différence entre une action et une méthode d'instance?
Différence entre ArrayList et LinkedList
Différence entre render et redirect_to
Différence entre List et ArrayList
[Ruby] Différence entre match / scan
Différence entre .bashrc et .bash_profile
[Ruby] Méthodes singulières et classes singulières
Différence entre StringBuilder et StringBuffer
À propos des classes et des instances Ruby
Méthodes et classes Ruby (basiques)
Différence entre render et redirect_to
Création de classes et d'instances Ruby
Remplaçons la différence entre == (identité) et méthode equals (équivalence)