timesメソッドは繰り返しの処理を行う上で大切なメソッドになります。
そこで今回は、その基本的な使い方と、「でもこれは何の役に立つの?」という疑問にお答えするために、具体的な礼をご紹介します。
timesメソッドとは
先ほども述べましたが、timesメソッドは「繰り返し処理」を行うメソッドになります。
基本的な以下のような書き方で使われていきます。
# ↓の数字で何回繰り返すかを決めます
10.times do |x| # ここで使うのは、x以外の文字でも問題ありません
puts x # xの中の数字を表示しています
end
ターミナルで実行すると以下のようになります。
0
1
2
3
4
5
6
7
8
9
このようにtimesメソッドは0から始まる10回分の数を返しています。
一度timesメソッドが動く度に、数が1ずつ大きくなっているのも特徴です。
スコープに気をつけよう
timesメソッドが働くのはdo~endの間になります。
※このように変数の使える範囲のことをスコープと言います。
例えば、以下のように書いてしまうとエラーが起きるので、気をつけましょう。
10.times do |x|
end
puts x
実際に実行してみると、ターミナルでは以下のようなエラーが出ます。
Traceback (most recent call last): hoge.rb:4:in `<main>': undefined local variable or method `x' for main:Object (NameError)
エラー文には「4行目の変数xが見つからない(定義されていない)」と言われていますので、修正してあげましょう。
timesメソッドの具体的な使い方(wdayメソッドと組み合わせた月、日、曜日の表示)
以前以下の記事でwdayメソッドの使い方について説明した中で、日付を変更する方法についてご紹介しました。
この記事のおまけの部分で、数日分の呼び出し方について記述しています。
その数日分を実際に呼び出そうとした場合、timesメソッドを使うと今日から決まった日数分を呼び出すことが出来ます。
次に紹介するコードは上記記事と合わせて見ていただけると、理解が進むかと思いますので、是非ご覧ください。
具体的なコード
require 'date'
# 曜日を配列に入れて変数wdaysに設定する
wdays = ['(日)','(月)','(火)','(水)','(木)','(金)','(土)']
# 今日の年、月、日、曜日の情報をtodayという変数に代入する
today = Date.today
# 欲しい日数の分だけの月、日、曜日の情報を取り出す。
7.times do |x| # 数を変えると、好きな日数分を取り出すことができます。
puts "#{(today + x).month}/#{(today + x).day} #{wdays[(today + x).wday]}"
end
ターミナルでは以下のようになります。
3/3 (水) 3/4 (木) 3/5 (金) 3/6 (土) 3/7 (日) 3/8 (月) 3/9 (火)
今は7回繰り返すとしていますので、一週間分の月、日、曜日を取り出すことができました。
仮に繰り返す数値を31に変えると、データの最後は4/2 (金)になります。
このように、ある程度上限のある、連続したものが欲しい場合は使いやすいかもしれませんね。
コメント