Ruby2.4の9つの新機能
クリスマスに新しいRubyバージョンをリリースするのが伝統になっています。
そして、この投稿では、Ruby 2.4での最も興味深い変更のいくつかを取り上げて、ニュースについていくことができるようにしたいと思います🙂
Float#roundwithキーワード
アプリでfloatを使用している場合は、floor
を使用してください。 またはceil
Float#roundメソッドがRuby 2.4でのデフォルトの動作を変更しているため、丸めの場合。
例 :
# Ruby 2.3 (2.5).round 3 # Ruby 2.4 (2.5).round 2
デフォルトの動作は「最も近い偶数に丸める」になりました。
更新 :
Float#round
のデフォルトの動作Ruby 2.4
の最終バージョンで「切り上げ」に戻りました 。これは、この投稿が最初に公開された後にMatzが下した決定です。
さらに、Float#round
必要な丸めのタイプを定義するために使用できる引数を取ります。
オプションは次のとおりです。
- :偶数
- :up
- :down
例 :
(4.5).round(half: :up) 5
また、Float#floor
、Float#ceil
&Float#truncate
ここで、精度を設定できるオプションの引数を取ります。
IOメソッドのChompフラグ
getやeach_lineのような方法を使用したことがある場合は、これらの厄介な改行文字を処理する必要があることを覚えていると思います。
次のようになります:\n
。
これは初心者が常に問題を抱えていることですが、この新機能が役立つかもしれません!
次に例を示します:
input = gets.chomp # "abc\n"
これで、Ruby 2.4では、chomp
を設定できるようになります。 キーワード引数&gets
改行文字が削除されます。
例 :
input = gets(chomp: true) # "abc"
これは、false
以外の値で機能します またはnil
(Rubyで唯一の「偽の」値)
したがって、これも機能します(ただし、混乱を招く可能性があるため、お勧めしません):
input = gets(chomp: 1234) # "abc"
それほど大したことではありませんが、メソッド呼び出しを節約できます🙂
Pathname#empty?
Ruby2.4はDir#empty?
を実装しています &File#empty?
、これらのメソッドを使用すると、ディレクトリまたはファイルが空かどうかを確認できます(これは非常に明白でしたね)。
しかし、Pathname#empty?
最近追加されました。
Pathname
に慣れていない場合 、これは、両方のDir
の機能をマージするクラスです。 クラスとFile
クラス。
さらに、Pathname
を返すという意味で、より「OO」(オブジェクト指向)でもあります。 文字列ではなくオブジェクト。
例 :
Pathname.empty?("file or directory name")
コミット:https://github.com/ruby/ruby/commit/9373c5efb993dd8cae0526118805449b19af2c22
compare_by_identityを設定
セットは、標準ライブラリの一部として利用できるデータ構造です。ユニークなアイテムのコレクションを維持するのに役立ちます。
デフォルトでは、オブジェクトはその値に基づいて(または、より正確には、ハッシュ値に基づいて)比較されます。
ただし、Ruby 2.4では、オブジェクトIDに基づいて一連の一意のオブジェクトを作成できます。
例 :
require 'set' # Normal set set = Set.new set << 123 << 123 << "abc" << "abc" # [123, "abc"] # Identity set set = Set.new().compare_by_identity set << 123 << 123 << "abc" << "abc" # [123, "abc", "abc"]
この機能の興味深い使用法を知っている人がいたら、コメントを残してください🙂
コミット:https://github.com/ruby/ruby/commit/76977611dd68e384fdce8c546efda5e1931e67a6
Kernel#send、BasicObject# sendによる改良 、Symbol#to_proc
ここでは詳細については説明しませんが、基本的な考え方は、String
のようなクラスにメソッドを追加できるようにすることです。 、この変更を1つのファイルまたはクラスに「ローカライズ」したままにします。
Ruby 2.4以降、Kernel#send
などのメソッドを介して呼び出されると、改良によって定義されたメソッドを使用できるようになります。 &Symbol#to_proc
。
例 :
module TenTimes refine String do def ten_times puts self * 10 end end end class Thing using TenTimes "abc".send(:ten_times) end
2.3以下でこれを試してみると、「未定義のメソッド」エラーが発生します。
コミット:https://github.com/ruby/ruby/commit/35a29390197750abf97ef16fa0740e377764daef
Hash#transform_values
Railsから抽出されてRubyに直接アクセスする別のメソッドを次に示します。私はHash#transform_values
について話している 、Array#map
と同じように機能します 。
例 :
h = {a: 1, b: 2, c: 3} h.transform_values { |v| v * 10 } # {a: 10, b: 20, c: 30}
Hash#transform_values!
もあります インプレースミューテーションが必要な場合。
Kernel#cloneはオプションのキーワード引数を取るようになりました
ご存知かもしれませんが、Rubyオブジェクトのコピーを作成することは可能です。ほとんどのRubyオブジェクトは変更可能であり、元のオブジェクトに変更を加えないようにすることができるため、これは便利です。
オブジェクトのコピーを作成するには、次の2つの方法があります。
- クローン
- 重複
cloneとdupの間にはいくつかの小さな違いがありますが、この投稿では、clone
とだけ言いましょう。 dup
の間、元のオブジェクトの「凍結」ステータスを保持します しません。
2.4の新機能は、clone
を呼び出す機能です。 「フリーズ」フラグ付き。
例 :
foo = "test".freeze boo = foo.clone(freeze: false) boo.frozen? # false
これがどの程度役立つかはわかりませんが、これ以上のオプションは必要ありません🙂
コミット:https://github.com/ruby/ruby/commit/320ae01c5fb091eab0926c186f304a9caeda1ace
Thread.report_on_exception
2.4に付属するもう1つの機能は、Thread.report_on_exceptionです。これは、スレッド例外がデフォルトでサイレントであり、コードの問題を隠すことができるために提案されました。
デフォルト値はfalse
、ただし、アプリでスレッドを使用している場合は、Ruby2.4にアップグレードするときにこれを有効にしてみてください。
例 :
Thread.report_on_exception = true t1 = Thread.new do puts "In new thread" raise "Exception from thread" end sleep(1) puts "In the main thread"
これにより例外が表示されますが、プログラムはクラッシュしません。別の方法はThread.abort_on_exceptionで、これは常に利用可能です。
このメソッドのインスタンスバージョンもあるため、すべてのスレッドではなくスレッドごとにこのオプションを設定できることに注意してください。
Binding#irb
あなたはbinding.pry
を使うのが好きですか デバッグ用?さて、binding.irb
もあります これは同じように機能します。
しかし、それはirbであるため、構文の強調表示など、pryが提供するすべての優れた機能をまだ利用できません。
なんらかの理由でこじ開けにアクセスできない場合は、何もないよりはましです🙂
コミット:https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a
結論
この新しいバージョンのRubyには多くの興味深い機能が含まれているため、利用可能になったら必ずチェックしてください。
より多くの人が学ぶことができるように、この投稿を共有することを忘れないでください Ruby 2.4のこれらの新機能について!
-
Ruby2.6の9つの新機能
Rubyの新しいバージョンには、新しい機能とパフォーマンスの改善が含まれています。 変更についていきますか? 見てみましょう! 無限の範囲 Ruby 2.5以前のバージョンは、すでに1つの形式の無限範囲をサポートしています( Float ::INFINITY を使用) )、しかしRuby2.6はこれを次のレベルに引き上げます。 新しい無限の範囲 次のようになります: (1..) これは、(1..10)のような終了値がないため、通常の範囲とは異なります。 。 使用例 : [a, b, c].zip(1..) # [[a, 1], [b, 2], [c, 3]] [1,2,3,
-
Windows 8.1 Update 1 の新機能の追加
マイクロソフトは、4 月 8 日に開始される Windows 8.1 Update 1 のメジャー アップデートの詳細を発表しました。新機能には、改善されたタスクバー、スマート マウスの微調整、およびマウスとキーボードのユーザーに焦点を当てたスタート画面の微調整が含まれます。 パート I. Microsoft Windows 8.1 のメジャー アップデート 1.タスクバーのモダン アプリ これは、最新のタブレット中心の Windows ストア アプリをデスクトップ フォールドに実際にもたらすため、根っからの長年の Windows ユーザーの間でより物議を醸す可能性があります。実際、St