学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Ruby | 15 | インスタンス変数

↓↓クリックして頂けると励みになります。



14 | メソッドの利用】 << 【ホーム】 >> 【16 | クラス

インスタンス変数
インスタンス変数



Rubyのインスタンス変数(Instance Variables)は、オブジェクト指向プログラミング言語であるRubyにおいて、特定のインスタンス(オブジェクト)に紐づけられた変数です。
これらの変数は、そのオブジェクトの状態や属性を表すために使用されます。

Rubyにおける「インスタンス」とは、クラスから生成された具体的なオブジェクトのことを指します。
Rubyはオブジェクト指向プログラミング言語であり、クラスを使ってオブジェクトを定義します。
そして、そのクラスから具体的なデータを持ったオブジェクトを生成することができます。
この生成されたオブジェクトが「インスタンス」と呼ばれます。

Rubyでは、クラスを定義してそのクラスからインスタンス(オブジェクト)を作成することができます。
そして、そのインスタンスには独自の状態を持たせることができます。
その状態を保持するために使われるのがインスタンス変数です。

インスタンス変数は、@記号で始まります。

インスタンス変数は、そのオブジェクト内であればどこからでもアクセス可能です。
他のメソッドからも直接アクセスできます。

Visual Studio Codeで以下のプログラムを作ってみましょう。


新規作成 【saikoro1.rb】

# saikoro1.rb

def throwDices(score)
	me1 = rand(0..5).to_i
	me2 = rand(0..5).to_i
	showDices( me1, me2 )
	score = checkPoints( me1, me2, score )
	return score
end

def showDices( a, b )
	diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|']
	puts ''
	puts (diceStrings[a]).to_s + ' ' + (diceStrings[b]).to_s
	puts ''
end

def checkPoints( a, b, score )

	bet = 5
	c = a + b + 2
	if ( c%2 == 0 ) then
		if ( a == b ) then
			score += bet*2
			puts 'あなたは ' + (bet*2).to_s + '$ 勝ちました。'
		else 
			score += bet
			puts 'あなたは ' + bet.to_s + '$ 勝ちました。'
		end
	else
		if( c == 7 )
			score -= bet*15
			puts 'あなたは ' + (bet*15).to_s + '$ 負けました。'
		else
			score -= bet*10
			puts 'あなたは ' + (bet*10).to_s + '$ 負けました。'
		end
	end
	puts 'あなたの持ち金は' + score.to_s + '$ です。'
	return score
end

def keyInput()

	begin
		gets
        rescue
	end
end

def main()
	score = 100
	round = 1

	while ( score > 0 ) do
		puts ''
		puts 'エンターキーを押してください。'
		keyInput()
		puts ''
		puts 'ラウンド:' + round.to_s
		score = throwDices(score)
		round += 1
	end
	puts 'あなたのお金はなくなりました。ゲームオーバーです。'
end

main()



まず最初に次の文を見てください。

diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|']

これは、サイコロを記号で作っています。
シングルコーテーション(')で囲まれた部分が配列の箱一つに入ります。


mainメソッドでは、while文を使ってscoreが0になるまでループを行っています。
呼び出されるメソッドはkeyInput()throwDices()です。
まずは、keyInputメソッドから説明します。

def keyInput()

	begin
		gets
        rescue
	end
end

ここでは、begin,rescueの構文を使っています。

	begin
		実行文
        rescue
		実行文
	end

まず、beginの実行文には「何をしたときに」というのが入ります。 
今回は、gets「キーボードからの入力があった時に」という形になります。


getsは標準入力といいます。
今回のプログラムでは、何か入力があるまで待機するといった処理を行います。
何か入力があれば次の処理に進みます。
一時停止みたいなものです。


rescueは「もし入力にエラーが生じたら、rescueの実行文の内容を行いなさい」という意味になります。
今回は、実行文がありませんので実際にエラーがあっても何も起きません。


rand(0..5)という記述で、0から5までの整数がランダムに出ます。
ここで得られた2つの変数は、showDices()checkPoints()の二つのメソッドに引数として渡されます。
showDices()は、渡された2つの数字をサイコロにして表示しています。
checkPoints()は与えられた数字に対して、配当を決めています。
今回のプログラムの勝敗は、偶数か奇数か、同じ目が出たかどうかしか判定していません。


条件によって変数scoreに数字が足し引きされreturnで返しています。


実行してみましょう。

~/Desktop/Programming/RB $ ruby saikoro1.rb 

エンターキーを押してください。


ラウンド:1

| : | |:::|

あなたは 5$ 勝ちました。
あなたの持ち金は105$ です。

エンターキーを押してください。


ラウンド:2

|...| |:::|

あなたは 50$ 負けました。
あなたの持ち金は55$ です。

エンターキーを押してください。


ラウンド:3

|:::| | * |

あなたは 75$ 負けました。
あなたの持ち金は-20$ です。
あなたのお金はなくなりました。ゲームオーバーです。



Visual Studio Codeで以下のプログラムを作ってみましょう。


新規作成 【saikoro2.rb】

# saikoro2.rb

@score = 100
@bet = 5
@round = 1
@choice = 0

def throwDices()
	me1 = rand(0..5).to_i
	me2 = rand(0..5).to_i
	showDices( me1, me2 )
	checkPoints( me1, me2)
end        

def showDices( a, b )
	diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|']
	puts ''	
	puts (diceStrings[a]).to_s + ' ' + (diceStrings[b]).to_s
		puts ''
end

def checkPoints( a, b )
	c = a + b + 2
        d = 0
        if( c%2 == @choice ) then
	        if ( a == b || c == 7 ) then
			d = @bet*2
                else
                        d = @bet
		end
		print  'あなたは'
		print d.to_i
		puts '$を手に入れました!'
		@score = @score + d.to_i

	else
		if ( a == b || c == 7 ) then
			d = @bet*2
       		else
			d = @bet
		end
		print  'あなたは'
		print d.to_i
		puts '$負けました。'
		@score = @score - d.to_i
	end
	puts 'あなたの持ち金は ' + @score.to_s + '$です。'
end

def keyInput()

	begin
		s = gets
        rescue
		puts '予期しないエラーが起きました'
	end
	return s
end

def choice()

	puts ''
	puts '偶数か奇数かを選んでエンターを押してください。'
	puts '偶数ならEVEN 奇数ならODDと入力してください。'
        print 'EVEN or ODD-> '

        str = keyInput()
        if ( str[0] ='e' || str[0] = 'E' ) then
	        @choice = 0
        else
                @choice = 1
        end
end

def bet()
	puts ''
	puts '掛け金を入力してください'
	print '-> '
	@bet = keyInput()
end

def main()
	while ( @score > 0 ) do
		puts ''
		puts 'ラウンド:' + @round.to_s
		choice()
		bet()
                throwDices()
                @round += 1
	end
	puts 'あなたのお金はなくなりました。ゲームオーバーです。'
end

main()



このプログラムでは、「インスタンス変数」を使用しています。
インスタンス変数は変数名の前に「@」が付きます。

@score = 100
@bet = 5
@round = 1
@choice = 0

インスタンス変数を使用すると、プログラムの中で値を保持し続ける事が出来ます。
プログラム内の全メソッドで共通して使用することが出来るのでとても便利です。


checkPoint()メソッドを見てみます。

c = a + b + 2

最後に2を足しているのは、次の条件に理由があります。

if ( a == b || c == 7 ) then

このc == 7に当てはめる確率を上げています。
2を足さなければ、1と6の組み合わせしかありません。

str = keyInput()
if ( str[0] ='e' || str[0] = 'E' ) then

これは、strの最初の文字がeかEならばという意味です。


出力結果を見てみましょう。

~/Desktop/Programming/RB $ ruby saikoro2.rb

ラウンド:1

偶数か奇数かを選んでエンターを押してください。
偶数ならEVEN 奇数ならODDと入力してくださいEVEN or ODD-> E

掛け金を入力してください
-> 100

|: :| |:::|

あなたは100$を手に入れました!
あなたの持ち金は 200$です。

ラウンド:2

偶数か奇数かを選んでエンターを押してください。
偶数ならEVEN 奇数ならODDと入力してくださいEVEN or ODD-> O

掛け金を入力してください
-> 200

| : | |...|

あなたは200$負けました。
あなたの持ち金は 0$です。
あなたのお金はなくなりました。ゲームオーバーです。



14 | メソッドの利用】 << 【ホーム】 >> 【16 | クラス




↓↓クリックして頂けると励みになります。