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

Ruby 2.7の新機能、メソッド、および改善

Rubyの改善は止まることはありません!

バージョン2.7には、新しい機能、方法、パフォーマンスの改善が含まれています。 2019年12月25日にリリースされました。

さて、マッツによれば…

これは最後の2.xバージョンのリリースです。来年はRuby3.0を入手するからです!

しかし、そこに着く前に…

バージョンアップデートの準備ができるように、2.7の変更点と新機能のいくつかを見てみましょう。

コンテンツ

  • 1 Enumerable#tally
  • ブロックの2つの番号付きパラメーター[実験的]
  • 3 Array#intersection
  • 4 Enumerable#filter_map
  • 5 Enumerator#produce
  • 6 IRBはフェイスリフトを取得しますか?
  • 7Rubyパターンマッチング[実験的]
  • 8その他の変更
  • 9まとめ
    • 9.1関連

列挙可能#tally

これは、配列内のすべての要素をカウントし、そのカウントとともにハッシュを返す新しいRubyメソッドです。

これは自分で行うことができますが、これは tally メソッドはあなたの仕事を節約します。

ここに例があります

%w(a a a b b c).tally

結果

{"a"=>3, "b"=>2, "c"=>1}

私はそれが好きです!

ブロックの番号付きパラメータ[実験的]

私がしばらく望んでいた興味深い新機能は、ブロックパラメータのデフォルト名です。

これが通常のブロックで、1つのパラメータがあります

[1,2,3].each { |n| puts n }

この|n | はパラメータであり、それを使用するために定義する必要があります。

しかし、デフォルトの名前があった場合はどうなりますか?

実験的な機能としてではありますが、これはRuby2.7がもたらす優れた機能の1つです。 、タイピングを大幅に節約できます。

次のようになります

[1,2,3].each { puts _1 }

ここで_1 最初のパラメータを参照します。_2を使用できます 2つ目がある場合は、はい、 _3 3番目のパラメータなど

かなりかっこいい!

さて、ちょっとした雑学。

この機能は、最初に @ 1のように提案されました。 、しかしそれはインスタンス変数に非常に似ているので、いくつかの議論の後、 _1を使用することに決めました 代わりに。

Array#intersection

これは新しい方法ですが、新しい機能ではありません。

実は…

これはエイリアスのようなものです!

Ruby2.6は配列unionを導入しました &違い メソッド、 Array#|のより簡潔な同等物と一致させる 、および Array#-

しかし、欠落している操作は intersectionでした 、もう1つ覚えにくい短いバージョンがあります。

Array#&メソッド

これらの方法は何をし、どのように機能しますか?

[1, 2, 3].intersection([2, 3, 4])
# [2, 3]

[1, 2, 3] & [2, 3, 4]
# [2, 3]

ええと…

名前の種類はそれを与えます、交差点 2つの配列間の交差を見つけます。つまり、どの要素が共通しているかを検出します。

ショートバージョン ロングバージョン 交差点 ユニオン 違い
|

これらの3つの方法のどれが何をするのかをいつも忘れています!

しかし、これらの新しい方法を使用すると、覚えやすくなります。 彼らの名前は何かを意味するので

ところで、これは優れたコードを書く上での良い教訓です。

Enumerable#filter_map

このfilter_map メソッドは、 selectを組み合わせる試みです。 & map メソッドを1つに。

なぜですか?

最初にリストをフィルタリングしてから、残りの要素をマッピングするのが一般的な操作であるためです。

これは2つの方法で行うことができます

(1..8).select(&:even?).map { |n| n ** 2 }

# OR

(1..8).map { |n| n ** 2 if n.even? }.compact

私は両方を使用しましたが、意図がより明確であるため、最初に傾く傾向があります。

Ruby 2.7では、この filter_map メソッドはこれを1回のパスで実行します。

このように

(1..8).filter_map { |n| n ** 2 if n.even? }
# [4, 16, 36, 64]

私はブロック内にifステートメントを含めることの最大のファンではありませんが、仕事を遂行するためにそれらが必要になる場合があります。

そのほかに、知っておくべきことがあります。

filter_map 操作はマップ+コンパクトのようには動作しません 、 falseを削除するため オブジェクト、および compact しません。

覚えておくとよいことです!

列挙子#プロデュース

これがあなたが面白いと思うかもしれないもう一つの新しい方法ですが、それはある程度の創造性を必要とするかもしれません それを最大限に活用するために。

Enumerator#produceです メソッド。

それは何をしますか?

機能の提案によると

「このメソッドは、ブロックを前の要素に適用することによって次の各要素が計算される無限のシーケンスを生成します。」

うん。

終わりのないシーケンスを作成する別の方法!

ここに例があります

Enumerator.produce(1, &:next).take(5)
# [1, 2, 3, 4, 5]

この例では、 take(10)を実行するかどうかは関係ありません。 またはtake(10_000) 、そこから無限の数の値を取得します。

ところで、 1 は初期値です。

そして&:next produceするためにその値で呼び出されるメソッドです シーケンスの次の要素。

IRBはフェイスリフトを取得しますか?

最近、IRBはいくつかの愛と注目を集めており、Ruby2.7はそれに追加し続けています。

取得中

  • 複数行の編集
  • 構文の強調表示
  • 組み込みのRDoc統合
  • デフォルトで有効になっているコマンド履歴
  • オートコンプリートはデフォルトで有効になっています

実際

これは非常に大きな変更であるため、Ruby2.7でirbを起動すると警告が表示されます。

古いバージョンのirbを引き続き使用したい場合は、 irb --legacyを使用して引き続き使用できます。 指図。この新しいIRBの主な問題はライン編集です。従来のIRB(またはPry)では、Altキーを押しながら左矢印を押すと速く移動できますが、これは新しいIRBでは機能しません。

試してみて、どのように機能するかを確認してください。

ルビーパターンマッチング[実験的]

2.7で提供される、よくリクエストされる機能はパターンマッチングです。

実験的なものとしてマークされています。

しかし、パターンマッチングとは何ですか?それはどのようにあなたに利益をもたらしますか?

これを正しく理解していれば、パターンマッチングは正規表現に似ていますが、データ構造(配列/ハッシュ)用です。

ここに例があります

[1,2,3] in [a,b,c] # true
[1,2,3] in [a]     # false

一致する場合、これらの変数名( a など) )アクセスできるローカル変数になります。

ハッシュを使用した例

{ a: 1, b: 2, c: [] } in { a: a, b: b, c: [] }
# true

p a
# 1

これはinを使用します キーワード。

これは新しいことではありませんが、Ruby2.7より前のin であるため、一般的ではありません。 forの一部としてのみ使用されました ループ(Rubyでは強く推奨されていません)なので、このキーワードを何か便利なものに再利用できます。

さらに良い

使用する変数は関係ありません、 a、b、c ここでは機能しますが、 f、g、h も機能します。

パターンがすべてです!

その他の変更

言及する価値のあるいくつかの追加の変更。

  • 新しいコンパクションGCはメモリの断片化を改善します
  • メソッド引数**nil メソッドがキーワードを受け取らないことを宣言するようになりました
  • メソッド引数... 引数転送メカニズムを追加します( make_salad(...)のように括弧が必要です )
  • ファイバーの改善。 (新しいファイバーが割り当てられる)ファイバーオブジェクトの新しいプールにより、ファイバーがより効率的になります
  • スレッドの改善。スレッドを作成するためのより優れた、より最適化された方法により、マルチスレッドがより高速になります

これらについてどう思いますか?

2.7のNEWSファイルには、ファイバーとスレッドの両方の作成で10倍のパフォーマンスの向上が記載されています。これは自分でテストしていませんが、結果について教えてください。

概要

これで、Rubyプログラミング言語の最新の変更について最新情報を入手できます。 IRBの変更、新しい方法、パターンマッチングなどのいくつかの実験的機能について学びました。

ニュースを広めるためにこの記事を共有してください!

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


  1. Microsoft Windows 11 の新機能と改善点:知っておくべきすべてのこと

    Microsoft は、最新の Windows 11 を、対象となる Windows 10 デバイスの無料アップグレードとして正式に展開しました。これには、セキュリティ、生産性、およびデザインに関する多数の新機能と改善が含まれています。同社はまた、Windows 11 ISO イメージを公開しました クリーン インストール用にダウンロードするか、PC のトラブルシューティングを行います。以前の Windows 10 の更新プログラムとは異なり、新しいオペレーティング システムは主に生産性の向上に重点を置いており、PC の合理化を目指しています。 Windows 11 へのアップグレード後 バー

  2. Windows 11 がロールアウトされました。新機能 (機能と改善点) は次のとおりです

    多くのテストとプレビュー ビルドを経て、本日 2021 年 10 月 5 日に、Microsoft は、対象となる Windows 10 PC および世界中の Windows 11 がプレインストールされた新しい PC での無料アップグレードを通じて Windows 11 が利用可能になったことを発表しました。最新の Windows 11 バージョン 21H2 新しいモダンなユーザー インターフェイス (UI)、スナップ アシスト マルチタスク機能を備えた再設計されたスタート メニュー、Microsoft Teams の統合、Android アプリをネイティブで実行する機能、オーバーホールされ