Vavr في Java: دليل شامل مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Vavr في Java: دليل شامل للبرمجة الوظيفية

1. ما هي مكتبة Vavr ولماذا تحتاجها؟

مكتبة Vavr (المعروفة سابقًا باسم Javaslang) هي مكتبة قوية للبرمجة الوظيفية في Java، توفر مجموعات غير قابلة للتغيير، وهياكل بيانات وظيفية، وأدوات للتعامل مع الدوال عالية المستوى. على عكس إطار العمل القياسي Java Collections Framework، تركز Vavr على الثبات (عدم القابلية للتغيير) ووضوح الكود، مما يسمح بكتابة برامج أكثر قابلية للتنبؤ، وآمنة في تعدد الخيوط، وأكثر إيجازًا.

لماذا تحتاج Vavr؟ في Java الحديثة (بدءًا من الإصدار 8)، ظهرت تعبيرات لامدا و Stream API، لكن المجموعات القياسية ظلت قابلة للتغيير. هذا يؤدي إلى آثار جانبية، وصعوبات في البرمجة متعددة الخيوط، والحاجة إلى كتابة الكثير من الكود النمطي. تحل Vavr هذه المشكلات من خلال تقديم:

  • مجموعات غير قابلة للتغيير (List, Set, Map) مع واجهة برمجة غنية تشبه Scala أو Kotlin.
  • أنواع Option, Try, Either, Validation للمعالجة الآمنة للقيم الفارغة والاستثناءات والأخطاء دون استخدام كتل try-catch.
  • الصفوف (Tuple) لتجميع قيم من أنواع مختلفة دون الحاجة لإنشاء كائنات DTO.
  • واجهات وظيفية (FunctionN, CheckedFunction) مع إمكانية التركيب والتخزين المؤقت والتطبيق الجزئي.
  • الحسابات الكسولة (Lazy) و مطابقة الأنماط (Pattern Matching).

تعتبر Vavr مفيدة بشكل خاص في المشاريع التي تتطلب موثوقية عالية (الأنظمة المالية، معالجة البيانات)، وتعدد الخيوط (حيث أن الثبات يبسط التوازي)، أو ببساطة الرغبة في كتابة كود أكثر تصريحية ونظافة. إنها لا تستبدل Java القياسية، بل تكملها، مما يسمح باختيار الأداة المناسبة لكل مهمة.

2. التثبيت

يتم توزيع Vavr عبر Maven Central. لتضمينها في مشروعك، استخدم أحد أنظمة البناء التالية:

Maven

<dependency>
    <groupId>io.vavr</groupId>
    <artifactId>vavr</artifactId>
    <version>0.10.4</version>
</dependency>

Gradle

implementation 'io.vavr:vavr:0.10.4'

Gradle (Kotlin DSL)

implementation("io.vavr:vavr:0.10.4")

لنظام الوحدات في Java 9+، أضف إلى module-info.java:

requires vavr;

الإصدار الحالي وقت كتابة هذا المقال هو 0.10.4 (صدر في 2019، لكنه مستقر ويستخدم على نطاق واسع). يمكنك التحقق من أحدث إصدار على MVNRepository.

3. البداية السريعة — مثال عملي بسيط

قم بإنشاء كلاس VavrDemo.java وقم بتشغيله:

import io.vavr.collection.List;
import io.vavr.control.Option;

public class VavrDemo {
    public static void main(String[] args) {
        // إنشاء قائمة غير قابلة للتغيير
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);

        // تحويل وظيفي
        List<Integer> doubled = numbers
            .filter(n -> n % 2 == 0)   // الأعداد الزوجية
            .map(n -> n * 2);          // مضاعفة

        System.out.println(doubled); // List(4, 8)

        // Option بدلاً من Optional
        Option<String> maybeName = Option.of("Ali");
        String greeting = maybeName
            .map(name -> "مرحباً، " + name)
            .getOrElse("مرحباً، أيها الغريب");

        System.out.println(greeting); // مرحباً، Ali
    }
}

يوضح هذا المثال ميزتين رئيسيتين: المجموعات غير القابلة للتغيير مع سلسلة من الدوال، والتعامل الآمن مع القيم الفارغة باستخدام Option.

4. أهم الدوال والكلاسات

4.1. Option — البديل الآمن لـ Optional

توصيات