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

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,4,5][1..]
# [2, 3, 4, 5]

(1..).step(5).take(100)
# [1, 6, 11, 16, 21, 26, 31, 36, 41, 46]

他にどのような例を思いつくことができますか?

列挙可能::ArithmethicSequence

新しい種類の列挙可能なオブジェクトがRuby2.6に導入されました。

Enumerable ::ArithmethicSequenceについて話している 。

現在、2つの方法があります ArithmethicSequence

  • Range#step
  • Numeric#step

これの何が特別なのですか?

ArithmethicSequence 要素がいくつあるか、最初の要素と最後の要素は何かを知っています。

(1..10).step(2).first
# 1

(1..10).step(2).last
# 9

これらのfirst last メソッドはRuby2.6より前では利用できません。そのため、 ArithmethicSequence 今存在します!

別の違い

(1..10).step(2) == (1..10).step(2)
# false - Ruby 2.5 (and older)

(1..10).step(2) == (1..10).step(2)
# true - Ruby 2.6

2.6では、等差数列を相互に比較できます。

複数の引数を持つハッシュをマージする

複数のハッシュをマージして、それらを1つに結合できるようにする場合…

これを行うことができます

a = { a: 1 }
b = { b: 2 }
c = { c: 3 }

a.merge(b).merge(c)
# {:a=>1, :b=>2, :c=>3}

Ruby2.6は新しい方法を追加します

a.merge(b, c)
# {:a=>1, :b=>2, :c=>3}

同じ結果ですが、メソッドを呼び出す必要があるのは1回だけです!

新しい例外オプション

Integerのような変換方法を使用する場合 値を変換できない場合は例外が発生します。

Integer("a")
# ArgumentError (invalid value for Integer(): "a")

Ruby2.6は新しい例外を追加します キーワード引数:

  • Integer()
  • Float()
  • Rational()
  • Complex()

このキーワードを使用して、これらのメソッドの動作を制御できます。

Integer("a", exception: false)
# nil

Random.bytes

ランダムなバイトが必要な場合、Ruby2.6は新しいbytesを追加します Randomへのメソッド クラス。

ここに例があります

Random.bytes(10)
# "\xCD\r\xE6Wz\xBA)\x02\xC4\xDB"

これは完全に新しい機能ではありません。これは、 securerandomを通じて常に利用可能であるためです。 モジュール。

require 'securerandom'

SecureRandom.bytes(10)

では、なぜこの新しい方法を気にするのですか?

Random.bytes セキュリティと速度のトレードオフで、 SecureRandomの8倍の速度です 。

範囲#%

新しい Rangeにメソッドが追加されました Ruby2.6で。

((0..) % 2).take(5)

# [0, 2, 4, 6, 8]

このメソッドは、 Range#stepと同等です。 。

TracePoint#parameters

TracePoint classは、メソッド呼び出し、クラス定義、スレッドなどのイベントを追跡するのに役立ちます。

Ruby2.6は新しいパラメータを追加します メソッド。

この新しいメソッドを使用すると、呼び出されているメソッドのパラメータリストを印刷できます。

TracePoint.trace(:call, :b_call, :c_call) do |tp|
  p [tp.event, tp.parameters]
end

def orange(a,b,c*)
end

orange(1,2,3)

結果

[:call, [[:req, :a], [:req, :b], [:rest, :c]]]

一時ヒープ

一時ヒープは、メモリの断片化とmallocへの呼び出しの遅延の問題を減らすことを目的とした、短命のオブジェクトのパフォーマンスの向上です。

Mallocは、Rubyインタープリター(およびほとんどのCプログラム)がメモリを要求する方法です。 オペレーティングシステムから。

NEWSエントリによると、6〜7%のスピードアップを見込んでいます。

いくつかのベンチマークを実行しました:

これは、10要素未満のハッシュを多数作成する場合に最も効果的であるように見えます。 。

Ruby2.6の9つの新機能

これらの結果に基づくと、Ruby 2.6(プレビュー3)では、ハッシュが大きいほど遅くなります。

一時ヒープの恩恵を受けることができるその他のオブジェクト :

  • 配列
  • 構造体
  • 通常のオブジェクト(作成したクラスから)

Array#union&Array#difference

2つの新しいメソッド、 union 違い Arrayに追加されます Ruby2.6のクラス。

[1,2,3,4,5].difference([3])
# [1, 2, 4, 5]

[1,2,3,4,5].union([5,6,7])
# [1, 2, 3, 4, 5, 6, 7]

これらの新しいメソッドは複数の引数を取ります。

概要

Ruby 2.6には、より良いコードをより短時間で作成するのに役立つ新しい便利な機能が付属しています。もう1つの新しいパフォーマンス関連機能であるMJIT(メソッドベースのジャストインタイムコンパイラ)については、専用の記事で説明します。

ルビー2.6 2018年12月25日にリリースされる予定です。 。

変更に遅れずについていき、Rubyスキルを向上させ、素晴らしいRuby開発者になりたい場合は、今日私のRubyニュースレターに参加することを忘れないでください。

読んでくれてありがとう!


  1. SQLServer2017の新機能

    より新しいバージョンのSQLServerへのアップグレードを検討していますか? SQLServer2016とSQLServer2017のどちらを選択していますか?もしそうなら、この投稿で説明しているように、SQLServer2017にアップグレードすることをお勧めします。 SQL Serverテクノロジのリリースにより、SQL管理者と開発者が熟考するための興味深い新機能が多数提供されます。 SQL Server vNext(一般にSQL Server 2017と呼ばれます)用のCommunity TechnologyPreview(CTP)2.0も例外ではありません。多くの更新が、アプリケー

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

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