!Mac OS X-10.15.7 !ruby-2.6.3p62
オブジェクト指向
特に,
- 隠蔽(capsulation)
- 継承(inheritance)
- 多形(polymorphism)
に焦点を当てる.
class
def puts_hello name
puts "Hello #{name}."
end
def gets_name
name = ARGV[0] || 'world'
return name
end
name = gets_name
puts_hello name
以前使ったこのコードに置いて, main loopを消すためにクラス化する.
class Greeter
def initialize
@name = gets_name
puts_hello
end
def puts_hello #salute
puts "Hello #{@name}."
end
def gets_name
name = ARGV[0] || 'world'
return name.capitalize
end
end
Greeter.new
> ruby hello_class.rb
上記で実行すると, 同じで結果を吐くことが確かめられた.
継承
以下サンプルコード.
require 'colorize'
# method
def hello(name)
"Hello #{name}."
end
# inherited class
class Greeter < String
def hello
"Hello #{self}."
end
end
# extend class
class String
def hello
"Hello #{self}."
end
end
# method call
name = ARGV[0]
puts hello(name).green
# inherited class call
greeter = Greeter.new(ARGV[0])
puts greeter.hello.green
# extend class call, override
puts ARGV[0].hello.green
上記のコードにおける, class Greeter < String部分が継承にあたる.
参考サイト
https://qiita.com/daddygongon/items/969ad5112878f6dab844
- source ~/my_ruby/grad_members_20f/members/drop-sd/lectures/no11.org