【Ruby入門】eachメソッドの使い方と応用例
  • facebookページ
  • twitterページ
  • 2017.09.09

    【Ruby入門】eachメソッドの使い方と応用例

    本記事では、Rubyで繰り返し処理をするときに使うeachを解説します。

    eachを使い、配列やハッシュ(Rubyにおける連想配列です)の要素を全て処理するといったことが可能です。またeachの使い方だけでなく、範囲オブジェクトtimesメソッドといったRubyらしい特徴も解説していきます。

    本記事を読み終えると、eachを使った基本的な実装、プラスアルファで、繰り返し処理における「Rubyらしい特徴」が理解できていますよ!

    Rubyにおけるeachとは?

    前述のように、eachとはオブジェクトにおける繰り返し処理に使います。まずは基本構文を見てみましょう。

    [基本構文]

    オブジェクトの要素が変数の中に入り「# 繰り返したい処理」にてその変数を利用可能です。それが要素分繰り返されます。

    他の言語を習得された方は、いろんな違いがあることに気づかれたことでしょう。順に解説していきます。

    カウンタを必要としない

    例えば、C言語で処理を10回繰り返す処理は以下になります。

    上記C言語と比較して、Rubyのeachはカウンタ用の変数は不要、ということに気づかれたでしょうか?

    eachが使える対象は広い

    基本構文はオブジェクト.eachです。しかしオブジェクトとは具体的には何?という疑問がでてきましたか?

    .eachの前の「オブジェクト」とは、配列やハッシュ(連想配列)、さらにRubyの特徴でもある範囲オブジェクトなどがきます。つまり、何が来ても.eachをつければよい、というのは使いやすいですね。

    オブジェクト指向の考え方をすでにマスターした方は、eachが使える対象は?というよりも、扱うオブジェクトはeachメソッドを持つか?と考えたほうがよいでしょう。

    配列にeachを使う

    配列のすべての要素を処理してみましょう。

    arrayという、要素を10個持つ配列を想定します。要素の中は以下とします。

    array[0] = ‘zero’
    array[1] = ‘one’
    array[2] = ‘two’
    array[3] = ‘three’

    以下のコードを実行します。

    [実行結果]

    arrayの中身がitemに入り、「puts item」でitemの中身が出力されました。

    ところで、要素だけでなくインデックス(要素の順番を示す番号)も欲しいという場合はどうすればよいでしょうか?

    Rubyでは、each_with_indexという便利なメソッドがあり、これを使うと簡単にインデックスを取得できます。

    [実行結果]

    itemで配列の中身、indexで番号を受け取ることができました。

    ハッシュにeachを使う

    配列は要素の順番をあらわすインデックスは数値です。ハッシュはインデックスを数値以外で設定できます。ハッシュの中身を以下とします。

    hash[‘one’] = ‘value1’
    hash[’two’] = ‘value2’
    hash[’three’] = ‘value3’

    上記hashをeachですべて処理しましょう。

    [実行結果]

    今度はindexとvalueという2つの変数で、ハッシュの中身を受け取っています。それをputsで出力しました。

    範囲オブジェクト、timesメソッド

    よりRubyらしいというか、Rubyの特徴的なものを紹介します。

    範囲オブジェクト

    繰り返し回数が決まっている場合は、範囲オブジェクトが使えます。以下は5回繰り返す例です。

    [実行結果]

    範囲オブジェクトは開始値..終了値と記述するだけで生成できます。さらにそれに.eachをつけると繰り返し処理が出来上がります。

    Rubyには範囲オブジェクトというものがある、ということをお分かりいただけたでしょうか?

    ここでは触れませんが、範囲オブジェクトは先頭や終了の要素を取得するなどなど、便利なメソッドがたくさんあります。興味のある方はコチラを見てみてください。

    timesメソッド

    本記事eachとは異なるものですが、繰り返しつながりでもう一つ、timesメソッドを紹介します。

    繰り返し回数が決まっている場合は、timesメソッドも使えます。

    [実行結果]

    回数指定で繰り返し処理を実装できました。

    ここで重要なのは、Rubyで数値.timesで繰り返し処理ができる、ではなく「数値すらオブジェクト」ということです。ラッパークラス的なものを使わずに、数値オブジェクトのメソッドを簡単に呼び出せます

    例えば「10.to_s」とすれば文字列化できるし、「14.5.round」とすれば小数点以下を四捨五入できます。

    応用例:ファイルの一覧を取得する。

    最後に、今まで解説してきたことを利用して、特定フォルダのファイルを一覧表示させてみます。

    これだけでOKです。
    Dirクラスのopenメソッドを使いファイルの一覧を取得し、それをeachで全要素を順番に表示しています。

    まとめ

    いかがでしたか?

    eachによる繰り返し処理の実装と、その他プラスアルファのRubyの特徴をお分かりいただけたでしょうか?

    本記事をスタートとして、Rubyに興味を持っていただければ幸いです。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテキャンバナー ポテキャリバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE