En

Enum في Elixir

98 تمرينًا

نبذة عن Enum

Enum وحدة مفيدة جدًا توفّر مجموعة من الخوارزميات للتعامل مع القوابل للتعداد. فهي توفّر:

والمزيد غير ذلك! راجع توثيق وحدة Enum للاطلاع على القائمة الكاملة.

Enumerable

بشكل عام، القابل للتعداد هو أي بيانات يمكن المرور عليها، أي مجموعة. وفي Elixir، القابل للتعداد هو أي نوع بيانات يطبّق بروتوكول Enumerable. وهذه الأنواع هي:

لا تقلق إن لم تكن تعرفها كلها بعد.

يمكن لأي شخص تطبيق بروتوكول Enumerable على بنية البيانات المخصصة التي يصنعها بنفسه.

الاختزال

تتيح لك Enum.reduce/2 أن تختزل القابل للتعداد بأكمله إلى قيمة واحدة. ولتحقيق ذلك، يُستخدم متغير خاص يُسمى المراكم. يحمل المراكم الحالة الوسيطة للاختزال بين تكرار وآخر. وهذا ما يجعلها واحدة من أقوى الدوال للتعامل مع القوابل للتعداد. فكثير من الدوال المتخصصة الأخرى يمكن استبدالها بالدالة الأعم reduce. على سبيل المثال...

إيجاد القيمة العظمى:

Enum.max([4, 20, 31, 9, 2])
# => 31

Enum.reduce([4, 20, 31, 9, 2], nil, fn x, acc ->
  cond do
    acc == nil -> x
    x > acc -> x
    x <= acc -> acc
  end
end)

# => 31

وحتى التحويل (لكنه يتطلب عكس النتيجة بعد ذلك):

Enum.map([1, 2, 3, 4, 5], fn x -> x + 10 end)
# => [11, 12, 13, 14, 15]

Enum.reduce([1, 2, 3, 4, 5], [], fn x, acc -> [x + 10 | acc] end)
# => [15, 14, 13, 12, 11]

تحويل الخرائط

  • باستخدام Map.new/2:

    %{a: 1, b: 2}
    |> Map.new(fn {key, value} -> {key, value * 10} end)
    
  • باستخدام Enum.into/3:

    %{a: 1, b: 2}
    |> Enum.into(%{}, fn {key, value} -> {key, value * 10} end)
    
  • باستخدام Enum.map/2:

    %{a: 1, b: 2}
    |> Enum.map(fn {key, value} -> {key, value * 10} end)
    |> Enum.into(%{})
    
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم Enum

التدريب مقفل

افتح 10 تمارين إضافية لممارسة Enum