ネオキャリアグループ エンジニアブログ

ネオキャリアグループのエンジニアによるブログです

プログラミング初心者に送る!Rubyの便利なおすすめメソッド集

こんにちは!ぐっちです!

プログラミング言語の中でも、比較的習得しやすく、初心者向けの言語と言われている「Ruby」

最近では、プログラミングスクールなどでもRubyを教えてくれるところが増えてきており、Rubyを入り口にプログラミングの世界に入る方も多くなってきているのではないでしょうか?

今回は、そんなプログラミング初心者(Ruby初心者)に向けた便利なメソッドを紹介できたらなと思ってます!

ちなみに弊社ネオキャリアのエンジニア研修でもRubyを使ったチーム開発を行っております。

初心者が抱えがちな問題

メソッドを紹介する前に、プログラミング初心者によくある問題についてお話させていただきます。

初心者の方が、プログラミングの基本的な文法(if文, for文, case文...etc)を覚えて、実際にコードを書くにあたってよくありがちなのが覚えた基本文法だけで複雑な処理を実装しようとすることです。

たくさんの場合分けや複雑な繰り返し処理を、if文やfor文を乱用して無理やりに動かすことが、初心者のうちは多いと思います。

実際コードは動くので、一見良さそうに思えるのですが、

  • しばらく経ってからもう一度コードを確認すると自分が何をしていたか分からなくなり、理解するのに時間がかかったりする
  • バグが発生したときに、そのバグを追うのが大変

と、上記のような問題が起きます。
これは、実際に僕も経験した問題で、非常に大変な作業でした。笑

また、チームで開発を行ったりすると、チーム全員が上記の問題を抱えることになります。

なので、今回の記事では、初心者の方が、冗長化したコードを少しでも簡略化できるように僕が便利だと思ったメソッドを紹介しようと思います!

便利なメソッド集

map

mapメソッドは、配列において使えるメソッドであり要素の数だけブロックを実行し、ブロックの戻り値を集めた配列を作成します。

samples = ["hoge", "fuga", "fugo"]

p samples.map { | sample | "Hello, " + sample }
# => ["Hello, hoge", "Hello, fuga", "Hello, fugo"]

今回だと、"Hello, "とsamplesの各要素を連結して、その値を集めた新しい配列になります。

mapメソッドは、その新しい配列が戻り値となります。

戻り値が分からないという方はこちらをどうぞ。
wa3.i-3-i.info

繰り返し処理の中で、配列に要素を加えている作業を行っている場合は、mapを使えば、簡略化できる場合があります。

inject

こちらのinjectメソッドも、配列で使用できるメソッドで、繰り返しで計算を行うときに非常に便利です。

samples = [3, 5, 6]

samples.inject { | sum, n | sum + n }
# => 14

sumには、ブロックの前回の戻り値が入り、nには、配列の要素が入ります。

injectメソッドの戻り値は、最後に実行されたブロックの戻り値となります。
ちなみにブロックとは、今回は繰り返しで行われる処理と認識してください。

もう少し簡略化すると

sample.inject(:+)

と、書くことも出来ます。

これだと本当に繰り返し処理には、見えませんね。笑

三項演算子

よくif文を使っていると、

snack = "apple"

if snack == "apple"
  p "おやつはりんごでした。"
else
  p "おやつはりんごじゃありませんでした。"
end

というようなパターンがあると思いますが、三項演算子を使うと、一行で記述することが出来ます。

snack = "apple"

p snack == "apple" ? "おやつはりんごでした。" : "おやつはりんごじゃありませんでした。"

三項演算子は、[条件式] ? [条件式が真の時] : [条件式が偽の時]の形で表すことができ、短いif...else文の場合に、使用するとコードがスリムに見えます。

しかし、複雑なif文を三項演算子で書くと余計見づらくなるので、その場合は、普通にif文を使いましょう。

each_key, each_value

こちらは、連想配列(ハッシュ)で使用できるメソッドで、連想配列での繰り返し処理において、キーもしくは値のどちらか一方だけを使用して繰り返し処理を行いたいというときに便利です。

samples = { "hoge" => "aaa", "fuga" => "bbb", "fugo" => "ccc" }

samples.each_key { | key | p key }
# => hoge fuga fugo
samples.each_value { | value | p value }
# => aaa bbb ccc

二つのメソッドの戻り値は、どちらもレシーバつまり今回であれば、samplesになります。

each_cons

ここからは、使用頻度が高いわけではないのですが、Rubyでは、こういうこともできるんだよというメソッドを紹介していこうと思います。

each_consは、引数で数字を指定し、その数の要素を同時に取り出し、繰り返しを行います。

samples = ["hoge", "fuga" ,"fugo", "hogi"]

samples.each_cons(2) { | m, n | p m + "" + n + "は隣同士です。" }
# => hogeとfugaは隣同士です。
# => fugaとfugoは隣同士です。
# => fugoとhogiは隣同士です。

Rubyでは、要素複数でも繰り返しが出来るみたいですね。
しかし注意しないといけないのは、最後の要素に達した時点で繰り返しは終了するので、普通の繰り返し処理の回数よりも少なくなります。

三角関数

Rubyでは、三角関数も簡単に扱うことが出来ます。
「サイン、コサイン、タンジェント」というやつですね。

Rubyで標準に備えられているMathモジュールには、数学演算をサポートしてくれるメソッドがあります。

Math.sin(60 * Math::PI / 180)
# => 0.8660254..(√3 / 2)
Math.con(60 * Math::PI / 180)
# => 0.5 (1 / 2)
Math.tan(60 * Math::PI / 180)
# => 1.732050..(√3)

注意しなければならないのは、引数は、ラジアンを指定しなければならないので、

上記の例のように、
[角度] * Math::PI / 180
として角度からラジアンに変換してから使用しましょう。

Math::PIは、πです。
出力してみると、3.141592654と表示されますよ(^^)

まとめ

いかがでしたでしょうか?
初心者の方は、自分の書いているコードで活かせそうなところがあれば、ぜひ応用してみてください。

また僕も知らない便利なメソッドや、gemなどもたくさんあるので、自分で探してみるのも面白いかと思います!

以上、ぐっちでした(^^)