Java الوظيفية هي مكتبة مفتوحة المصدر تسهل البرمجة الوظيفية في Java. تنفذ المكتبة العديد من تجريدات البرمجة الأساسية والمتقدمة التي تساعد في التطوير الموجه نحو التكوين. تعمل Java الوظيفية أيضًا كمنصة لتعلم مفاهيم البرمجة الوظيفية من خلال تقديم هذه المفاهيم باستخدام لغة مألوفة.
تم تصميم المكتبة للاستخدام في تطبيقات الإنتاج وتم اختبارها بدقة باستخدام تقنية الاختبار الآلي القائم على المواصفات باستخدام وحدة ScalaCheck ووحدة الفحص السريع الخاصة بـ Java الوظيفية.
توفر Java الوظيفية تجريدات للأنواع التالية:
هياكل البيانات الأساسية - الوظائف الكلية والجزئية، والمنتجات، والوحدة، والخيار، والاتحادات غير المتحيزة والمنحازة لليمين (إما والتحقق من الصحة)، باطلة.
المجموعات غير القابلة للتغيير - المصفوفة، القائمة، المتجه، الدفق، المجموعة، الخريطة، قائمة انتظار الأولوية، شجرة الأصابع، القائمة غير المتجانسة، قائمة الفرق.
تجريدات أخرى - المونويد، شبه المجموعة، الطبيعي، مولد الأرقام العشوائية، القارئ، الكاتب، الحالة، الإدخال / الإخراج، المحلل اللغوي، السحاب، الاختبار القائم على المواصفات (الفحص السريع)، الممثلين، البصريات (العدسة، المنشور، الطية، الاجتياز وغيرها)، التزامن واكتب التحويل.
عناوين URL المهمة للمشروع هي:
الموقع الإلكتروني: http://www.functionaljava.org
مستودع موقع الويب، http://github.com/functionaljava/functionaljava.github.io
ترافيس بناء التكامل المستمر، https://app.travis-ci.com/github/functionaljava/functionaljava
مستودع سوناتايب، https://oss.sonatype.org/content/groups/public/org/functionaljava/
مستودع مافن المركزي، https://mvnrepository.com/artifact/org.functionaljava/functionaljava
الطريقة الموصى بها لتنزيل المشروع واستخدامه هي من خلال أداة الإنشاء الخاصة بك.
تم نشر عناصر Java الوظيفية إلى Maven Central باستخدام المجموعة org.functionaljava
مع ثلاث عناصر منشورة:
المكتبة الأساسية ( functionaljava
)
الاختبار القائم على الخاصية ( functionaljava-quickcheck
)
كمية صغيرة من دعم Java 8 ( functionaljava-java-core
)
أحدث إصدار مستقر هو 5.0
. يمكن إضافة هذا إلى مشروع Gradle الخاص بك عن طريق إضافة التبعيات:
ترجمة "org.functionaljava:functionaljava:5.0" ترجمة "org.functionaljava:functionaljava-quickcheck:5.0" ترجمة "org.functionaljava:functionaljava-java-core:5.0"
و في مافن:
<التبعية> <groupId>org.functionaljava</groupId> <artifactId>functionaljava</artifactId> <الإصدار>5.0</الإصدار> </التبعية> <التبعية> <groupId>org.functionaljava</groupId> <artifactId>functionaljava-quickcheck</artifactId> <الإصدار>5.0</الإصدار> </التبعية> <التبعية> <groupId>org.functionaljava</groupId> <artifactId>functionaljava-java-core</artifactId> <الإصدار>5.0</الإصدار> </التبعية>
يتم البناء باستخدام Java 8 وGradle 7.4. في الدليل الجذر، قم بتشغيل:
./جرادلو
يتطلب هذا الوصول إلى Java 8 وسيتم تنزيل أداة إنشاء Gradle والتبعيات الضرورية وإنشاء FunctionalJava.
وصف أكثر اكتمالا للميزات المذكورة أعلاه هي:
هياكل البيانات الأساسية
وظائف مع ARITY 1 إلى 8 ( fj.F
).
الوظائف ذات القيمة arity من 0 إلى 8 والتي يمكنها إنتاج استثناءات ( fj.Try
).
الدوال ذات القيمة arity من 0 إلى 8 والتي لها إرجاع فارغ ( fj.Effect
).
الدوال ذات القيمة arity من 0 إلى 8 والتي لها إرجاع فارغ ويمكنها طرح استثناء ( fj.TryEffect
).
المنتجات ذات القيمة الفنية من 1 إلى 8 ( fj.P
).
نوع الوحدة ( fj.Unit
).
قيمة اختيارية - type-safe null ( fj.data.Option
).
نوع البيانات الموحدة المنفصلة - معالجة الاستثناءات التركيبية ( fj.data.Either
).
التحقق من الصحة - معالجة الاستثناءات التركيبية المتحيزة لليمين ( fj.data.Validation
).
مجموعات غير قابلة للتغيير
غلاف المصفوفة ( fj.data.Array
).
قائمة مرتبطة منفردة وغير قابلة للتغيير في الذاكرة ( fj.data.List
).
قائمة مرتبطة منفردة كسولة غير قابلة للتغيير ( fj.data.Stream
).
حزمة ( fj.data.fingertrees
) توفر 2-3 أشجار أصابع لتمثيل وظيفي للتسلسلات المستمرة، مما يدعم الوصول إلى الأطراف في زمن O(1) المطفأ.
قائمة غير متجانسة من النوع الآمن ( fj.data.hlist
) لقوائم العناصر ذات الأنواع المختلفة دون التضحية بسلامة النوع.
تنفيذ مجموعة غير قابلة للتغيير باستخدام شجرة حمراء/سوداء ( fj.data.Set
).
شجرة متعددة الاتجاهات غير قابلة للتغيير - تُعرف أيضًا باسم شجرة الورد ( fj.data.Tree
).
خريطة شجرة غير قابلة للتغيير باستخدام تطبيق شجرة أحمر/أسود ( fj.data.TreeMap
).
قائمة انتظار ذات أولوية غير قابلة للتغيير باستخدام أشجار الأصابع ( fj.data.PriorityQueue
).
قوائم الفرق، قائمة عالية الأداء.
تجريدات أخرى
مونويد ( fj.Monoid
).
نصف المجموعة ( fj.Semigroup
).
نوع بيانات العدد الطبيعي ( fj.data.Natural
).
مولد أرقام عشوائية باستخدام مولد التطابق الخطي ( fj.LcgRng
).
القارئ والكاتب والدولة ( fj.data.Reader
، fj.data.Writer
، fj.data.State
).
الإدخال/الإخراج أحادي لتجريد IO ( fj.IO
).
مجموعات المحلل اللغوي Monadic لكتابة المحلل اللغوي من خلال الجمع بين المحلل اللغوي الأصغر باستخدام التركيب.
تحويل أنواع البيانات من/إلى أنواع Java القياسية.
التحويل بين أنواع معينة من FunctionalJava وJava 8.
المساواة القابلة للتكوين ورمز التجزئة لـ HashMap وHashSet.
تنفيذ السوستة للجداول والأشجار.
إطار الاختبار الآلي القائم على المواصفات ( fj.test
).
الجهات الفاعلة العاملة بكامل طاقتها للحسابات المتوازية ( fj.control.parallel
) والتجريدات ذات الطبقات مثل الخريطة المتوازية، وتقليل الخريطة، والرمز البريدي المتوازي.
بصريات لتحديث البيانات غير القابلة للتغيير بما في ذلك العدسة، والمنشور، وISO، والاختياري، والاجتياز، وGetter، وFold، وSetter. مستوحاة من مكتبة Scala Monocle (https://github.com/julien-truffaut/Monocle) ومكتبة عدسات Haskell (https://github.com/ekmett/lens).
الفراغ، وهو نوع غير مأهول منطقيا.
يستخدم ترخيص Java الوظيفي ترخيص BSD 3 (ترخيص ثلاثي البنود) المتوفر على https://en.wikipedia.org/wiki/BSD_licenses.
للحصول على ملاحظات الإصدار لكل إصدار، راجع رابط الدليل:etc/release-notes.