ルビー ルビー列挙可能 モジュールは、表現力豊かな関数型反復処理を支える強力なツールだ。に混在している。 配列、ハッシュ、範囲、集合, とカスタム・コレクションを使用することで、クリーンで効率的なデータ処理が可能になる。. エキスパートによるRubyプロジェクトの強化 Railsコンサルティングサービス, よりクリーンで高性能なコードのために、各マップ、セレクトを最適化する。.
Ruby列挙可能:基礎
使用方法 ルビー列挙可能, を定義しなければならない。 各:
ルビー
クラス ShoppingList
インクルード Enumerable
def initialize(*items)
アイテム = アイテム
終了
def each(&block)
items.each(&block)
end
end
現在 ショッピングリスト サポート すべて Ruby 列挙可能 のメソッドがある。.
ルビーの列挙可能: 各 - 項目ごとに実行
何 各 どうだろう?
すべての要素に対してブロックを実行する。. 元のコレクションを返します。.
ルビー
[1, 2, 3].each { |n| puts n * 2 }.
# 出力:
# 2
# 4
# 6
# 戻り値[1, 2, 3]
RubyのEnumerableを使うとき 各
- ログまたは印刷
- 副作用のトリガー(電子メール、APIコール)
- 外部状態の蓄積
ルビー
合計 = 0
[10, 20, 30].each { |n| total += n }.
puts total # => 60
落とし穴: 決して使用しないこと 各 変換された配列を期待する。.
ルビー
# 間違い
[1, 2, 3].each { |n| n * 2 }.# => [1, 2, 3] です。
ルビーの列挙可能: 地図 (または 集める) - あらゆるアイテムを変身させる
何 地図 どうだろう?
ブロックと 新しい配列を返す 結果の.
ルビー
[1, 2, 3].map { |n| n * 2 }.# => [2, 4, 6].
RubyのEnumerableを使うとき 地図
- データ型の変換
- フィールドの抽出
- 新しい構造物の建設
ルビー列挙可能 地図 例
名前を大文字にする
ルビー ["alice", "bob"].map(&:upcase) # => ["ALICE", "BOB"].
ユーザーEメールの抽出
ルビー
users = [{email: "[email protected]"}, {email: "[email protected]"}].
users.マップ { |u| u[:email] }.# => ["[email protected]", "[email protected]"].
インデックス付き
ルビー
fruits = ["apple", "banana"] フルーツ = ["リンゴ", "バナナ
fruits.map.with_index { |f, i| "#{i + 1}.#{f}"}
# => ["1. リンゴ", "2. バナナ"].
落とし穴:使用しない 地図 副作用のためだけである。.
ルビー
# [nil, nil, nil] を返す。
[1, 2, 3].map { |n| puts n }.
ルビーの列挙可能: 選択する (または find_all) - 一致する項目をフィルタリングする
何 選択する どうだろう?
を返します。 新しい配列 ブロックが返す要素の 真実.
ルビー [1, 2, 3, 4].select(&:even?) # => [2, 4].
RubyのEnumerableを使うとき 選択する
- 有効なレコードのフィルタリング
- データ照会
- コレクションのサブセット
ルビー列挙可能 選択する 例
合格スコア
ルビー
スコア = [89, 45, 92, 61]
score.select { |s| s >= 70 }.# => [89, 92] です。
アクティブユーザー
ルビー
ユーザー = [
{name: "Alice", active: true}、
{name: "Bob", active: false}.
]
users.select { |u| u[:active] }.# => [{name: "Alice", active: true}] です。
反対側: 拒否する
ルビー [1, 2, 3, 4].reject(&:even?) # => [1, 3].
Rubyの列挙可能:主な違い
| 方法 | リターン | 目的 |
|---|---|---|
各 |
オリジナル・コレクション | 副作用 |
地図 |
変換された値の新しい配列 | データの変換 |
選択する |
一致する要素の新しい配列 | フィルターデータ |
Ruby列挙可能:パワーの連鎖
表現力豊かなパイプラインのためのチェーンメソッド:
ルビー
(1..10)
.select(&:even?) # [2, 4, 6, 8, 10].
.map { |n| n ** 2 }. # [4, 16, 36, 64, 100] .each { |q| puts n ** 2 }.
.each { |sq| puts sq }.
実例だ:
ルビー
active_emails = ユーザー
.select { |u| u[:active] && u[:age] >= 18 }.
.マップ { |u| u[:email] }.
Rubyの列挙型:パフォーマンスのヒント
1パス > 2パス
ルビー
# より遅い:2回の繰り返し
users.map(&:age).select { |a| a > 18 }.
# より高速:1回の繰り返し
users.select { |u| u[:age] > 18 }.map(&:age)
記号からプロックへの速記法
ルビー names.map(&:upcase)
大規模/無限データに対する遅延評価
ルビー
(1..Float::INFINITY).lazy
.select(&:even?)
.map { |n| n * n }.
.first(5)
# => [4, 16, 36, 64, 100].
Ruby列挙可能:ボーナス・パターン
安全な構文解析 地図 + コンパクト
ルビー
["1", "2", "abc"].map { |s| Integer(s) rescue nil }.compact
# => [1, 2].
最初のマッチを探す
ルビー
admin = users.find { |u| u[:role] == "admin" }. # select.firstより良い
で蓄積する each_with_オブジェクト
ルビー
[1, 2, 3].each_with_object({}) { |n, h| h[n] = n * 2 }.
# => {1=>2, 2=>4, 3=>6}.
Rubyの列挙可能:最終チェックリスト
- 用途
各→ 副作用 - 用途
地図→ 変換 - 用途
選択する→ フィルター - 明瞭さのためのチェーン
- 戻り値を無視しない
- 好む
探すオーバーselect.first - 用途
へたれ巨大/無限ストリーム用
結論:
RubyのEnumerableモジュールは単なるメソッド集ではありません。Rubyの 各、地図、 そして 選択する, そして、次のような能力が身につく:
- 明確な意思表示 - もう混乱するループはない。.
- バグを避ける - 戻り値は重要であり、これらのメソッドはそれを強制する。.
- パフォーマンスの高いコードを書く - ワンパス演算と遅延評価。.
- チェーン流暢 - 強力なデータパイプラインを1行で構築。.
で レールカーマをリードしている。 Ruby on Rails開発会社, 私たちは、スケーラブルで保守性が高く、エレガントなアプリケーションを構築するために、日々これらの原則を適用しています。ユーザーのフィルタリング、データセットの変換、通知の送信など、当社の開発者はRubyのEnumerable(列挙可能)なパワーを活用して、表現力と効率性を兼ね備えたコードを書いています。.
これらの方法を毎日実践し、賢く連鎖させれば、やがてあなたはRubyを書くべくして書かれたように、エレガントで、表現力豊かで、楽に書けるようになる。.
ターミナルを開き、irbを起動し、以下を試してみる。 マップを選択する、 そして 各 どんなアレイでも。パワーは、そしてRailsCarmaのやり方は、あなたの手の中にあります。.