• Ruby

    each文で見出しの数字を表示させるときに便利なメソッド

    自分でオリジナルのコードを書き、狙い通りに動けばそれでいい!そう思っていました。

    コードの書き方は人それぞれ。

    より効率良くコードを書いている人がいることを、知った方がいい。

     

    そういったコードを初心者が手探りで探すことは非常にいい経験になるとは思うのですが、

    膨大な時間がかかったり、正解に辿り着けなかったりとリスクが伴います。

     

    私が入会しているオンラインサロンで出される”お題”では、

    同じ問題をそれぞれが解き、その解答をみんなで共有出来るという非常にありがたいサイクルが出来上がっています。

     

    先日も非常に良いコードを学べたので、そちらを紹介します。

     

    【お題】

    佐藤、鈴木、高橋の3人の名前を配列に格納し、
    その要素を1つづつ取り出して「〜さん」というふうに表示してください。できる人は「No.〜:〜さん」と表示してみてください!

    ヒント:繰り返し処理

    これは繰り返しのeach文だな!
    数字も変数を定義して使えばいいんじゃないか?
    と思った私の解答はこちら

    変数namesに名前の配列を格納、numberという変数に1を代入して、

    each文の中で表示されるときには1を足して表示させるようにしました。

     

    しかーし!

    他の方が書いた解答がこちら

    このコードではeach.with_indexメソッドが使われていて、

    よりスマートなコーディングとなっています!

    each.with_indexとは?

    配列の要素の番号を扱うことの出来るメソッド。

    使い方はこちら

    配列名.each.with_index(開始させたい値) do |item, i|
    処理
    end

    今回のお題では、

    • 佐藤さんにはNo.1を
    • 鈴木さんにはNo.2を
    • 高橋さんにはNo.3を

    と、配列の要素だけでなく番号も表示するよう指示されているような場合に

    ぜひとも使いたいメソッドです!

     

    さらに

    each文で{}を使うとdoとendを省略出来る書き方がこちら

    配列名.each.with_index(開始させたい値) {|item, i|}

    こちらもスッキリしますね〜!

    実際この省略した書き方で書いたコードはこちら

    私が考えて書いたコードよりも、かなり短くなっていて、

    タイピングが少なくて済みますね!

     

    ちなみにeach_with_indexという”.”か”_”の違いだけで使い方が変わってくるメソッドもあります。

    each_with_indexとは?

    each.with_indexと同様に、配列の要素の番号を扱うことが出来るのですが、

    開始される数字が”0″と決まっています!

    そのため、今回のお題でこのeach_with_indexを使う場合は

    値(i)に1をプラスしないといけません。

     

    each_with_indexを使い省略して書いたコードはこちら

    なので、任意の数字からスタートしたい場合はeach.with_indexを使ったほうがいいですね!

     

    まとめ

    • 自分の知らなかったメソッドを知り、コードがもっと短縮出来ることを知った。
    • そこから調べていくうちにeach.with_indexとeach_with_indexの違いを自分で見つけて理解すること出来た

    お題について考えるのはもちろん、このような学びがあり、非常によかったと思います!

     

    参考
    Ruby each_with_indexを即理解!値を1から開始させる方法も解説