Rubyの基礎6
どうもhiroakiです。
今回も引き続き、Rubyの基礎について紹介します。Webサイトを作ろうとしている人にとってRubyは必須の言語です。自分はとにかくウェブサイトを作ってみたい人間ですので、これをなんとか習得したいと思っています。これからまとめる内容を、みなさんもぜひ参考にしてみてください。
▼これまでの内容は次に載せています。
lesson14
initializeメソッド
initializeメソッドは、「クラス名.new」でインスタンスを生成した直後に自動で呼び出され、処理が実行されます。これを初期化(initialize)と言います。
- class Menu
- attr_accessor :name
- def initialize
- self.name = "ピザ"
- end
- end
- menu1 = Menu.new
- puts menu1.name
initializeメソッドは、他のインスタンスメソッドと同じように定義できます。インスタンスメソッドの中では、「self.変数名」でインスタンス変数を扱うことができるので、「self.変数名 = 値」でインスタンス変数に値を代入できます。
initializeメソッドには、通常のインスタンスメソッドと同じように、引数を渡すこともできます。
- class Menu
- def initialize(message)
- puts message
- end
- end
- menu1 = Menu.new("こんにちは")
initializeメソッドでインスタンス変数に引数の値を代入することで、インスタンス毎にインスタンス変数の値を変えることができます。
その際に、キーワード引数を使うことで見やすく書くことができます。
- class Menu
- def initialize(name:,price:)
- self.name = name
- self.price=price
- end
- end
- menu1 = Menu.new(name:"ピザ",price:1200)
- puts menu1.name #エラー
ちなみに、これはattr_accessorがないので、8.のようにするとエラーになります。
補足
インスタンスメソッドは次のように書くこともできます。
- class Menu
- def initialize(name:,price:)
- @name = name
- @price = price
- end
- def order
- puts "#{@name}、#{@price}円分ですね?"
- end
- end
- menu1 = Menu.new(name:"ピザ",price:1200)
- puts menu1.order
クラス変数
クラス変数は宣言したクラスのインスタンス全てで共有して利用できる変数です。変数名の先頭に「@@」を付けて作ります。
- class Goods
- @@tax = 1.08
- def initialize(price, quantity)
- @price = price
- @quantity = quantity
- end
- def total()
- return (@price * @quantity * @@tax).round
- end
- end
roundメソッドは数を四捨五入します。
classメソッド
- text = "123"
- list=["hiroaki","tom","keiko"]
- p text.to_i
- p text.length
- p text.class
- p "123".class
- p list.class
実は、Rubyでは、文字列や配列はオブジェクトになっています。なので、こういう書き方になっているんですね。ためしに、classメソッドを使って、文字列や配列がどのクラスに属したオブジェクトか調べてみましょう。
どうですか?感覚的には伝わりましたか。
では、これを踏まえて次のコードをおさらいです。
- line = gets.chomp.split(",")
- puts line
lesson15
クラスを移動する
これまでクラスについて説明してきました。
さて、このクラスをファイルごとに移動して分け、そこから呼び出すことで使う方法がありますので、説明します。
まず、さきほど使ったコードでgoods.rbファイルを作ります。
- #goods.rb
- class Goods
- @@tax = 1.08
- def initialize(price, quantity)
- @price = price
- @quantity = quantity
- end
- def total()
- return (@price * @quantity * @@tax).round
- end
- end
上記ファイル内のクラスを、index.rbファイルで使うようにします。
- #index.rb
- require "./goods"
- goods = Goods.new
読み込む側のファイルの一番上の行で「require "./menu"」のコードを書き込むことで、「goods.rb」を読み込めるようになります。
次のlessonで「継承」について扱いますが、このクラスを移動することをしっかり覚えておいてくださいね。
今回は以上です。
次回以降も同様にまとめていきます。自分も学びながらですので、間違いや意見、質問等あればコメントください。難しい項ですので、理解できない場合は気軽にご質問ください。
よろしくお願いします。
ではでは。