より良いコードを書くのに役立つ7つのあまり知られていないRubyメソッド
適切なRubyメソッドを使用すると、多くの作業を節約できることをご存知ですか?
使い慣れたメソッドが多ければ多いほど、動作するコードをより速く作成できます &このコードは、パフォーマンスと品質の両方で優れています。
そのため、本日は、これまでに見たことのない7つの興味深い方法を紹介したいと思います。
コンテンツ
- 1 Integer#digitsメソッド(Ruby 2.4)
- 2タップ方式
- 3 Array#values_at
- 4 Hash#transform_values(Ruby 2.4)
- 5 Kernel#itself(Ruby 2.2)
- 6 Array#count
- 7 Enumerable#cycle
- 8まとめ
- 8.1関連
Integer#digitsメソッド(Ruby 2.4)
これはRuby2.4で導入された新しいメソッドであり、整数の個々の数字を操作する場合に非常に便利です。
注 :Ruby 2.4の変更に慣れていない場合のために、FixnumとBignumは非推奨になり、両方ともIntegerにマージされました。
配列のようなインデックスを使用するとうまくいくと思うかもしれません :
2[0] # 0 2[1] # 1
しかし、得られるのは数字ではなく、この数値を構成する2進ビットです。
したがって、digits
より前 方法一般的な解決策は、数値を文字列に変換してから、chars
を使用してその文字列を文字の配列に分割することでした。 メソッドを実行し、最後にすべての文字列を整数に変換し直します。
例 :
123.to_s.chars.map(&:to_i).reverse [3, 2, 1]
しかし、ポストdigits
メソッドの世界では、これを簡単に行うことができます:
123.digits [3, 2, 1]
はるかに良いですね。
ビデオ :
タップ方法
オブジェクトを作成し、そのオブジェクトでいくつかのメソッドを呼び出して、同じオブジェクトを返したい場合があります。
このようなことをする必要があります :
user = User.new user.name = "John" user
問題は、この一時変数を処理する必要があることです。
ここでtap
方法が助けになります!
tap
を使用 最後の例は次のようになります:
User.new.tap { |user| user.name = "John" }
一時変数がどのようになくなったかに注意してください。これは良いことです🙂
Array#values_at
配列またはハッシュから複数の非順次値を取得する場合は、次のようにします。
arr = [1,2,3,4,5] a, b, c = arr[0], arr[1], arr[4]
または、values_at
を使用することもできます 方法:
arr = [1,2,3,4,5] a, b, c = arr.values_at(0, 1, 4)
これはハッシュでも機能します :
hash = {bacon: 300, chocolate: 200} p hash.values_at(:bacon, :chocolate) # [300, 200]
Hash#transform_values(Ruby 2.4)
ハッシュがあり、何らかの理由ですべての値を変更したいとします。
Array#map
で行うことのようなもの 。
map
の問題 ハッシュの代わりに配列の配列(多次元配列)を取得するということです。また、Hash#map!
はありません。 。
つまり、1つの解決策はこれである可能性があります :
h = {bacon: 200, coconut: 300} h.each { |k,v| h[k] = v*2 }
この例では、各値に2を掛けます。
結果 :
{:bacon=>400, :coconut=>600}
Ruby 2.4以降、これを行うためのより良い方法があります :
h.transform_values! { |v| v * 2 }
これは、Railsに由来する別のメソッドであり、フレームワークの外部で利用できるようになりました🙂
Kernel#itself(Ruby 2.2)
この方法は最初はあまり面白くないと言われたら、私はあなたに同意します。
しかし、その理由は、いくつかの良い例を見る必要があるからです。
たとえば、単語が繰り返されている配列があり、それらを数えたいとしましょう…
これを行う方法はたくさんありますが、これは新しい友達をテストするのに最適なケースだと思います:Kernel#itself
。
例 :
words = %w(cat cat tiger dog cat) words.group_by(&:itself).transform_values(&:size)
これをHash#transform_values
と組み合わせた方法にも注目してください。 !
transform_values
の場合 利用できません。これを行うことができます:
words .group_by(&:itself) .each_with_object({}) { |(k,v), hash| hash[k] = v.size }
ビデオ :
注 :itself
メソッドはObject
の下に表示されます ドキュメントのクラスですが、メソッドはKernel
で定義されています モジュール。
Array#count
時々あなたはただ何かを数える必要があります。
通常のカウンター+ループを使用する代わりに、count
を使用できます。 メソッド!
例 :
letters = %w(a a a b c d a) letters.count("a") # 4
このメソッドの配列バージョンもブロックを取るため、より複雑なカウントを行うことができます。
numbers = [1,2,3,4,5,6] numbers.count(&:even?) # 3
ビデオ :
Enumerable#cycle
いくつかのパターンを繰り返しますか?または、簡単なオン/オフの切り替えが必要ですか?
次に、Enumerable#cycle
あなたが探しているものかもしれません!
例 :
array = %w(a b c) # Same as array * 3 array.cycle(3).to_aと同じ
しかし、私のお気に入りのcycle
「スイッチ」または「トグル」オブジェクトを作成することです。
switch = %w(on off).cycle switch.next
これの良いところは、スイッチの現在の値をチェックして手動で更新する必要がないことです。
next
を呼び出すだけです &Rubyは何をすべきかを正確に知っています🙂
概要
Integer#digits、Kernel#tap、Array#values_at、Hash#transform_values、Kernel#itself、Array#count、Enumerable#cycleなどの新しい便利なメソッドについて学習しました。
あなたがすでにこれらの素晴らしいことを知っていたなら!そうでない場合は、それらがお役に立てば幸いです🙂
この記事を楽しんだ?次に、友達と共有します 彼らもそれを楽しむことができます!
-
Rubyの関数とメソッド:独自の関数を定義する方法
Rubyメソッドとは何ですか? メソッドは、特定の目的のためにグループ化された1行または複数行のRubyコードです。 このグループ化されたコードには名前が付けられているため、コードを再度記述したり、コピーして貼り付けたりすることなく、いつでも使用できます。 メソッドの目的は次のとおりです : 情報を取得します。 オブジェクトを変更または作成します。 フィルターとフォーマットのデータ。 例1 : サイズ Arrayのメソッド オブジェクトは要素の数を示します(情報を取得します)。 例2 : pop メソッドは、配列から最後の要素を削除します(オブジェクトを変更します)。
-
Rubyでの静的分析
ソースコードを解析して、すべてのメソッド、それらが定義されている場所、およびそれらが取る引数を見つけたいとします。 どうすればこれができますか? あなたの最初のアイデアはそれのために正規表現を書くことかもしれません… しかし、もっと良い方法はありますか? はい! 静的分析 は、ソースコード自体から情報を抽出する必要がある場合に使用できる手法です。 これは、ソースコードをトークンに変換する(解析する)ことによって行われます。 さっそく始めましょう! パーサージェムの使用 Rubyには標準ライブラリで利用可能なパーサーがあります。名前はRipperです。出力を操作するのは難し