class
概要
今回はクラスについて取り扱っていく.基本rubyでは,クラス名はアルファベットの大文字で始めなければならない.クラス定義は,識別子で指定した定数へのクラスの代入になる.クラスがすでに定義されているとき,同じクラス名でクラス定義をかくとクラスの定義の追加になる.ただし,元のクラスと異なるスーパークラスを指定するとTypeErrorを起こすので注意.
プログラム
以下,サンプルプログラムとなる.
class Greeter
def initialize
@name = gets_name
puts_hello
end
def puts_hello
puts "Hello #{@name}."
end
def gets_name
name = ARGV[0] || 'world'
return name
end
end
Greeter.new
これを実行すると
C:\Users\nobua\M1>ruby hello_class.rb
Hello World.
#->何も入力しない場合
C:\Users\nobua\M1>ruby hello_class.rb Ruby
Hello Ruby.
#->Rubyと入力した場合
と出力された.
解説
本プログラムのGreeterクラスは・initialize・puts_hello・get_nameの三つのメソッドで構成されている.初めにgets_nameでターミナルで受け取ったワードかあらかじめ用意しておいたworldをローカル変数nameに代入し,頭文字を大文字に変換する.次にメソッドinitializeにおいて,インスタンス変数@nameにgets_nameで定義したnameを代入し,puts_helloを呼び出す.puts_helloではinitializeで定義された@nameを受け取り,"Hello #{@name}"の形で出力する.これが本プログラムの流れとなる.
classの継承
概要
classの欄で言及したように,クラスは既に作成されているとき,そのクラスを拡張して新しいクラスを作成することができる.これをクラスの継承という.
プログラム
クラスを継承する方法を以下のプログラムで確認していく.
class Greeter < String
def hello
"Hello #{self}."
end
end
class String
def hello
"Hello #{self}."
end
end
greeter = Greeter.new(ARGV[0])
puts greeter.hello
プログラムではGreeterクラスがStringクラスを継承しており,StringクラスはGreeterクラスの親クラスといい,GreeterクラスはStringクラスの子クラスという.
参考文献
https://www.javadrive.jp/ruby/inherit/index1.html
https://qiita.com/daddygongon/items/969ad5112878f6dab844
- source ~/grad_members_20f/members/NobuakiMori/L11_class.org