Edited at

java経験者が混乱するかもしれないrubyのクラス作成とインスタンス

More than 3 years have passed since last update.

はじめに

最近はjavaをやめてrubyをまた使い始めたのですが

javaやその他言語と比べて、rubyの構文に混乱しそうなもの(インスタンス関連)があったので紹介します

特にこれまでスクリプト言語をやっていなくて、これから始めようという方におすすめです

コードで紹介

まずはサンプルコードという訳で、名前を取得し表示するだけの簡単なプログラムを例に紹介していきます

Java

public class Hello {

private String name;

public Hello(String name) {
this.name = name
}

public void sayHi() {
System.out.println(this.name);
}

public static void main(String[] args) {
Hello result = new Hello("john");
result.sayHi();
}
}

コードの解説をすると

まずクラス内にstring型のnameという変数を定義し、それをコンストラクタ内で呼び出します

それをメインメソッド内でオブジェクト化してインスタンスとして呼び出します

このコードをrubyで書くとどうなるでしょうか?

ruby

class Hello

def initialize(name)
@name = name
end

def sayHi
puts @name
end
end

result = Hello.new("john")
p result.sayHi()

javaで書いたコードと随分違うことがわかりますね

それではコードを解説していきます

まずrubyではクラスを宣言するときにクラス名は大文字から始めます

でないとエラーをはきます

メソッドはdefから始まり先頭の文字は大文字でなくてもいいです

ただ、今回作成したメソッドのうちinitializeメソッドには特徴があり

このメソッドはjavaでいうクラスのコンストラクタです。

また@nameとは何ぞや?と思った方もいると思いますが

@変数名で定義された変数は「インスタンス変数」とよばれ、クラス内つまり同じインスタンス内であれば自由に使うことのできる変数の事です。

また今回のコードではinitializeメソッド内のインスタンス変数を使用せずに@@変数名でクラス変数というものを使って実装することも可能です。

最後に、クラスのインスタンスはクラス外で定義します

rubyにはmainメソッドのようなメソッドが存在しないのでクラス外で定義することになります

また呼び出し方はjavaでクラスのメソッドを呼び出すときと同じです。

以上で終わります