ProgateでRubyを学んでみた【コース4はクラスが中心】

ProgateのRubyコース4を学ぶ

Progate Rubyコース4

Progateで学習をしようと考えている方にいむけて書いている記事というわけではないですが、一旦ここで今までのコースはどんなことを学んだかをおさらいしておこうと思います。これからProagateをはじめようと思っている人になにかの参考になるかもしれないですし、いままでに学んだ内容は下記のとおりです。

Rubyコース1 文字列操作、数値の計算、条件分岐
Rubyコース2 配列、ハッシュ繰り返し
Rubyコース3 メソッド全般

確認はしていないですがコース1は無料ですが、コース2,3は途中から有料になると思います。Progateで学びたいと思う方は980円払う必要があります。
有料会員の登録はクレジットカードとメールアドレスだけだったと思います。

Progateをやるならあまり必要はないかと思いますが復習のためにこんなのがあってもよいかもしれません↓

それではコース4で学んだ内容を備忘録的にかいていこうかと思います

Rubyのクラスの定義

Rubyのクラスの定義はendキーワードを使うので{}なみかっこをつかったりすることありません。とくにきまりはないとは思いますがクラス名は普通大文字ではじめるようです

class Menu
end

インスタンス変数

インスタンス変数は attr_accessor :name のように記述するようです。おそらくですが、他の言語ではフィールドやプロパティなどと言われているものと役目は一緒かと思います

calss Menu{
attr_accessor :name
attr_accessor :price
}

インスタンスを生成する

他の言語とかだと new クラス名() のようになるのですが、
Rubyはたしか全部メソッドになっているので new も後ろにくるようです

class Menu
  attr_accessor :name
  attr_accessor :price
end
menu1 = Menu.new

インスタンス変数へのアクセス

インスタンス変数へのアクセスは . ピリオドを使います。たとえば↓はMenuクラスのインスタンスを生成してインスタンス変数にアクセスします

class Menu
  attr_accessor :name
  attr_accessor :price
end
menu1 = Menu.new
menu1.name = "ピザ"
puts menu1.name
menu1.price = 800
puts menu1.price

クラスで定義したメソッドへのアクセス

クラスで定義したメソッドへのアクセスも.ピリオドですね。

まずは menu1 = Menu.newでインスタンスを生成して menu1に menu1.info のようにメソッドを呼び出します。このようにインスタンスに対して呼び出すメソッドのことをRubyではインスタンスメソッドとよんでいるようですね。

class Menu
  attr_accessor :name
  attr_accessor :price
  def info
    puts "料理名と値段が表示されます"
  end
end
menu1 = Menu.new
menu1.name = "ピザ"
menu1.price = 800
menu1.info

selfキーワード

selfはインスタンス自身をさすものでインスタンス変数とかにアクセスするときに使います。他のプログラミング言語とかで、でてくるthisキーワードとやくわりはほぼ一緒かと思います。

たとえば下の例では :name と :price というインスタンス変数にselfキーワードを使ってアクセスしています。

class Menu
  attr_accessor :name
  attr_accessor :price
  def info
    return "#{self.name} #{self.price}円"
  end
end
menu1 = Menu.new
menu1.name = "ピザ"
menu1.price = 800
menu1.info

initializeメソッド

initializeはインスタンスを生成したときに自動的によばれるメソッドですね。他のプログラミング言語ではコンストラクターなどといったりしますが、こちらの役割はインスタンス変数を初期化したりとかそんな感じかと思います。

initializeはメソッドなので

def initialize というような書き方になるようです

以下はinitializeメソッドを使ってインスタンス変数を初期化した例です

class Menu
  attr_accessor :name
  attr_accessor :price
  def initialize
    self.name = "ピザ"
    self.price = 800
  end
  def info
    return "#{self.name} #{self.price}円"
  end
end

menu1 = Menu.new
puts menu1.info

引数ありのinitializeメソッド

initializeメソッドに引数をもたせることができますね。よくある変数の初期化とかで使ったりしますね。
Progateではキーワード引数を使うと見やすくなると書いてありました。ので↓ではキーワード引数を使っています

 
class Menu
  attr_accessor :name
  attr_accessor :price
  def initialize(name:, price:)
    self.name = name
    self.price = price
  end
  def info
    return "#{self.name} #{self.price}円"
  end
end

menu1 = Menu.new(name: "すし" , price: 1000)
puts menu1.info

クラス定義ファイルとメイン処理のコードをわける

たとえばメイン処理のファイル名が index.rb
クラス定義ファイルが menu.rb

として2つのファイルに分割します。index.rbにクラス定義されたmenu.rbを読みこむにはrequireを使用します。拡張子はつけないみたいですね。

以下はサンプルコードです

#拡張子をつけない
require "./menu"
menu1 = Menu.new(name: "すし", price: 1000)
puts menu1.info

インスタンスを配列に代入してeachを使って配列の要素を処理する

この記事を使ってきたMenuクラスをmenu.rbというファイルに分割して requireを使ってクラスを読みこんだ状態で。インスタンスが格納されている配列から要素をとりだして、infoメソッドを呼び出しています

require "./menu"

menu1 = Menu.new(name: "ピザ", price: 800)
menu2 = Menu.new(name: "すし", price: 1000)
menu3 = Menu.new(name: "コーラ", price: 300)
menu4 = Menu.new(name: "お茶", price: 200)

menus = [menu1, menu2, menu3, menu4]

menus.each do |menu|
  puts menu.info
end

gets.chompでユーザーから入力された値をうけとる

gets.chompは入力をうけつけるための構文です。

↓の例ではgets.chompを変数に代入させて表示させています。 gets.chomp.to_iの to_i は文字列を数値に変換するためのもののようです

puts "名前を入力してください"
name = gets.chomp
puts "#{name}さん、いらっしゃいませ"
puts "1つ100円のお菓子があります"
puts "いくつ買いますか?"
count = gets.chomp.to_i
total_price = 100 * count
puts "お会計は#{total_price}円です"

Progate Rubyコース4まとめ

Rubyのコース4は結構学ぶ内容が多めですね。今回学んだ内容をまとめると以下のようになるでしょうか

  • クラス
  • インスタンス変数 → 他言語だとプロパティとかフィールド
  • インスタンスメソッド → インスタンスに使うメソッド
  • initializeメソッド → インスタンス生成時に自動で呼ばれるメソッド 他言語ではコンストラクターとよぶ
  • selfキーワード → インスタンス変数にアクセスするときとかに使う 他言語ではthisキーワード
  • require → ファイルを読みこんでクラスを使えるようにする 拡張子はつけない
  • gets.chomp → ユーザーからの入力を受け付ける

上の項目にはかいてないですが、initializeメソッドの引数にキーワード引数を使っているのは結構ポイントですね。他の言語にもこの機能はあるかもしれませんが、よく変数名がわからなくなって、クラス定義ファイルをわざわざ確認しにいく必要がなくなるのは便利だと思いました。とはいえキーワード引数になれるまで時間がかかりそうですが。

以上ProgateのRubyのコース4はクラスのインスタンス変数やインスタンスメソッドにアクセスして理解をふかめるのが主な内容でした。

次の記事はProgateでRubyを学ぶ【コース5はオブジェクト指向】 | 初心者のプログラミング