7
0

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.

第十一回

Last updated at Posted at 2020-12-25

class

概要

今回はクラスについて取り扱っていく.基本rubyでは,クラス名はアルファベットの大文字で始めなければならない.クラス定義は,識別子で指定した定数へのクラスの代入になる.クラスがすでに定義されているとき,同じクラス名でクラス定義をかくとクラスの定義の追加になる.ただし,元のクラスと異なるスーパークラスを指定するとTypeErrorを起こすので注意.

プログラム

以下,サンプルプログラムとなる.

hello_class.rb
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
7
0
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
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?