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

さらっと流してしまいがちだけど、改めてtimesメソッドについてまとめてみた。

Last updated at Posted at 2020-10-05

timesメソッドとは

 数値オブジェクトに使うことができる、メソッド。do~endで囲った処理を数値の数だけ繰り返す。

結論

あえて、最初に結論から述べる。

ブロック変数ブロックパラメーターは、ブロックの中でのみ有効(スコープ)
・外で定義したものも、ブロックの中では使える(書き換えられることに注意)

このことを頭の片隅に置き、読み進めていって欲しい。

スコープ

 スコープとは、定義した変数が使える範囲のこと。

ブロック

do~endもしくは、{ }(波括弧)の中をブロックと呼ぶ。さらに、ブロックの中で|変数名| ||(パイプライン)の中の変数をブロック変数ブロックパラメーターという。

STEP1

確実に理解するために、まずはここから。


num = 1
puts num
# =>1

こんなプログラム、変数のいちばん初めに出てくる。
丁寧に説明をすると、1という数値を変数numに代入し、それをputsで呼び出している。意識はしていないが、変数numの及ぶ範囲(スコープ)だから、putsで呼び出すことができる。

STEP2

num = 1

3.times do
 puts num
end
# =>1
#  1
#  1

これは、puts numが3回繰り返され、「1」が3回結果として出された。注目すべき点は、変数numのスコープ。do~endの外で定義された変数を使うことができている。

STEP3

3.times do
 num = 1
end
puts num
# =>NameError

STEP2と似たコードだが、エラーが出ます。↓


NameError (undefined local variable or method num for main:Object)

簡単に訳すと、「puts numnumが定義されていないよ」ということ。
そうです、do~endの中で定義されたものは、do~endの外では呼び出すことができないということ。
実はつまずきポイント!!

STEP4

num = 1

3.times do|i|
 num = num + i
end
puts num
# =>4

読み解くポイント
ブロック変数ブロックパラメーターは0から始まり、1ずつ増える。上の例でいくと、1週目には「0」が、2週目には「1」が、3週目には「2」が代入されていると考える。

②外の変数は書き換えられている。

丁寧に書くと↓
1週目 num + 0 =>numが1と定義されているので、「1 + 0」がnumに代入される。
2週目 num + 1 =>上記より、numは1で、2週目なので、iが1に変わり、「1 + 1」がnumに代入される。
3週目 num + 2 =>上記より、numは2で、3週目なので、iが2に変わり、「2 + 2」がnumに代入される。

ポイント

  •  ブロック変数ブロックパラメーターはその名の通り、ブロックの中でのみ有効。
  •  ブロックの外で定義した変数をブロック内の処理によって書き換えることができる。

最後に

 繰り返し処理については、プログラミングを学習して、早い段階で覚える内容で、理解したつもりでも細かいところまでは覚えていないことがあるので、この機会に復習を。

0
0
2

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
0
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?