Rubyの基礎7(完結)
どうもhiroakiです。
今回も引き続き、Rubyの基礎について紹介します。Webサイトを作ろうとしている人にとってRubyは必須の言語です。自分はとにかくウェブサイトを作ってみたい人間ですので、これをなんとか習得したいと思っています。これからまとめる内容を、みなさんもぜひ参考にしてみてください。
▼これまでの内容は次に載せています。
lesson16
継承
あるクラスを元にして新たなクラスをつくることを「継承」といいます。これは「class 子クラス名 < 親クラス名」と「end」で作れます。このとき、子クラスは「サブクラス」、親クラスは「スーパークラス」とも呼ばれます。
- class Player
- def initialize(name)
- @name = name
- end
- def meet(person)
- puts "#{@name}は、#{person}に出会った"
- end
- end
- class Bank_clerk < Player
- end
継承をすると、子クラスは親クラスのインスタンス変数とインスタンスメソッドを引き継ぎます。
オーバーライド
親クラスにあるメソッドと同じ名前のメソッドを子クラスで定義すると、メソッドを上書き(オーバーライド)できます。オーバーライドすると、子クラスのインスタンス(実物)は、親クラスのメソッドではなく、子クラスで定義したメソッドを呼び出します。
- class Player
- def initialize(name)
- @name = name
- end
- def meet(person)
- puts "#{@name}は、#{person}に出会った"
- end
- end
- class Bank_clerk < Player
- def initialize()
- super("銀行員")
- end
- def meet(person)
- sound()
- puts "#{@name}は、#{person}を抱きしめた!"
- end
- private
- def sound()
- puts "シュッ!"
- end
- def walk()
- puts "歩いた"
- end
- end
- player1 = Player.new("公務員")
- player2 = Player.new("お客")
- player3 = Bank_clerk.new()
- player1.meet("トム")
- player3.meet("トム")
上記コードについて説明していきます。
uperメソッド
12.行目参照。スーパークラスの中で、その呼び出されたメソッドと同じメソッド名を持つメソッドを探して実行します。親クラスのメソッドの定義に合わせて、superに対して引数を渡す必要もあります。
privateメソッド
19.行目参照。privateメソッド以降のメソッドは全て外部から読み込めないようになります。
クラスメソッド
下記の使用例を実行し、どのように動くか確認してみてください。
- class Player
- @@person="トム"
- @@count = 0
- def self.charactor_count()
- @@count
- end
- def self.person()
- @@person
- end
- def initialize(name,person=@@person)
- @name = name
- @@person = person
- @@count +=1
- end
- def meet()
- puts "#{@name}は、#{@@person}に出会った"
- end
- end
- class Bank_clerk < Player
- def initialize()
- super("銀行員")
- end
- def meet()
- sound()
- puts "#{@name}は、#{@@person}を抱きしめた!"
- end
- private
- def sound()
- puts "シュッ!"
- end
- end
- player1 = Player.new("公務員")
- player2 = Player.new("お客")
- player3 = Bank_clerk.new()
- puts "#{Player.charactor_count()}人で#{Player.person()}に出会った~"
- player1.meet()
- player3.meet()
クラスメソッドを使うと、いちいちオブジェクトをインスタンス化(実体化)せずに、クラスを使えるようになります。
クラスメソッドは、「def クラス名.メソッド名」もしくは「def self.メソッド名」とすることで定義できます。36.行目のように、クラスメソッドを呼び出すには、クラス名に続けてメソッドを記述します。クラスメソッドはクラスの中でも、同じように呼び出すことができます。
33.行目以降を次のように打ち換え、どんな処理が行われるか確認してみてください。
- player2 = Player.new("お客","ハム")
- player2.meet()
- player1 = Player.new("公務員","トム")
- player3 = Bank_clerk.new()
- puts "#{Player.charactor_count()}人で#{Player.person()}に出会った~"
- player1.meet()
lesson17
ライブラリ
前回、ファイルを読み込む方法を説明しましたね。今回はそれを応用して、ライブラリを活用したいと思います。ライブラリには次のものがあります。
①組み込みライブラリ:プログラミングの標準的な機能を提供する。「require」メソッドなしで利用できる。
②標準添付ライブラリ:Rubyダウンロード時に配布される。「require」メソッドで利用できる。
③RubyGem:Rubyライブラリのホスティングサービス。「gem」コマンドでインストールして利用する。
①の例は、putsなどですね。
②の例は、日付を扱うためのDateクラスです。これを使うには下記のようにします。
- require "date" #「require ("date")」でも可
- date1 = Date.new(2019.12.4")
- date2 = Date.parse("17.06.30")
- date3 = Date.today
- puts date3.sunday?
このようにすでに用意されているクラスは、自分で作ったファイルを読み込む時と比べて、1.行目のrequireの書き方が少し異なるので注意です。
Dateクラスは今まで扱ってきたクラスと同様に、Date.newとすることでインスタンスを生成することができます。
Dateクラスのクラスメソッドを使うこともできます。先ほども説明しましたが、クラスメソッドはインスタンスを作らずに3.や4.のように実行できるんでしたね。
5.のsunday?はオブジェクトが日曜日かどうかを真偽値で返すインスタンスメソッドです。
③は後日使用します。頭の片隅にでも残しておいてください。
lesson18
モジュール
モジュールは、定数やメソッドだけをまとめる機能です。モジュールを使うことで、共通の定数やメソッドをクラスとは分離して共有することができます。
- module Greeting
- def say_hello()
- puts "hello world"
- end
- module_function :say_hello
- end
- Greeting.say_hello()
5.行目のようにすると、モジュールを外部から呼び出せます。
モジュールをクラスに組み込む
- module Greeting
- def say_hello()
- puts "hello world"
- end
- end
- class Player
- include Greeting
- def introduce()
- puts "私は、hiroakiです。"
- end
- end
- player = Player.new()
- player.say_hello()
- player.introduce()
8.のように「include モジュール名」とすることで、クラスに組み込むこともできます。
基礎編は以上になります。お疲れ様でした!
内容については、さらっと流したところもありまして、非常に申し訳ないです。今後、補足など順次まとめますので、読んでみてください。
また、自分も学びながらですので、間違いや意見、質問等あればコメントください。
次回以降は実際にウェブサイトを作っていきたいと思います。うまくいくか分かりませんが、これからもよろしくお願いします。
ではでは。