كائنات Enumerator
التكرار الخارجي
كائنات Enumerator درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
التكرار الخارجي
إنّ Enumerator كائن يمثّل عملية تكرار. وهو يدعم التكرار الخارجي، إذ تسحبون القيم واحدةً تلو الأخرى باستخدام next بدلًا من تمرير كتلة إلى each.
enum = [10, 20, 30].each
puts enum.next
puts enum.nextالحصول على Enumerator
استدعوا أسلوب تكرار مثل each دون كتلة، فتتلقون Enumerator بدلًا من بدء التنفيذ.
enum = [1, 2, 3].each
puts enum.classالسحب باستخدام next
يعيد next العنصر التالي في كل مرة تستدعونه فيها. ويتذكر Enumerator موضعه.
letters = ["a", "b", "c"].each
puts letters.next
puts letters.next
puts letters.nextStopIteration عند النهاية
عند نفاد القيم، يرفع next الاستثناء StopIteration. ويمكنكم التقاطه لإيقاف التنفيذ بطريقة سليمة.
enum = [1, 2].each
begin
loop { puts enum.next }
rescue StopIteration
puts "done"
endpeek وrewind
يعرض peek القيمة التالية دون التقدّم، بينما يعيد rewind الموضع إلى البداية.
enum = [5, 6, 7].each
puts enum.peek
puts enum.next
enum.rewind
puts enum.nextإنشاء عدّادات مخصّصة
أنشئوا عدّادًا خاصًا بكم باستخدام Enumerator.new. وتتلقى الكتلة كائنًا مُولّدًا اسمه y؛ مرّروا القيم باستخدام y << أو y.yield.
evens = Enumerator.new do |y|
n = 0
loop do
y << n
n += 2
end
end
puts evens.next
puts evens.next
puts evens.nextالعدّادات اللانهائية
بما أنّها تعتمد على السحب، يمكن أن تكون Enumerator المخصّصة لا نهائية. وتسحبون منها ما تحتاجون إليه فقط.
counter = Enumerator.new do |y|
i = 1
loop { y << i; i += 1 }
end
p counter.first(5)Enumerator يطبّق Enumerable
يضم Enumerator الوحدة Enumerable، ولذلك تعمل معه جميع الأساليب المعتادة (map وselect وtake) أيضًا، ما يتيح المزج بين التكرار الداخلي والخارجي.
fib = Enumerator.new do |y|
a, b = 0, 1
loop do
y << a
a, b = b, a + b
end
end
p fib.take(8)with_index
يضيف with_index فهرسًا إلى أي Enumerator، مع إمكانية تحديد رقم بداية مخصّص.
["x", "y", "z"].each.with_index(1) do |item, i|
puts "#{i}: #{item}"
endإرجاع Enumerator من each
في الفئات الخاصة بكم، أعيدوا to_enum(:each) (أو enum_for) عند عدم تمرير كتلة، حتى يتمكن المستدعون من التكرار خارجيًا.
class Trio
def each
return to_enum(:each) unless block_given?
yield 1; yield 2; yield 3
end
end
e = Trio.new.each
puts e.next
puts e.nextجمع الأجزاء معًا
تمنحك كائنات Enumerator تحكمًا دقيقًا:
- استخرج القيم باستخدام
next، أو عاين القيمة التالية، أو أعد المؤشر إلى البداية. - أنشئ كائنات مخصصة باستخدام
Enumerator.newوyielder. - تتبع هذه الكائنات Enumerable، لذلك تعمل معها أساليب map/select/take.
odds = Enumerator.new do |y|
n = 1
loop { y << n; n += 2 }
end
p odds.first(4)اختبار سريع
اختبر مدى فهمك لكائنات Enumerator.
مراجعة
لقد تعلمت كائنات Enumerator:
- التكرار الخارجي باستخدام
nextوpeekوrewind. - يشير
StopIterationإلى الوصول إلى النهاية. - أنشئ كائنات مخصصة باستخدام
Enumerator.new { |y| ... }. - تتبع هذه الكائنات Enumerable ويمكن أن تكون لا نهائية.
nums = Enumerator.new { |y| 1.upto(3) { |n| y << n } }
puts nums.next
puts nums.nextالأسئلة الشائعة
هل درس «كائنات Enumerator» مجاني؟
نعم — نص درس «كائنات Enumerator» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «كائنات Enumerator»؟
التكرار الخارجي تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «كائنات Enumerator»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كتابة each مخصصة
- تضمين Enumerable
- Enumerators كسولة
- كائنات Enumerator