Functional Java เป็นไลบรารีโอเพ่นซอร์สที่อำนวยความสะดวกในการเขียนโปรแกรมเชิงฟังก์ชันใน Java ห้องสมุดใช้นามธรรมการเขียนโปรแกรมขั้นพื้นฐานและขั้นสูงจำนวนมากที่ช่วยในการพัฒนาเชิงองค์ประกอบ Functional Java ยังทำหน้าที่เป็นแพลตฟอร์มสำหรับการเรียนรู้แนวคิดการเขียนโปรแกรมเชิงฟังก์ชันโดยการแนะนำแนวคิดเหล่านี้โดยใช้ภาษาที่คุ้นเคย
ไลบรารีนี้มีไว้สำหรับใช้ในแอปพลิเคชันที่ใช้งานจริงและได้รับการทดสอบอย่างละเอียดโดยใช้เทคนิคการทดสอบตามข้อกำหนดอัตโนมัติด้วย ScalaCheck และโมดูล Quickcheck ของ Functional Java
Functional Java จัดให้มีนามธรรมสำหรับประเภทต่อไปนี้:
โครงสร้างข้อมูลพื้นฐาน - ฟังก์ชันทั้งหมดและบางส่วน ผลิตภัณฑ์ หน่วย ทางเลือก สหภาพที่ไม่ลำเอียงและลำเอียงขวา (อย่างใดอย่างหนึ่งและการตรวจสอบ) ถือเป็นโมฆะ
คอลเลกชันที่ไม่เปลี่ยนรูป - อาร์เรย์ รายการ เวกเตอร์ สตรีม เซ็ต แผนที่ คิวลำดับความสำคัญ แผนผังนิ้ว รายการต่างกัน รายการผลต่าง
นามธรรมอื่นๆ - โมโนอยด์, เซมิกรุ๊ป, ธรรมชาติ, ตัวสร้างตัวเลขสุ่ม, เครื่องอ่าน, ตัวเขียน, สถานะ, อินพุต/เอาท์พุต, ตัวแยกวิเคราะห์, ซิป, การทดสอบตามข้อกำหนด (การตรวจสอบด่วน), นักแสดง, ออพติก (เลนส์, ปริซึม, พับ, การสำรวจและอื่น ๆ ), เห็นพ้อง และการแปลงประเภท
URL ที่สำคัญสำหรับโครงการคือ:
เว็บไซต์ http://www.functionjava.org
พื้นที่เก็บข้อมูลเว็บไซต์ http://github.com/functionjava/functionjava.github.io
การสร้างการบูรณาการอย่างต่อเนื่องของ Travis https://app.travis-ci.com/github/functionjava/functionjava
พื้นที่เก็บข้อมูล Sonatype https://oss.sonatype.org/content/groups/public/org/functionjava/
พื้นที่เก็บข้อมูล Maven Central https://mvnrepository.com/artifact/org.functionjava/functionjava
วิธีที่แนะนำในการดาวน์โหลดและใช้โปรเจ็กต์คือผ่านเครื่องมือสร้างของคุณ
อาร์ติแฟกต์ Functional Java ได้รับการเผยแพร่ไปยัง Maven Central โดยใช้กลุ่ม org.functionaljava
พร้อมด้วยอาร์ติแฟกต์ที่เผยแพร่สามรายการ:
ไลบรารีหลัก ( functionaljava
)
การทดสอบตามคุณสมบัติ ( functionaljava-quickcheck
)
รองรับ Java 8 จำนวนเล็กน้อย ( functionaljava-java-core
)
เวอร์ชันเสถียรล่าสุดคือ 5.0
สามารถเพิ่มลงในโปรเจ็กต์ Gradle ของคุณได้โดยเพิ่มการอ้างอิง:
คอมไพล์ "org.functionjava:functionjava:5.0" คอมไพล์ "org.functionjava:functionjava-quickcheck:5.0" คอมไพล์ "org.functionjava:functionjava-java-core:5.0"
และใน Maven:
<การพึ่งพา> <groupId>org.functionjava</groupId> <artifactId>ฟังก์ชันจาวา</artifactId> <เวอร์ชัน>5.0</เวอร์ชัน> </การพึ่งพา> <การพึ่งพา> <groupId>org.functionjava</groupId> <artifactId>Functionaljava-ตรวจสอบด่วน</artifactId> <เวอร์ชัน>5.0</เวอร์ชัน> </การพึ่งพา> <การพึ่งพา> <groupId>org.functionjava</groupId> <artifactId>functionjava-java-core</artifactId> <เวอร์ชัน>5.0</เวอร์ชัน> </การพึ่งพา>
การสร้างเสร็จสิ้นโดยใช้ Java 8 และ Gradle 7.4 ในไดเร็กทอรีรากให้รัน:
./gradlew
สิ่งนี้ต้องการการเข้าถึง Java 8 และจะดาวน์โหลดเครื่องมือสร้าง Gradle และการขึ้นต่อกันที่จำเป็นและสร้าง FunctionalJava
คำอธิบายที่สมบูรณ์ยิ่งขึ้นของคุณสมบัติที่กล่าวถึงข้างต้นคือ:
โครงสร้างข้อมูลพื้นฐาน
ฟังก์ชันที่มี arity 1 ถึง 8 ( fj.F
)
ฟังก์ชันที่มีค่า arity 0 ถึง 8 ที่สามารถสร้างข้อยกเว้น ( fj.Try
)
ฟังก์ชันที่มีค่า arity 0 ถึง 8 ที่มีการคืนค่าเป็นโมฆะ ( fj.Effect
)
ฟังก์ชันที่มีค่า arity 0 ถึง 8 ซึ่งมีการคืนค่าเป็นโมฆะและสามารถส่งข้อยกเว้นได้ ( fj.TryEffect
)
สินค้าที่มีค่า arity 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
)
รายการผลต่าง รายการประสิทธิภาพสูง
นามธรรมอื่น ๆ
Monoid ( fj.Monoid
)
เซมิกรุ๊ป ( fj.Semigroup
)
ชนิดข้อมูลจำนวนธรรมชาติ ( fj.data.Natural
)
เครื่องกำเนิดตัวเลขสุ่มโดยใช้ เครื่องกำเนิดสมการเชิงเส้น ( fj.LcgRng
)
Reader, Writer และ State monads ( fj.data.Reader
, fj.data.Writer
, fj.data.State
)
Monad อินพุต/เอาท์พุตสำหรับนามธรรม IO ( fj.IO
)
เครื่องมือรวมตัวแยกวิเคราะห์ Monadic สำหรับการเขียนตัวแยกวิเคราะห์โดยการรวมตัวแยกวิเคราะห์ขนาดเล็กโดยใช้องค์ประกอบ
การแปลงประเภทข้อมูลเป็น/จากประเภท Java มาตรฐาน
การแปลงระหว่างประเภทเฉพาะของ FunctionalJava และ Java 8
ความเท่าเทียมกันและรหัสแฮชที่กำหนดค่าได้สำหรับ HashMap และ HashSet
การใช้งานซิปสำหรับลำธารและต้นไม้
กรอบการทดสอบตามข้อกำหนดอัตโนมัติ ( fj.test
)
Actors ที่ดำเนินการเต็มรูปแบบสำหรับการคำนวณแบบขนาน ( fj.control.parallel
) และนามธรรมแบบเลเยอร์ เช่น Parallel-map, Map-reduce, Parallel-zip
ออพติคสำหรับการอัปเดตข้อมูลที่ไม่เปลี่ยนรูป รวมถึงเลนส์ ปริซึม iso ทางเลือก การเคลื่อนที่ ทะเยอทะยาน พับ และตัวตั้งค่า แรงบันดาลใจจากไลบรารี Scala Monocle (https://github.com/julien-truffaut/Monocle) และไลบรารีเลนส์ Haskell (https://github.com/ekmett/lens)
โมฆะ ประเภทที่ไม่มีคนอาศัยตามหลักเหตุผล
ใบอนุญาต Functional Java ใช้ใบอนุญาต BSD 3 (ใบอนุญาต 3 ข้อ) ซึ่งมีอยู่ที่ https://en.wikipedia.org/wiki/BSD_licenses
สำหรับบันทึกประจำรุ่นของแต่ละเวอร์ชัน โปรดดูที่ลิงก์ไดเรกทอรี:etc/release-notes