Ruby~クラス2~

未分類

こんにちはkazutoです。
今回は、クラス=>インスタンスを生成=>属性、動作という流れを、実際にプログラムを組みながら解説していきます。

実装内容

今回は、Humanクラスというクラスを用いて、

  • 挨拶をする
  • 自己紹介する

という動作(メソッド)をプログラム化していき、オブジェクト指向の概要を掴みましょう。

クラスの定義

まず初めに、一般的なクラスの定義方法を確認してみましょう。

class クラス名
end

クラスの定義の記述はとてもシンプルですぐに覚えられると思います。構文が確認できた所で、実際に、クラスを定義してみましょう。

class Human
end

注意点は、クラス名はアルファベットの大文字で始まるという点です。なので、クラス名を命名をする際に気をつけてください。

インスタンスを生成をする

クラスが用意できた所でインスタンスを生成してみましょう。まずは構文を確認してみましょう。

class クラス名
end
変数名 = クラス名.new

上記の通り、インスタンスを生成をする際は、newメソッドを用います。変数に格納する理由としては、インスタンスの情報を保持しておくためです。

構文も確認できた所なので、先ほどのHumanクラスから、インスタンスを生成をしてみます。

class Human
end
kazuto = Human.new

ポイントとして、インスタンスを生成をする際は、クラス外でインスタンスを生成をします。クラス内の処理と、実行処理を分断をし、可読性を上げるためです。

putsを使って変数kazutoの中身をみてみましょう。

class Human
end
kazuto = Human.new
puts kazuto

[出力結果]

#<Human:0x00007fd45a130ca0>

上記が、クラスのインスタンスの中身です。現状、インスタンス自身には、何も情報が持っていません。なので、属性という情報を持たせてみましょう。

インスタンスに情報(属性)を持たせる

インスタンスに情報(属性)を持たせてみましょう。

class Human
  def initialize(name,age,height,weigth)
  #属性
    @name   =  name
    @age    =  age
    @height =  height
    @weigth =  weigth
  end
end
kazuto=Human.new("kazuto",21,170,64)

処理内容として、インスタンスを生成する際に、newメソッドに4つの情報を本引数として、initializeメソッドに渡して、インスタンス変数に値をセットしています。
新しい知識が出てきたので、解説していきます。

initializeメソッド

initialize(初期化する)という意味の通りクラスの情報を初期化します。ポイントは、newメソッドが実行したら自動的にinitializeメソッドが呼ばれます。newメソッドの引数に情報を持たせれば、initializeメソッドに情報を渡すことができます。
なので、newメソッドとinitializeメソッドはセットで覚えましょう。

class Human
 def initialize()
    puts "初期化します"
 end
end
#newメソッドを呼び出したタイミングで
#initializeメソッドも自動的に呼ばれる
Human.new

[出力結果]

初期化します

インスタンス変数

インスタンス変数とは、クラス内で全メソッドで共通して使用する事ができます。初めのうちはローカル変数よりスコープの範囲が広いという認識で大丈夫です。

class Human
  def name
    @name="kazuto"
  end
  def greeting
  puts "こんにちは#{@name}です"
  end
 
end
  kazuto=Human.new
  kazuto.name
  kazuto.greeting
  
  1. インスタンスを生成,kazutoという変数にインスタンスの情報を格納する
  2. kazuto.nameでインスタンス変数@nameを初期化をする。
  3. kazuto.greetingでインスタンス変数を埋め込んだ文字列を出力する

という処理内容です。

initializeメソッドの用いることで、1〜2の作業を同時に行うことができ、コードの記述量を減らす事ができます。なので、インスタンスを生成する際は、initializeメソッドを使いインスタンス変数を初期化します。

以上で解説が終わりです。

もう一度、Humanクラスのコードをみてみましょう。

class Human
  def initialize(name,age,height,weigth)
  #属性
  #インスタンス変数の初期化
    @name   =  name
    @age    =  age
    @height =  height
    @weigth =  weigth
  end
end
#インスタンスを生成
kazuto=Human.new("kazuto",21,170,64)

実装している内容

  1. インスタンスを生成
  2. インスタンス変数(属性)の初期化

動作(メソッド)

インスタンス変数に属性を持たせた所で今度は、動作の部分を実装していきます。

  • 挨拶をする
  • 自己紹介をする

という動作をHumanクラス内に定義します。

 class Human
#属性
   def initialize(name,age,height,weigth)
     @name   =  name
     @age    =  age
     @height =  height
     @weigth =  weigth
   end
#動作
   def greeting
     puts "こんにちは#{@name}です。"
    end

    def self_introduction
     puts "私の名前は#{@name}です。"
     puts "年齢は#{@age}です。"
     puts "身長は#{@height}cm,体重が#{@weigth}kg。"
     puts "よろしくおねがします。"
    end
 end
#処理
kazuto=Human.new("kazuto",21,170,64)
kazuto.greeting
kazuto.self_introduction

動作=メソッドなので、細かい解説はしませんが、

クラス内のメソッドの呼び出し方法
インスタンス情報が格納された変数.クラス内のメソッド
#インスタンス生成
kazuto=Human.new("kazuto",21,170,64)
#クラス内のメソッドの呼び出し
kazuto.greeting
kazuto.self_introduction

上記の解説の通り、どのようにすれば、クラス内のメソッドを呼び出せるかは、完璧に覚えてください。

まとめ:Ruby~class2~

今回は、クラス=>インスタンスを生成=>属性、動作という流れを、実際にプログラムを組みながら解説していきました。
クラスの概念自体は難しいです。しかし、記述する内容自体は、特に難しい公式などはありませんので、安心してください。


以上、kazutoでした。

関連記事

※クラスの概念については、解説をしません。クラスの概念、オブジェクトについての記事はこちらから参照してください。