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はクラスのインスタンス変数やインスタンスメソッドにアクセスして理解をふかめるのが主な内容でした。
コメント