Ruby 1.9の感情的なレビュー

rubyプログラミング言語インタープリターバージョン1.9のリリースから約2か月が経過しました。 ここの2番目の奇数は、他の多くのオープンソースプロジェクトと同様に、不安定で実験的なバージョンであり、 「ワイルドで奇妙なアイデア」を試す方法を意味します。 以下は、以前のバージョンに精通している人の観点からのこれらの実験的変更の簡単な概要です。 レビューの選択はそれらの重要性によって制限されません(非常に重要なことは、たとえばUnicodeの改善されたサポートが欠落していることです)。

構文とセマンティクスの変更


注:以下の単語ブロックはProcとlambdaの両方を意味します。この簡単な概要では微妙な違いは役割を果たさないため、「 => 」を使用することは言語の一部ではなく、最後のコンストラクトが返す結果を意味します

ブロックを書く新しい方法


fun = ->(a, b){ a + b }

の代わりに

fun = lambda{|a,b| a + b }

この機能は「非常に実験的」とマークされており、最も物議を醸すアイデアの1つであり、実際、大量に使用するとコードを読みにくくする可能性があります。

ブロックを呼び出す新しい方法


fun.(2,5)

2つの古い方法に加えて:
fun.call(2,5) # 1
fun[2,5] # 2

この方法は1より短く、2より明白です。私の意見では、安定したバージョンに含める価値があります。

ブロックパラメーター


ブロックのパラメーターはローカルになりました(私にとっては、おそらくルーブルで最も頻繁なレーキ)。 これで、これ(1.8のコード)は二度と起こりません:
i = 42
10.times{|i| puts i }
i
=> 10

iの値は42のままです。この変更は1.8との非互換性を意味しますが、安定バージョンで採用される可能性があります。

新しい方法


with_index


Enumeratorには非常に便利なwith_indexメソッドがあり、同じアクションを実行する別のEnumeratorに変換できますが、追加の引数-インデックスも渡します。 たとえば、次のコードは配列から3番目ごとに要素を選択します。
[1,3,4,6,5,6].select.with_index{|v,i| (i+1)%3 == 0 }
=> [4, 6]

この考え方はルビーの一般的なイデオロギーとよく一致し、 each_with_indexような特別なメソッドの必要性を排除します。 これにより、追加のループ変数が不要になり、コードがより簡単で安全になります。

時間と整数のトリビア


時間は、ルビースタイルに非常によく適合する7つの新しいメソッドを追加しました。 どのものを推測してみてください-知っている人にとっては、ルビーは難しくないはずです。
Time.now.sunday?
=> false
Time.now.thursday?
=> true

同様に、 odd?メソッドがIntegerに追加されましたodd? そしてeven?
1.odd?
=> true
3.even?
=> false

nil?メソッドを含む言語の論理的な拡張nil? zero?

シンボル#to_proc


シンボルはデフォルトで機能するようになり、ブロックに変換されます。 今、あなたは書くことができます:
["one", "two", "three"].map(&:capitalize)
=> ["One", "Two", "Three"]

ただし、これは古いバージョンで実行できますが、追加のライブラリコードが必要です。

これは、Rubyの実験版のレビューであり、バージョン2.0の大部分を決定するレビューであることを繰り返します。 より速く、小さく、安全で、他のアプリケーションに簡単に組み込むことが計画されています。

変更がさらに行われました。ここで詳細な説明を見つけることができます。

Source: https://habr.com/ru/post/J20979/


All Articles