• WebCampPro_インタビュー
    未経験でも寿司職人からWebデザイナーになった!ホスピタリティでスクールを支える宮脇トレーナー
    2017.05.26
  • WebCamp_インタビュー
    「自信の持てるスキルを得たい!」内定辞退した女子大生がプログラミングを学習したワケ。
    2018.04.28
  • WebCamp_インタビュー
    時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
    2018.01.26
  • WebCamp_インタビュー
    【WebCamp受講生インタビュー】起業準備中にCEOが気がついたプログラミングスキルの重要性とは?
    2017.12.25
  • WebCamp_インタビュー
    「1カ月頑張ればこの先が見えてくる」地元メディアを立ち上げたママさん
    2017.07.20
  • WebCampPro_インタビュー
    自分で稼ぐ力をつけるため、新卒5年目の営業マンがエンジニアに転職!【WebCampPro転職者インタビュー】
    2018.02.02
  • WebCampPro_インタビュー
    未経験31歳からエンジニア転職を実現【実際に聞いてみた】
    2017.04.01
  • WebCamp_インタビュー
    “未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
    2017.10.04
  • WebCamp_インタビュー
    【卒業生インタビュー】台湾で月間100万UUの訪日旅行メディアを手掛けるCEOが、プログラミングを学んで得たものとは?
    2018.01.15
  • WebCampPro_インタビュー
    未経験から上京し、エンジニアとしてチームラボグループに転職!【WebCampPro卒業生インタビュー】
    2018.03.10
  • WebCamp_インタビュー
    【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
    2018.01.15

◆当サイトで人気のプログラミング教室のおすすめランキングはこちら!
プログラミングは独学では非効率で、時間を無駄にするリスクがあります。効率的なカリキュラムで学べるスクールを受講しましょう。

Web Camp【マンツーマンサポート】1ヶ月短期集中でプログラミングを学ぶスクール
1ヶ月通い放題・メンター常駐の教室環境でWebサービス等作りたい方
TechAcademyオンラインで開講しているプログラミングスクール
オンラインでどこでも学べる!/教室に行くのが忙しい人でも安心!
Tech Camp教養としてのITスキルを学べるスクール
Webデザイン/AI(人工知能)/IOS/Androidアプリ制作/VRを学びたい方!
WebCampPro転職保証付き!エンジニアとして転職したい人におすすめ!
未経験からプロのエンジニアを3ヶ月で目指すプログラミングスクールです。
11月生募集中!当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
10月生は満員となっております。11月生募集に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

Rubyの繰り返しには、多くの手法があります。そのため、どの繰り返し処理を使ったら良いのか、悩んでしまうことが少なくありません。

今回は、RubyのInteger(整数)オブジェクトのメソッドであるupto,downto,timesを詳しく説明しつつ、使い分けの方法を解説します。

整数を使った繰り返しupto,downto,times

Rubyの繰り返し処理には、大きく分けて以下の3種類があります。

・繰り返す回数と繰り返しの中で扱うオブジェクトが決まっているもの(forやeachなど)
・繰り返す回数は不定で、繰り返し続ける(やめる)条件だけが決まっているもの(whileやunlessなど)
・繰り返す回数だけが決まっているもの

本稿で説明するuptoやdownto,timesは、この中でも3つめの繰り返し処理です。

これら3つのメソッドは、整数型オブジェクトのメソッドです。つまり、そのメソッド自体が、最低値もしくは最大値となる繰り返し処理を行いますので、繰り返しの数は、forやeachのように決まった繰り返し処理になります。

しかし、forやeachのように処理すべき要素があるわけではなく、ただindexだけの繰り返しとも言えますので、機能的には単純です。

もちろん、余計な機能(要素へのアクセスなど)がない分、融通が利くとも言えますが、使いどころを間違ってしまうと、効率が悪くなったり、プログラムが読みにくくなったりしますので、注意が必要です。

では、具体的に、upto,downto,timesそれぞれを詳しく説明していきましょう。

stepメソッドも忘れずに

なお、整数型オブジェクトではなく、小数を含む数値オブジェクトには、stepオブジェクトという繰り返し処理を行うメソッドがあります。

stepメソッドを使えば、ここで紹介するメソッドではできないような処理(小数のカウントなど)ができますので、もしやりたいことがuptoやdownto,timesでできなければ、stepについて「【Ruby入門説明書】stepについて解説」で詳しく説明していますので、確認することをおすすめします。

uptoメソッド

ある数値から+1ずつカウントアップしていく繰り返しには、uptoが最適です。

以下の構文で使用することで、整数型オブジェクトの持つ数値から、限界値まで、+1しながら処理を繰り返します。なお、変数はあってもなくてもかまいませんので、処理に利用するのであれば、定義しましょう。

整数型オブジェクト.upto(限界値) do |変数|

処理

end

構文を見てもあまり分かりやすさが見えないかもしれませんので、具体的なプログラムを動かしてみましょう。

動かしてみよう(example)

変数を使う場合と使わない場合、両方のプログラムを見てみましょう。

このプログラムを動かす前に、どんな結果になるか、想像できるでしょうか?

# 変数を使う
3.upto(5) do |i|
puts(i*i)
end

# 変数を使わない
-1.upto(1) do
puts("ruby")
end

どちらの場合も、初期値.upto(最大値)という記述になっていますので、ここでどう数値が動くのかが非常に明確になっています。

この分かりやすさは、他の繰り返しにはまねのできないものです。

(結果)

9
16
25
ruby
ruby
ruby

なお、整数型オブジェクト<=限界値であれば、数値はマイナスでも問題なく動作します。整数型オブジェクト>限界値の場合は、何も処理されません。

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
2017-10-04 10:26
今回の記事では、未経験からWebCampを1ヶ月受講し、その後エンジニアとして転職をした喜田さんにお話を伺いました。 <プロフィール> 喜田 大介 さん (28歳) 大学時代はプ...

downtoメソッド

uptoメソッドとは逆の、downtoメソッドです。

名称だけ見てもどう動くかは予想できそうですが、downtoメソッドを使えば、整数型オブジェクトの示す数値から限界値まで-1しながら繰り返すメソッドです。

構文は、以下のようにuptoとまったく同じです。

整数型オブジェクト.downto(限界値) do |変数|

処理

end

こちらも、プログラムコードを見れば、一目瞭然です。

動かしてみよう(example)

以下がdowntoメソッドのサンプルプログラムです。

こちらも、動かす前にどういう結果になるか考えてみてください。見たままで、何のひねりもありませんが、プログラムにはそれが非常に重要です。

# 変数を使う
5.downto(3) do |i|
puts(i*i)
end

# 変数を使わない
1.downto(-1) do
puts("ruby")
end

「見たそのまま」とも言えるプログラムですが、こんなプログラムコードは、他のプログラム言語ではそうそうお目にかかれないものです。

(結果)

25
16
9
ruby
ruby
ruby

なお、downtoメソッドもuptoメソッド同様、マイナスでも問題なく扱えます。
また、整数型オブジェクト>=限界値でなければ、処理が1度も行われませんので、注意が必要です。

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】
2018-03-22 23:28
今回の記事では、独学でPHPを1年半学習し、その後WebCampを受講して未経験からエンジニアへと転職された佐々木さんにお話を伺いました。 <プロフィール> 佐々木 祐樹 さん(2...

timesメソッド

「【Ruby入門説明書】timeについて解説」から来られた方には、お待ちどおさまでした。ここで説明するのが、時間を扱うTimeクラスとは違う、繰り返し処理を行うtimesメソッドです。

timesメソッドは、整数型オブジェクトの示す数値の回数だけ処理を繰り返します。

uptoメソッドやdowntoメソッドよりも気楽に繰り返し処理をしたいとき、特に繰り返す回数だけがポイントで、初期値や限界値がなんでも良い場合に使いやすいメソッドと言えるでしょう。

構文は以下のようになっています。

整数型オブジェクト.times do |変数|

処理

end

uptoやdowntoにあった限界値もなくなり、とてもすっきりとしています。

timesメソッドも引数は省略できますので、そうなると、ますますシンプルな繰り返し処理と言えます。

プログラムコードを見れば、そのシンプルさに驚くかもしれません。

動かしてみよう(example)

uptoメソッドやdowntoメソッドと同様に、プログラムコードを紹介します。

こちらも、動きを想像してから実行してみましょう。なお、timesの動きを理解するうえで1つだけ憶えておく必要のあるポイントがあります。

それは、timesの繰り返し時のカウントは、0から整数型オブジェクト-1まで+1されるということです。

# 変数を使う
3.times do |i|
puts(i*i)
end

# 変数を使わない
3.times do
puts("ruby")
end

変数の動きが0から始まるという点を除けば、直感的に理解できるプログラムではないでしょうか?

このように、timesは単純に特定の回数処理を繰り返したいとき気楽に利用でき、かつプログラムもすっきりと分かりやすいものになる優れものです。

しかし、0から始まるという動きのため、整数型オブジェクトがマイナスの値だった場合は、処理が行われませんので、気を付けなければいけません。

時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
2018-01-26 13:03
今回の記事では、WebCampに1ヶ月間通い、未経験からエンジニアとして転職した星野さんにお話を伺いました。 <プロフィール> 星野 智洋 さん(25) 学生時代は日本大学芸術学部...

do~endと{~}

少し横にそれますが、ここで「繰り返しの記載方法」について説明します。

ここまで紹介したメソッドについては、繰り返す処理をdoとendで囲んでいました。

このdoとendで囲まれている部分を、ブロックと呼び、繰り返す処理を明確にする役割があります。

ただ、このブロックをdoとendで囲むという方法は、少し煩雑で見にくくなってしまうことがあります。

そのため、doとendで囲む代わりに、{と}で囲む方法でも良いことになっています。例えば、すぐ上のtimesのプログラムは、以下のように書いても問題ありません。

# 変数を使う
3.times { |i|
puts(i*i)
}

# 変数を使わない
3.times {
puts("ruby")
}

必ず{と}を使わなければいけないわけではありませんが、C言語などの他のプログラムから入ってきた人は、この{と}で囲むやり方はなじみがあり、多くのサンプルで使われていますので、知っておいたほうが良いでしょう。

使い分けと使いどころ

upto,downto,taimesの動きについては、直感的に分かりやすくなっていました。

では、実際にこれらのメソッドをどう使い分けるのか、どんなシーンで使うのかを説明していきます。

使い分けのポイント

upto,downto,taimesは、すべて単純な繰り返しを行うのに使えるメソッドです。実際のところ、ただ繰り返したいだけであれば、どれを使っても同じことができます。

例えば、ここまでに紹介した、変数を使わない処理を、改めて並べて実行してみましょう。(結果を分かりやすくするために、タイトルを追加しています)

puts("--- upto ---")
-1.upto(1) do
puts("ruby")
end

puts("--- downto ---")
1.downto(-1) do
puts("ruby")
end

puts("--- times ---")
3.times do
puts("ruby")
end

(結果)

--- upto ---
ruby
ruby
ruby
--- downto ---
ruby
ruby
ruby
--- times ---
ruby
ruby
ruby

結果はすべて同じです。

そのため、結果だけを求めるなら、どれでも同じです。

しかし、プログラムコードを見てみましょう。今回のプログラムの目的である「"ruby"を3回表示する」を直感的に理解できるのは、どの繰り返し処理でしょうか?

この場合は、明らかにtimesメソッドでしょう。

このように、これらのメソッドを使い分けるのであれば、機能だけではなくプログラムの読みやすさ(可読性)を重視することが大事です。

可読性が良ければ、気づかないうちに不具合を埋め込むリスクは大きく下がります。また、第三者がすんなり理解して使うことができるため、再利用性も高まるわけです。

使いどころを考える

使いどころについては、前述の可読性を考慮すれば自ずと決まってきます。

uptoメソッドの場合は、カウントアップして処理をするところ以外に挙げるのが難しいほどです。特に、カウントアップするのがマイナスからだったり、+1するだけで良かったりする場合が、最適な使いどころと言えます。

downtoメソッドは、名前の通りカウントダウンするシーンです。uptoメソッド同様、マイナスの値を扱ったり、1つずつカウントダウンしたりする場合が最適です。

timesメソッドは、すでに説明した通り、単純に繰り返し回数だけを重視して、変数を利用しない場合がもっとも適した使いどころになります。

uptoによく似たuptonってなに?

おまけ程度ですが、uptoによく似た「upton」というものを紹介しておきます。

もちろん、Rubyで使われているものですので、「ruby upto」で検索すると、稀にヒットすることがあります。

しかしこれは、uptoメソッドとは違って、標準のRubyには搭載されていない追加機能です。

詳しく説明すると長くなりますので割愛しますが、uptonはwebスクレイピング(web上の情報を収集すること)プログラムを作成するためのフレームワーク(開発を容易にするための共通環境)です。

gemというコマンドを使って追加することができるものですので、興味がある人は調べてみても良いかもしれません。

まとめ

繰り返しメソッドupto、downto、timesの解説をしました。

何度も書いていますのでしつこいかもしれませんが、これらのメソッドは単機能ですが、その分可読性が高く、プログラムをシンプルに理解しやすくしてくれます。

ぜひ、これらのメソッドを駆使して、可読性が高く不具合がなく、再利用性も高いプログラムを作っていきましょう。

・+1する繰り返しなら、uptoメソッド
・-1する繰り返しなら、downtoメソッド
・繰り返しだけなら、timesメソッド
・同じ機能のメソッドなら、可読性を上げるメソッドを使う

WebCampOnline プログラミングコースについて

WebCampでは、「どこでも学べる」オンラインコースを開講しています。

初心者・未経験の方でもわずか1ヶ月でプログラミングの基礎を学び、アプリケーション開発をすることができます。

WebCampOnlineが選ばれる3つの理由

1.学習の仕方がわからなくても安心!初心者に寄り添った学習カリキュラム

これから学習を始める初心者の方や、独学で挫折してしまった方に向けて、アプリケーション作成をゴールとする一気通貫したカリキュラムを提供しています。2500名を輩出しているWebCampだからこその教室でのリアルな受講生の声を反映し、オンラインコースでも初心者に寄り添った学習体験をご提供いたします。

2.つまずいたらすぐ解決!プロのエンジニアに質問し放題

プログラミング学習で挫折する理由の多くは「つまずいた時に聞ける人がいない」ことです。オンラインコースでは、現役エンジニアやプロ講師に、すぐにチャットでの質問が可能です。つまずきをすぐに解消できるので、挫折せずに学習を継続することができます

3.1ヶ月間で終わらなくても大丈夫!カリキュラムは"卒業後"も"無料"で利用可能

受講したいけど、仕事が急に忙しくなるかもしれないから受講するか迷っている・・・そんな方も多いのではないでしょうか?ご安心ください。カリキュラムは期間終了後も「無料」で使うことができます。また、しっかり学習時間を確保した方も、振り返って学習することでプログラミングスキルがご自身に馴染んできます。

▼まずは無料でWebデザインのカリキュラムを体験しよう!

【インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

ブラジルから帰国し技術をつけようとRubyエンジニアを目指してWebCampでRubyを学び、見事Webエンジニアとして転職を果たした田中さんにお話を伺いました。

Rubyの学習がしたい。基礎をしっかりと理解したい

転職のサポートがほしい

と考えている方はぜひお読み下さい。

【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
2018-01-15 13:23
今回の記事では、WebCampで1ヶ月間Rubyを学習し、Webエンジニアとして転職した卒業生の田中さんにお話を伺いました。 <プロフィール> 田中 デニス 昭彦さん(...
関連キーワード
Rubyの関連記事
  • 【Ruby入門説明書】rescueについて解説
  • 【Ruby入門説明書】jsonについて解説
  • 【Ruby入門説明書】csvについて解説
  • 【Ruby入門説明書】mapについて解説
  • 【Ruby入門説明書】gemsについて解説
  • 【Ruby入門説明書】ruby sliceについて解説
おすすめの記事