(おそらく)コードを改善するいくつかの便利なルビートリック

この雨の多い休日の天気を見逃して、Samurailsというおしゃべりな名前の面白いブログ記事に出会いました。これは、初心者にとって興味深いと思われる興味深いルビーのトリックについて説明しています。



それでは始めましょう。



配列からハッシュを作成する



そのように簡単。 Hashコマンドを配列の前に置き、キーと値のペアを準備します。



Hash['key1', 'value1', 'key2', 'value2'] # => {"key1"=>"value1", "key2"=>"value2"}
      
      







ラムダ->



->でラムダを付加する機能は比較的最近登場しました。



 a = -> { 1 + 1 } a.call # => 2 a = -> (v) { v + 1 } a.call(2) # => 3
      
      





ダブルスプロケット(**)



この方法はどうですか?



 def my_method(a, *b, **c) return a, b, c end
      
      





aは共通の引数です。 * bは「a」の後のすべての引数を取り、配列に出力しますが、** cはキー/値形式のパラメーターのみを受け入れ、その後、ハッシュを提供します。 いくつかの例を見てみましょう:



1つの引数:



 my_method(1) # => [1, [], {}]
      
      





引数のセット:



 my_method(1, 2, 3, 4) # => [1, [2, 3, 4], {}]
      
      





引数のセット+キー/値のペア



 my_method(1, 2, 3, 4, a: 1, b: 2) # => [1, [2, 3, 4], {:a=>1, :b=>2}]
      
      





かっこいいと思います。



変数と配列を同じように扱います



時々(たまにのみ )、タイプをチェックせずにオブジェクトに対して何らかのメソッドを実行したい場合があります。 つまり、たとえば通常の変数と同じ方法で配列を処理します。 そのような場合、2つの方法で行うことができます-[*何か]または配列(何か)を使用します。



やってみましょう。 2つの変数を割り当てましょう:数字と数字の配列



 stuff = 1 stuff_arr = [1, 2, 3]
      
      





[*]を使用すると、両方の変数を等しく正常に反復できます。



 [*stuff].each { |s| s } [*stuff_arr].each { |s| s }
      
      





同一:



 Array(stuff).each { |s| s } Array(stuff_arr).each { |s| s }
      
      







|| =





コードの行数を減らすための重要な鍵は、|| =を使用することです



このステートメントは次のように機能することを理解することが重要です。



 a || a = b # 
      
      







そうではありません:



 a = a || b # !
      
      







この演算子は、数学演算を実行するのに最適です。



 def total @total ||= (1..100000000).to_a.inject(:+) end
      
      







これで、他のメソッドで合計を使用できますが、計算されるのは1回だけであり、アプリケーションのパフォーマンスに影響します。



必要なハッシュパラメーター





2回目の摩擦のまったく新しい機能。 受け入れられた引数としてハッシュを使用してメソッドを定義する代わりに:



 def my_method({}) end
      
      





これで、入り口で待っているキーを明確に識別できます。 さらに、それらの値を決定できます!



この例では、aとbは必須キーです。



 def my_method(a:, b:, c: 'default') return a, b, c end
      
      





メソッドに「a」のみを送信しようとすると、エラーが発生します。



 my_method(a: 1) # => ArgumentError: missing keyword: b
      
      





「c」にデフォルト値を指定したため、メソッドにキー「a」と「b」を指定するだけで十分です。



 my_method(a: 1, b: 2) # => [1, 2, "default"]
      
      





または、3つすべてを送信できます。



 my_method(a: 1, b: 2, c: 3) # => [1, 2, 3]
      
      





より簡潔にすることができます。



 hash = { a: 1, b: 2, c: 3 } my_method(hash) # => [1, 2, 3]
      
      





範囲付きのアルファベットまたは数字のチェーンを生成する



トリックは十分に古いが、突然誰かが知らない。



 ('a'..'z').to_a # => ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] (1..10).to_a # => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      
      





タップ



タップは、コードの可読性を向上させることができる素晴らしい方法です。 クラスがあるとしましょう:



 class User attr_accessor :a, :b, :c end
      
      





ここで、属性を持つ新しいユーザーを作成したいとしましょう。 次のようにできます:



 def my_method o = User.new oa = 1 ob = 2 oc = 3 o end
      
      





または、タップを使用できます:



 def my_method User.new.tap do |o| oa = 1 ob = 2 oc = 3 end end
      
      






All Articles