2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rubyでのclass

Last updated at Posted at 2020-12-30

!macOS-11.1 !ruby-2.7.2p137

Preface (はじめに)

オブジェクト指向の基本的な考え方として,

  • 隠蔽 (capsulation)
  • 継承 (inheritance)
  • 多形 (polymorphism)

があります.

Rubyに限らず, Pythonや様々な言語でこの考え方が組み込まれています.

Class

前に作成したコマンドの引数に名前を入れると挨拶を返す

hello_method.rb
def hello name
  puts "Hello #{name}."
end

name = ARGV[0]
hello(name)

これを改良して, さらにclass化します.

名前を取得

hello_method.rbでは, コマンドの引数を返すようにしましたが, これでは, 何も渡さなかった場合,

> ruby hello_method.rb
-> Hello .

とただの挨拶だけが返ってきます.

このままでは物寂しいため, gets_nameメソッドを用意してコマンドの引数に何も渡さなかった時に

Hello world.

と返ってくるようにします.

greeter.rb
def hello name
  puts "Hello #{name}."
end

def gets_name
  name = ARGV[0] || 'world'
  return name
end

name = gets_name
hello name

class化

このコードをclass化します.

class_greeter.rb
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 class_greeter.rb
-> Hello World.

> ruby class_greeter.rb W
-> Hello W.

class化する前と同じ出力を返すものができます.

ここで,

  • class Greeter: Greeterクラスの定義
  • def initialize: 初期化を施す関数. C++などのコンストラクタと同じような働きかな?
  • @name: メンバ変数
  • Greeter.new: Greeterクラスのインスタンスを生成

はRubyでのclass化での基本となります.

参考資料

チャート式ruby-VI(hello class)

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?