Manifold เป็นปลั๊กอินคอมไพเลอร์ Java ใช้เพื่อเสริมโปรเจ็กต์ Java ของคุณด้วยคุณสมบัติที่มีประสิทธิผลสูง
ประเภทโปรแกรมเมตาเวลาคอม ไพล์ ขั้นสูงรวมข้อมูล เมตาดาต้า หรือ DSL ทุกประเภทเข้ากับ Java ได้อย่างปลอดภัย
การปรับปรุงภาษา ที่มีประสิทธิภาพช่วยปรับปรุงประสิทธิภาพของนักพัฒนาอย่างมาก
แต่ละคุณลักษณะมีให้ใช้งานได้โดยแยกจากกัน เพียงเพิ่มการพึ่งพา Manifold ที่คุณเลือกลงในโปรเจ็กต์ที่มีอยู่ และเริ่มใช้ประโยชน์จากสิ่งเหล่านั้น
ทั้งหมดได้รับการสนับสนุนอย่างเต็มที่ใน JDK LTS รีลีส 8 - 21 + ล่าสุดพร้อมการรองรับ IDE ที่ครอบคลุมใน IntelliJ IDEA และ Android Studio
มีอะไรใหม่...
SQL ที่ปลอดภัยสำหรับประเภท
Manifold SQL ช่วยให้คุณเขียน Native SQL ได้โดยตรง และ พิมพ์อย่างปลอดภัย ในโค้ด Java ของคุณ
- ประเภทการสืบค้นจะพร้อมใช้งานทันทีเมื่อคุณพิมพ์ Native SQL ที่มีความซับซ้อนใดๆ ในโค้ด Java ของคุณ
- ประเภทสคีมาจะได้รับมาจากฐานข้อมูลของคุณโดยอัตโนมัติ โดยให้ CRUD ที่ปลอดภัยสำหรับประเภท, TX แบบแยกส่วน และอื่นๆ อีกมากมาย
- ไม่มี ORM, ไม่มี DSL, ไม่มีสายไฟ และไม่มีขั้นตอนการสร้างโค้ด
การสุ่มตัวอย่างของบริษัทที่ใช้ Manifold:
ใช้เฟรมเวิร์กเพื่อเข้าถึงทรัพยากร ทุก ประเภทโดยตรงและปลอดภัย เช่น SQL , JSON , GraphQL , XML , YAML , CSV และแม้แต่ภาษาอื่น ๆ เช่น JavaScript ลบขั้นตอนการสร้างโค้ดในกระบวนการสร้างของคุณ ▶ ลองดูสิ!
SQL: ใช้ Native SQL ที่มีความซับซ้อน โดยตรง และ ปลอดภัยในการพิมพ์ จาก Java
Language english =
"[.sql/]select * from Language where name = 'English'" . fetchOne ();
Film film = Film . builder ( "My Movie" , english )
. withDescription ( "Nice movie" )
. withReleaseYear ( 2023 )
. build ();
MyDatabase . commit ();
GraphQL: ใช้ประเภทที่กำหนดในไฟล์ .graphql โดยตรง ไม่มีขั้นตอนการสร้างรหัส! ทำการเปลี่ยนแปลง GraphQL และใช้การเปลี่ยนแปลงโค้ดทันที
var query = MovieQuery . builder ( Action ). build ();
var result = query . request ( "http://com.example/graphql" ). post ();
var actionMovies = result . getMovies ();
for ( var movie : actionMovies ) {
out . println (
"Title: " + movie . getTitle () + " n " +
"Genre: " + movie . getGenre () + " n " +
"Year: " + movie . getReleaseDate (). getYear () + " n " );
}
JSON: ใช้ไฟล์สคีมา .json โดยตรงและพิมพ์อย่างปลอดภัย ไม่มีขั้นตอนการสร้างโค้ด! ค้นหาการใช้งานคุณสมบัติ .json ในโค้ด Java ของคุณ
// From User.json
User user = User . builder ( "myid" , "mypassword" , "Scott" )
. withGender ( male )
. withDob ( LocalDate . of ( 1987 , 6 , 15 ))
. build ();
User . request ( "http://api.example.com/users" ). postOne ( user );
เพิ่มวิธีการของคุณเองให้กับคลาส Java ที่มีอยู่ แม้แต่ String , List และ File กำจัดรหัสสำเร็จรูป ▶ ลองดูสิ!
String greeting = "hello" ;
greeting . myMethod (); // Add your own methods to String!
ชอบองค์ประกอบมากกว่ามรดก ใช้ @link
และ @part
สำหรับการส่งต่อการใช้งานอินเทอร์เฟซอัตโนมัติและการมอบหมาย จริง
class MyClass implements MyInterface { @ link MyInterface myInterface ; // transfers calls on MyInterface to myInterface public MyClass ( MyInterface myInterface ) { this . myInterface = myInterface ; // dynamically configure behavior } // No need to implement MyInterface here, but you can override myInterface as needed }
กำจัดโค้ด getter/setter สำเร็จรูป ปรับปรุงประสบการณ์การพัฒนาโดยรวมของคุณด้วยคุณสมบัติ
public interface Book {
@ var String title ; // no more boilerplate code!
}
// refer to it directly by name
book . title = "Daisy" ; // calls setter
String name = book . title ; // calls getter
book . title += " chain" ; // calls getter & setter
นอกจากนี้ คุณลักษณะนี้ยัง อนุมาน คุณสมบัติโดยอัตโนมัติ ทั้งจากไฟล์ต้นฉบับที่มีอยู่และจากคลาสที่คอมไพล์ที่โปรเจ็กต์ของคุณใช้ ลดการใช้ทรัพย์สินจากสิ่งนี้:
Actor person = result . getMovie (). getLeadingRole (). getActor ();
Likes likes = person . getLikes ();
likes . setCount ( likes . getCount () + 1 );
ถึงสิ่งนี้:
result . movie . leadingRole . actor . likes . count ++;
นำวิธีการ ของตัว ดำเนินการไปใช้กับประเภทใดก็ได้เพื่อรองรับตัวดำเนินการทางคณิตศาสตร์ เชิงสัมพันธ์ ดัชนี และหน่วยโดยตรง
// BigDecimal expressions
if ( bigDec1 > bigDec2 ) {
BigDecimal result = bigDec1 + bigDec2 ;
...
}
// Implement operators for any type
MyType value = myType1 + myType2 ;
นิพจน์ทูเพิลมีไวยากรณ์ที่กระชับเพื่อจัดกลุ่มรายการข้อมูลที่มีชื่อในโครงสร้างแบบไลท์เวท
var t = ( name : "Bob" , age : "35" );
System . out . println ( "Name: " + t . name + " Age: " + t . age );
var t = ( person . name , person . age );
System . out . println (" Name : " + t . name + " Age : " + t . age );
คุณยังสามารถใช้สิ่งอันดับกับการอนุมานประเภท auto
ใหม่เพื่อเปิดใช้งานค่าส่งคืนหลายค่าจากวิธีการหนึ่งได้
การดำเนินงานของหน่วยหรือ การเชื่อมโยง เป็นเอกลักษณ์เฉพาะของกรอบงาน Manifold มีไวยากรณ์ที่กระชับและมีประสิทธิภาพและสามารถนำไปใช้กับแอปพลิเคชันได้หลากหลาย
import static manifold . science . util . UnitConstants .*; // kg, m, s, ft, etc
...
Length distance = 100 mph * 3 hr ;
Force f = 5.2 kg m / s / s ; // same as 5.2 N
Mass infant = 9 lb + 8.71 oz ;
ทำงานกับ Range API ได้อย่างง่ายดายโดยใช้นิพจน์หน่วย เพียงนำเข้าค่าคง ที่ RangeFun เพื่อสร้างช่วง
// imports the `to`, `step`, and other "binding" constants
import static manifold . collections . api . range . RangeFun .*;
...
for ( int i : 1 to 5 ) {
out . println ( i );
}
for ( Mass m : 0 kg to 10 kg step 22 r unit g ) {
out . println ( m );
}
ใช้กรอบงานวิทยาศาสตร์ที่หลากหลายเพื่อรวมหน่วยและการวัดที่แม่นยำเข้ากับการใช้งานของคุณอย่างปลอดภัย
import static manifold . science . util . UnitConstants .*; // kg, m, s, ft, etc.
...
Velocity rate = 65 mph ;
Time time = 1 min + 3.7 sec ;
Length distance = rate * time ;
ใช้คำสั่งที่คุ้นเคย เช่น #define และ #if เพื่อคอมไพล์โปรเจ็กต์ Java ของคุณแบบมีเงื่อนไข ตัวประมวลผลล่วงหน้านำเสนอวิธีที่ง่ายและสะดวกในการสนับสนุนเป้าหมายบิลด์หลายรายการด้วยโค้ดเบสเดียว ▶ ลองดูสิ!
# if JAVA_8_OR_LATER
@ Override
public void setTime ( LocalDateTime time ) {...}
# else
@ Override
public void setTime ( Calendar time ) {...}
# endif
รวม API ที่แตกต่างกัน เชื่อมโยงส่วนประกอบซอฟต์แวร์ที่คุณไม่ได้ควบคุม เข้าถึงแผนที่ผ่านอินเทอร์เฟซที่ปลอดภัยต่อประเภท ▶ ลองดูสิ!
Map < String , Object > map = new HashMap <>();
MyThingInterface thing = ( MyThingInterface ) map ; // O_o
thing . setFoo ( new Foo ());
Foo foo = thing . getFoo ();
out . println ( thing . getClass ()); // prints "java.util.HashMap"
เข้าถึงคุณสมบัติส่วนตัวด้วย @Jailbreak เพื่อหลีกเลี่ยงความน่าเบื่อหน่ายและช่องโหว่ของการสะท้อน Java ▶ ลองดูสิ!
@ Jailbreak Foo foo = new Foo ();
// Direct, *type-safe* access to *all* foo's members
foo . privateMethod ( x , y , z );
foo . privateField = value ;
ขณะนี้คุณมีตัวเลือกในการทำให้ข้อยกเว้นที่เลือกทำงานเหมือนกับข้อยกเว้นที่ไม่ได้ตรวจสอบ! ไม่มีการกลืนข้อยกเว้นโดยไม่ได้ตั้งใจอีกต่อไป ไม่ ต้องลอง / จับ / ห่อ / สร้าง ต้นแบบใหม่อีกต่อไป!
List < String > strings = ...;
List < URL > urls = strings . stream ()
. map ( URL :: new ) // No need to handle the MalformedURLException!
. collect ( Collectors . toList ());
ตัวแปรและนิพจน์อินไลน์ในตัวอักษร String ไม่มีการต่อสตริงที่ยุ่งยากอีกต่อไป! ▶ ลองดูสิ!
int hour = 15 ;
// Simple variable access with '$'
String result = "The hour is $hour" ; // Yes!!!
// Use expressions with '${}'
result = "It is ${hour > 12 ? hour-12 : hour} o'clock" ;
สร้างไฟล์เทมเพลตด้วยพลังการแสดงออกเต็มรูปแบบของ Java ใช้เทมเพลตของคุณโดยตรงในโค้ดของคุณเป็นประเภท รองรับการรวมเทมเพลตอื่นๆ เค้าโครงที่ใช้ร่วมกัน และอื่นๆ อย่างปลอดภัย ▶ ลองดูสิ!
List < User > users = ...;
String content = abc . example . UserSample . render ( users );
ไฟล์เทมเพลต abc/example/UserSample.html.mtl
< %@ import java.util.List % >
< %@ import com.example.User % >
< %@ params(List < User > users) % >
< html lang =" en " >
< body >
< % for(User user: users) { % >
< % if(user.getDateOfBirth() != null) { % >
User: ${user.getName()} < br >
DOB: ${user.getDateOfBirth()} < br >
< % } % >
< % } % >
</ body >
</ html >
ใช้ปลั๊กอิน Manifold เพื่อใช้ประโยชน์จาก Manifold อย่างเต็มที่ด้วย IntelliJ IDEA และ Android Studio ปลั๊กอินให้การสนับสนุนที่ครอบคลุมสำหรับ Manifold รวมถึงการเติมโค้ดให้สมบูรณ์ การนำทาง การค้นหาการใช้งาน การปรับโครงสร้างใหม่ การคอมไพล์ส่วนเพิ่ม การดีบัก hotswap การแก้ไขเทมเพลตที่มีคุณสมบัติครบถ้วน ตัวประมวลผลล่วงหน้าแบบรวม และอื่นๆ อีกมากมาย
รับปลั๊กอินจาก JetBrains Marketplace
โครงการ Manifold ประกอบด้วยกรอบงาน Manifold หลักและคอลเลกชันของโครงการย่อยที่ใช้ SPI ที่ได้รับจากกรอบงานหลัก แต่ละโปรเจ็กต์ประกอบด้วย การขึ้นต่อกัน ตั้งแต่หนึ่งรายการขึ้นไปที่คุณสามารถเพิ่มลงในโปรเจ็กต์ของคุณได้อย่างง่ายดาย:
ท่อร่วม: แกน
มากมาย: ส่วนขยาย
Manifold : การมอบหมาย
นานาชนิด : คุณสมบัติ
นานา: สิ่งอันดับ
แมนิโฟล์ด : SQL
แมนิโฟลด์ : GraphQL
ท่อร่วม : JSON
มากมาย : XML
ท่อร่วม : YAML
ท่อร่วม : CSV
มากมาย : ไฟล์คุณสมบัติ
มากมาย : รูปภาพ
มากมาย : Dark Java
มากมาย : JavaScript
มากมาย: เทมเพลต Java
Manifold: การแก้ไขสตริง
Manifold : (Un) ตรวจสอบข้อยกเว้น
มากมาย : พรีโปรเซสเซอร์
นานาสาระ : วิทยาศาสตร์
มากมาย : คอลเลกชัน
ท่อร่วมไอดี : I/0
มากมาย : ข้อความ
ทดลองใช้โครงการตัวอย่าง:
- Manifold: แอปตัวอย่าง
- Manifold : ตัวอย่างแอป SQL
- Manifold: ตัวอย่างแอป GraphQL
- Manifold : ตัวอย่างแอป REST API
- Manifold : เว็บแอปตัวอย่าง
- Manifold: โครงการตัวอย่าง Gradle
- Manifold: ตัวอย่างแอป Kotlin
แมนิโฟล์ดรองรับ:
การสนับสนุน IDE ที่ครอบคลุมยังมีให้สำหรับ IntelliJ IDEA และ Android Studio
เข้าร่วมเซิร์ฟเวอร์ Discord ของเราเพื่อเริ่มการสนทนา ถามคำถาม ให้ข้อเสนอแนะ ฯลฯ โดยปกติแล้วจะมีคนคอยช่วยเหลือ