محتويات الجدول
- فهم قواميس Ruby
- الوصول إلى قيم القاموس:
[]
مقابلfetch()
- معالجة المفاتيح المفقودة بلطف
- تقنيات
fetch()
المتقدمة - الخلاصة
فهم قواميس Ruby
في Ruby، القاموس (Hash) هو بنية بيانات قوية تخزن البيانات في أزواج مفتاح-قيمة. فكر فيه كقاموس: كل مفتاح يحدد قيمة بشكل فريد. يتم تعريف القواميس باستخدام الأقواس المتعرجة {}
، مع فصل المفاتيح والقيم بفاصلة نقطتين =>
. يمكن أن تكون المفاتيح سلاسل نصية، أو رموزًا، أو أي كائن آخر يستجيب إلى hash
و eql?
.
my_hash = { "name" => "Alice", :age => 30, "city" => "New York" }
في هذا المثال، "name"
، :age
، و "city"
هي المفاتيح، و "Alice"
، 30
، و "New York"
هي القيم المقابلة لها.
الوصول إلى قيم القاموس: []
مقابل fetch()
هناك عدة طرق للوصول إلى القيم في قاموس Ruby. الطريقة الأكثر شيوعًا هي استخدام الأقواس المربعة []
:
name = my_hash["name"] # name ستكون "Alice"
age = my_hash[:age] # age ستكون 30
ومع ذلك، فإن هذا النهج له عيب: إذا لم يكن المفتاح موجودًا، فإنه يُرجع nil
، والذي قد يؤدي أحيانًا إلى سلوك غير متوقع. توفر طريقة fetch()
بديلاً أكثر قوة.
تأخذ fetch()
المفتاح كوسيطة، وتُرجع القيمة المقابلة. إذا كان المفتاح مفقودًا، فإنها تثير استثناء KeyError
، مما يوضح بوضوح وجود خطأ ما.
name = my_hash.fetch("name") # name ستكون "Alice"
# my_hash.fetch("country") # هذا سيُثير استثناء KeyError
معالجة المفاتيح المفقودة بلطف
تكمن القوة الحقيقية لـ fetch()
في قدرتها على معالجة المفاتيح المفقودة دون تعطل البرنامج. يمكنك تقديم قيمة افتراضية كوسيطة ثانية:
country = my_hash.fetch("country", "Unknown") # country ستكون "Unknown"
بدلاً من ذلك، يمكنك استخدام كتلة لتعريف القيمة الافتراضية. هذا مفيد في السيناريوهات الأكثر تعقيدًا:
country_code = my_hash.fetch("country_code") { |key| "Default for #{key}" }
تستقبل الكتلة المفتاح المفقود كوسيطة، مما يسمح بإنشاء قيمة افتراضية ديناميكية.
تقنيات fetch()
المتقدمة
توفر fetch()
المزيد من المرونة. على سبيل المثال، يمكنك تقديم كتلة تعالج الاستثناء وتنفذ منطقًا مخصصًا:
begin
value = my_hash.fetch("zip_code")
rescue KeyError => e
puts "Key not found: #{e.message}"
# قم بأداء بعض الإجراءات المخصصة، مثل تسجيل الخطأ أو استخدام قيمة بديلة.
end
هذا يسمح بمعالجة دقيقة للخطأ ويمنع إنهاء البرنامج المفاجئ بسبب المفاتيح المفقودة.
الخلاصة
تُعد طريقة fetch()
خيارًا أفضل للوصول إلى قيم القاموس مقارنة بطريقة []
القياسية لأنها توفر معالجة صريحة للخطأ وتسمح بالإدارة اللطيفة للمفاتيح المفقودة. إن إتقان fetch()
يحسن بشكل كبير من قوة ومتانة ووضوح شفرة Ruby الخاصة بك.