「プロを目指す人のためのRuby入門」読書メモ #3
プログラミングの問題(Paiza Challenge)を解いていると時間が経つのも忘れてしまいます。解けなかったりすると、無意識に「ああすれば解けるかも...?」などと考えてしまいますよね。
競技プログラミングの最大手は言わずもがなAtCoderです。最近はギャルの方も取り組まれている様で、徐々に流行しだしている気がしています。
話が逸れましたが今日はそんな競技プログラミングで非常に見かける「配列を用いた問題」に役立ちそうな&:記法についてです。
例えば以下のコード。
array = [1,2,-3,-4,5,-6,7,-8,9]
この配列の中身を全て絶対値にするとき、以前だと私は以下のような感じで記述していました。
array = array.map{|value| value.abs}
mapメソッドを使って値を一つずつabsメソッドで絶対値に変換していました。別にそこまで不便にも感じていなかったのですが、本書にはこれを省略して書ける方法が載っていました。それが以下です。
array = array.map(&:abs)
結構すっきりしていて個人的にはこちらの記法の方が慣れれば好みです。
この&:については追ってエントリを作成しますが、使うにはいくつかの条件があるそうです。本書によると...
①ブロック引数が1つの場合のみ(上コードだとvalue)
②ブロック内のメソッドには引数が無い(つまり .split(",")みたいのは不可)
③ブロック内ではブロック引数に対してメソッドを1回呼び出す以外処理がない(ブロック内にif文があったり、他の式があったりしては不可)
の3つが使用条件らしいです。使いどころは限られますが、コードがすっきりすることで全体の見通しも良くなるため積極的に使用していきたいです。
この記事が気に入ったらサポートをしてみませんか?