Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

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#floorFloat#ceilFloat#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のこれらの新機能について!


  1. 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,

  2. Windows 8.1 Update 1 の新機能の追加

    マイクロソフトは、4 月 8 日に開始される Windows 8.1 Update 1 のメジャー アップデートの詳細を発表しました。新機能には、改善されたタスクバー、スマート マウスの微調整、およびマウスとキーボードのユーザーに焦点を当てたスタート画面の微調整が含まれます。 パート I. Microsoft Windows 8.1 のメジャー アップデート 1.タスクバーのモダン アプリ これは、最新のタブレット中心の Windows ストア アプリをデスクトップ フォールドに実際にもたらすため、根っからの長年の Windows ユーザーの間でより物議を醸す可能性があります。実際、St