0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クラスを使うプログラミング

Last updated at Posted at 2024-11-12
users = []
=> []
users << {first_name: 'Alice', last_name: 'Ruby', age: 20}
=> [{:first_name=>"Alice", :last_name=>"Ruby", :age=>20}]
users << {first_name: 'Bob', last_name: 'Python', age: 30}
=> [{:first_name=>"Alice", :last_name=>"Ruby", :age=>20}, {:first_name=>"Bob", :last_name=>"Python", :age=>30}]
users
=> [{:first_name=>"Alice", :last_name=>"Ruby", :age=>20}, {:first_name=>"Bob", :last_name=>"Python", :age=>30}]
users.each do |user|
    pusts "氏名: #{user[:first_name]} #{user[:last_name]}, 年齢: #{user[:age]}"
end

users.each do |user|
    puts "氏名: #{user[:first_name]} #{user[:last_name]}, 年齢: #{user[:age]}"
end
氏名: Alice Ruby, 年齢: 20
氏名: Bob Python, 年齢: 30
=> [{:first_name=>"Alice", :last_name=>"Ruby", :age=>20}, {:first_name=>"Bob", :last_name=>"Python", :age=>30}]
def full_name(user)
   "#{user[:first_name]} #{user[:last_name]}"
end
=> :full_name
users.each do |user|
   puts "氏名: #{full_name(user)}, 年齢:#{user[:age]}"
end
氏名: Alice Ruby, 年齢:20
氏名: Bob Python, 年齢:30
=> [{:first_name=>"Alice", :last_name=>"Ruby", :age=>20}, {:first_name=>"Bob", :last_name=>"Python", :age=>30}]
users[0][:first_name]
=> "Alice"
users[0][:first_mame]
=> nil
users[0][:country] = 'japan'
=> "japan"
users[0][:first_name]
=> "Alice"
users[0][:first_name] = 'Carol'
=> "Carol"
users[0]
=> {:first_name=>"Carol", :last_name=>"Ruby", :age=>20, :country=>"japan"}

ハッシュは新しくキーを追加したり、内容を変更したりできるので「もろくて壊れやすいプログラム」になりがちです
...
小さなプログラムではハッシュのままでも問題ないかもしれませんが、大きなプログラムになってくると、とてもハッシュでは管理しきれなくなってきます。そこで登場するのがクラスです。こういう場合はUserクラスという新しいデータ型を作り、そこにデータを入れた方がより堅牢なプログラムになります

  • クラスで新しいデータを作り、データを入れた方が堅牢になる
irb(main):001* class User
irb(main):002*   attr_reader :first_name, :last_name, :age
irb(main):003*
irb(main):004*   def initialize(first_name, last_name, age)
irb(main):005*     @first_name = first_name
irb(main):006*     @last_name = last_name
irb(main):007*     @age = age
irb(main):008*   end
irb(main):009> end
=> :initialize
irb(main):010> users = []
=> []
irb(main):011> users << User.new("Alice", "Ruby", 20)
=> [#<User:0x000000010cff3130 @age=20, @first_name="Alice", @last_name="Ruby">]
irb(main):012> users << User.new("Bob", "Python", 30)
=> [#<User:0x000000010cff3130 @age=20, @first_name="Alice", @last_name="Ruby">, #<User:0x000000010d090048 @age=30, @first_name="Bob", @last_name="Python">]
irb(main):013* def full_name(user)
irb(main):014*   "#{user.first_name} #{user.last_name}"
irb(main):015> end
=> :full_name
irb(main):016* users.each do |user|
irb(main):017*   puts "氏名:#{full_name(user)}, 年齢:#{user.age})"
irb(main):018> end
氏名:Alice Ruby, 年齢:20)
氏名:Bob Python, 年齢:30)
=> [#<User:0x000000010cff3130 @age=20, @first_name="Alice", @last_name="Ruby">, #<User:0x000000010d090048 @age=30, @first_name="Bob", @last_name="Python">]
irb(main):019> users[0].first_name
=> "Alice"
irb(main):020> users[0].first_mama
(irb):20:in `<main>': undefined method `first_mama' for #<User:0x000000010cff3130 @first_name="Alice", @last_name="Ruby", @age=20> (NoMethodError)

users[0].first_mama
        ^^^^^^^^^^^
Did you mean?  first_name
	....
....
rb(main):021> users[0].first_name = "Carol"
(irb):21:in `<main>': undefined method `first_name=' for #<User:0x000000010cff3130 @first_name="Alice", @last_name="Ruby", @age=20> (NoMethodError)

users[0].first_name = "Carol"
        ^^^^^^^^^^^^^
Did you mean?  first_name
...

Userクラスを導入すると、タイプミスをした時にエラーが発生します
...
新しく属性(データ項目)を追加したり、内容を変更したりすることも防止できます。

クラスはこのように、内部のデータを保持し、さらに自分が保持しているデータを利用する独自のメソッドを持つことができます。データとそのデータに関するメソッドが常にセットになるので、クラスを使わない場合に比べてデータとメソッドが整理しやすくなります。
...
プログラムが大規模になればなるほど、データとメソッドを一緒に持ち運べるクラスのメリットが大きくなってきます

感想

  • クラスを作成することでデータの属性の追加、編集ができなくなる
  • クラス内にメソッドを登録しておけば.メソッド名で呼び出せる

railsで開発してる時はクラスを作っていたんだな。
メソッドでエラーが出るのもクラスがあるおかげか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?