気ままに趣味旅行

面白いコト「拡がる/拡げる」

Rubyの基礎6

f:id:hiroakies4463:20190110194257j:plain
どうもhiroakiです。

 

今回も引き続き、Rubyの基礎について紹介します。Webサイトを作ろうとしている人にとってRubyは必須の言語です。自分はとにかくウェブサイトを作ってみたい人間ですので、これをなんとか習得したいと思っています。これからまとめる内容を、みなさんもぜひ参考にしてみてください。

 

▼これまでの内容は次に載せています。

hiroakies.hatenablog.com

 

lesson14

initializeメソッド
initializeメソッドは、「クラス名.new」でインスタンスを生成した直後に自動で呼び出され、処理が実行されます。これを初期化(initialize)と言います。

  1. class Menu
  2.     attr_accessor :name
  3.     def initialize
  4.         self.name = "ピザ"
  5.     end
  6. end
  7. menu1 = Menu.new
  8. puts menu1.name 

initializeメソッドは、他のインスタンスメソッドと同じように定義できます。インスタンスメソッドの中では、「self.変数名」でインスタンス変数を扱うことができるので、「self.変数名 = 値」でインスタンス変数に値を代入できます。

 

initializeメソッドには、通常のインスタンスメソッドと同じように、引数を渡すこともできます。

  1. class Menu
  2.     def initialize(message)
  3.         puts message
  4.     end
  5. end
  6. menu1 = Menu.new("こんにちは")

 

initializeメソッドでインスタンス変数に引数の値を代入することで、インスタンス毎にインスタンス変数の値を変えることができます。
その際に、キーワード引数を使うことで見やすく書くことができます。 

  1. class Menu
  2.     def initialize(name:,price:)
  3.         self.name = name
  4.         self.price=price
  5.     end
  6. end
  7. menu1 = Menu.new(name:"ピザ",price:1200)
  8. puts menu1.name  #エラー

ちなみに、これはattr_accessorがないので、8.のようにするとエラーになります。

 

補足

インスタンスメソッドは次のように書くこともできます。

  1. class Menu
  2.     def initialize(name:,price:)
  3.       @name = name
  4.       @price = price
  5.     end
  6.     def order
  7.       puts "#{@name}、#{@price}円分ですね?"
  8.     end
  9. end
  10. menu1 = Menu.new(name:"ピザ",price:1200)
  11. puts menu1.order

 

クラス変数

クラス変数は宣言したクラスのインスタンス全てで共有して利用できる変数です。変数名の先頭に「@@」を付けて作ります。

  1. class Goods
  2.     @@tax = 1.08 
  3.     def initialize(price, quantity)
  4.       @price = price
  5.       @quantity = quantity
  6.     end
  7.     def total()
  8.       return (@price * @quantity * @@tax).round
  9.     end
  10. end

roundメソッドは数を四捨五入します。

 

classメソッド

  1. text = "123"
  2. list=["hiroaki","tom","keiko"]
  3. p text.to_i
  4. p text.length
  5. p text.class
  6. p "123".class
  7. p list.class

実は、Rubyでは、文字列や配列はオブジェクトになっています。なので、こういう書き方になっているんですね。ためしに、classメソッドを使って、文字列や配列がどのクラスに属したオブジェクトか調べてみましょう。

どうですか?感覚的には伝わりましたか。

 

では、これを踏まえて次のコードをおさらいです。

  1. line = gets.chomp.split(",")
  2. puts line
ちなみに、putsやgetなどはオブジェクトを省略した書き方ができる特別なメソッドなんです。
chompはgetsのオブジェクトを受け取り、splitもまたgets.chompまでのオブジェクトを受け取っている、というわけです。
これでカラクリが解けましたね。

 

lesson15

クラスを移動する

これまでクラスについて説明してきました。

さて、このクラスをファイルごとに移動して分け、そこから呼び出すことで使う方法がありますので、説明します。

まず、さきほど使ったコードでgoods.rbファイルを作ります。

  1. #goods.rb
  2. class Goods
  3.     @@tax = 1.08 
  4.     def initialize(price, quantity)
  5.       @price = price
  6.       @quantity = quantity
  7.     end
  8.     def total()
  9.       return (@price * @quantity * @@tax).round
  10.     end
  11. end

上記ファイル内のクラスを、index.rbファイルで使うようにします。

  1. #index.rb
  2. require "./goods"
  3. goods = Goods.new

読み込む側のファイルの一番上の行で「require "./menu"」のコードを書き込むことで、「goods.rb」を読み込めるようになります。

次のlessonで「継承」について扱いますが、このクラスを移動することをしっかり覚えておいてくださいね。

 

 

 

今回は以上です。

次回以降も同様にまとめていきます。自分も学びながらですので、間違いや意見、質問等あればコメントください。難しい項ですので、理解できない場合は気軽にご質問ください。

よろしくお願いします。

ではでは。