0Pricing
Ruby Academy · レッスン

デフォルト値とマージ

fetch、merge、dig です。

「デフォルト値とマージ」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。

nilの問題

存在しないキーを読み取るとnilが返るため、計算や論理処理で予期しない結果になることがあります。Rubyには、値がない場合を安全に扱う方法が用意されています。

h = { a: 1 }
puts h[:b].inspect

fetchで安全にアクセスする

fetchは値を返し、キーがない場合は明確なエラーを発生させます。キーが必須の場合に使います。

h = { name: "Ada" }
puts h.fetch(:name)

デフォルト値付きのfetch

fetchの2番目の引数に、キーがない場合だけ使う代替値を指定できます。

h = { name: "Ada" }
puts h.fetch(:age, 0)
puts h.fetch(:name, "Unknown")

ブロック付きのfetch

ブロックを渡すと、代替値を遅延評価で計算できます。ブロックが実行されるのはキーが見つからない場合だけです。

h = {}
puts h.fetch(:x) { "computed default" }

デフォルト値付きのハッシュ

Hash.new(default)は、存在しないキーに対してnilではなくデフォルト値を返します。デフォルト値は共有されるため、単純な不変値に使うのが適しています。

counts = Hash.new(0)
counts[:a] += 1
counts[:a] += 1
puts counts[:a]
puts counts[:b]

ブロックによるデフォルト値

Hash.new { |hash, key| ... }はキーごとに新しいデフォルト値を計算するため、配列へのグループ化に適しています。

groups = Hash.new { |h, k| h[k] = [] }
groups[:fruit] << "apple"
groups[:fruit] << "pear"
puts groups[:fruit].inspect

デフォルト値でカウントする

デフォルト値を0にすると、単語のカウントを簡単かつすっきり書けます。

words = ["a", "b", "a", "a"]
count = Hash.new(0)
words.each { |w| count[w] += 1 }
puts count

ハッシュをマージする

mergeは2つのハッシュを結合して、新しいハッシュを作ります。キーが重複する場合は、2つ目のハッシュの値が優先されます。

defaults = { color: "red", size: "M" }
user = { color: "blue" }
puts defaults.merge(user)

ブロック付きでマージする

mergeにブロックを渡すと、値を加算するなどして重複するキーを処理できます。

a = { x: 1, y: 2 }
b = { y: 3, z: 4 }
puts a.merge(b) { |key, old, new| old + new }

digで安全にネストへアクセスする

digはネストしたハッシュを安全にたどります。途中の階層が存在しない場合もエラーにせず、nilを返します。

data = { user: { address: { city: "London" } } }
puts data.dig(:user, :address, :city)
puts data.dig(:user, :phone, :home).inspect

ツールを組み合わせる

デフォルト値とmergeを組み合わせると、基本設定に上書き設定を加えて設定値を構築できます。

base = { retries: 3, timeout: 30 }
options = base.merge(timeout: 60)
puts options.fetch(:timeout)

理解度チェック

デフォルト値とマージについて確認します。

まとめ

これで、存在しないデータを適切に扱えるようになりました。

  • デフォルト値、ブロック、厳格なエラー処理に対応したfetch
  • カウントやグループ化に使うHash.new(0)とブロックによるデフォルト値
  • 競合処理用のブロックを指定したmerge
  • 安全なネストアクセスのためのdig

次のコースでは、範囲とEnumerableを扱います。

c = Hash.new(0)
c[:hits] += 1
puts c[:hits]

よくある質問

「デフォルト値とマージ」レッスンは無料ですか?

はい。「デフォルト値とマージ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。

「デフォルト値とマージ」で何を学びますか?

fetch、merge、dig です。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ruby Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「デフォルト値とマージ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このRuby Academyレッスンでコードを書いて実行できますか?

はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. シンボルと文字列
  2. ハッシュの作成と読み取り
  3. ハッシュの反復処理
  4. デフォルト値とマージ
← Ruby Academyに戻る