Groovy là gì

Groovy – một ngữ điệu thiết kế hễ chạy trên nền đồ vật ảo Java, tất cả các kĩ năng tương tự như Python hoặc Ruby . Nó hỗ trợ mang đến 99% cú pháp của Java, vì vậy việc các bạn paste 1 đoạn code Java để điều khiển xe trên Groovy là điều rất là đơn giản dễ dàng và thân thiện cùng với Java Developer.

Bạn đang xem: Groovy là gì

Đang xem: Groovy là gì

Làm việc với Groovy từ thời điểm năm 2013 lúc Google IO chào làng Android Studio áp dụng Gradle build cùng với groovy script. Nhưng cho đến hiện nay, bản thân vẫn chưa có thời cơ áp dụng Groovhệt như một ngôn ngữ sửa chữa thay thế vào dự án thực tế. Mọi đồ vật với mình vẫn chỉ dừng lại sống Việc config build script trong Gradle , hoặc Jenkins pipeline. Vì vậy, cùng với toàn bộ đa số gì bản thân khám phá với một chút ít kinh nghiệm của bạn dạng thân, hy vọng chúng ta cùng đóp góp chủ ý trường hợp tất cả điều gì không đúng. Xin cảm ơn!!

1. Default imports

Việc import package mỗi khi áp dụng class ví dụ như java.io.File vẫn hay là nên cho từng Java Developer. Nhưng trong groovy thì không nên làm điều đó, mặc định các packages sau đang imported.

java.io.* java.lang.* java.math.BigDecimal java.math.BigInteger java.net.* java.util.* groovy.lang.* groovy.util.* 2. Multi-methods

Giả sử bọn họ có đoạn code cùng với 2 method nạp chồng nhỏng dưới. Compile cùng chạy cho tất cả Java và Groovy –> đang đem lại 2 tác dụng khác biệt.

int method(String arg) int method(Object arg) Object o = “Object”; int result = method(o);

Kết quả :

Java result sẽ là 2. Groovy result vẫn là 1.

Với Java thì những method sẽ được lựa chọn Khi compile, dựa trên data type sẽ knhì báo vào ví bên trên là Object

3. Khởi sản xuất một Array

Với Java, câu hỏi khởi sinh sản array hoàn toàn có thể tiến hành nlỗi sau :

int> array =

Nhưng trong groovy, nó ko được phép. Vì cặp chỉ dành riêng cho closures. Thay vì chưng này sẽ sử dụng nlỗi sau nhằm thay thế :

int array = 4. Package scope visibility

Trong Java :

class Person

Trong groovy, không tồn tại tư tưởng access modifier dành riêng cho field.

Điều đó Tức là , dù bạn có thêm / vứt bỏ modifier của field giống hệt như Java thì cũng ko ảnh hưởng gì cho khả năng tróc nã xuất của field kia cả.

Để làm cho điều này,cần áp dụng annotation PackageScope chiếc sẽ kết hợp với getter và setter của field đó ( getter với setter được ngầm định tạo thành trong groovy)

class Person 5. ARM blocks

ARM (Automatic Resource Management) được cung ứng trường đoản cú Java 7. Trong Lúc Groovy lại không cung ứng. Txuất xắc vào kia groovy cung cấp những giải pháp khác nhau dựa vào closures – cái tất cả tác dụng tương tự trong những lúc closures đem đến sự ngắn thêm gọn gàng hơn

// Java Path file = Paths.

get(“/path/to/file”); Charmix charmix = Charphối.forName(“UTF-8”); try (BufferedReader reader = Files.newBufferedReader(file, charset)) } catch (IOException e) //Groovy new File(“/path/to/file”).eachLine(“UTF-8”) //Hoặc closer lớn Java new File(“/path/to/file”).withReader(“UTF-8”) } 6. Inner classes

Việc tạo nên một anonymous inner classes với nested classes vẫn vâng lệnh theo luật lệ của Java. Tuy nhiên trong groovy cú pháp tất cả phần dễ dàng và đơn giản hơn với một số loại bổ một số syntax , không xẻ trường đoản cú tầm nã xuất, biến đổi local ko cần là final

Static inner classes

class A } new A.B() Anonymous Inner Classes import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit CountDownLatch called = new CountDownLatch(1) Timer timer = new Timer() timer.schedule(new TimerTask() }, 0) assert called.await(10, TimeUnit.SECONDS) Tạo instances of Non-Static Inner Classes //Java public class Y public X foo() public static X createX(Y y) }

Cú pháp y.new X(); không được cung ứng trong groovy. Ttuyệt vào đó , bọn họ đề nghị viết new X(y) nhỏng bên dưới :

//Groovy public class Y public X foo() public static X createX(Y y) } 7. Lambdas

Java 8 gồm Lambdas thì groovy gồm Closures.

Đây là giải pháp Java 8 biểu đạt cùng với lambdas :

Runnable run = () -> System.out.println(“Run”); các mục.forEach(System.out::println);

Còn cùng với Groovy

Runnable run = danh sách.each // or danh sách.each(this.&println) 8. GStrings

Trong Java để nối những string với nhau chúng ta thường dùng dùng tân oán tử + để nối chuỗi, giống hệt như nạm này:

String name = “Nguyen Van Manh”; System.out.println(“Xin chao “ + name + “!”);

Còn vào groovy thì đơn giản cùng dễ dàng rộng không hề ít.

String name = "Nguyen Van Manh"; println "Xin chao $!"

Và cặp Double-quoted string literals $ )

assert “c”.getClass()==String assert "c".getClass()==String assert "c$".getClass() in GString

Kiểu dữ liệu char chỉ được hiểu chỉ lúc Lúc báo tường minc một biến chuyển là char

char a=”a” assert Character.digit(a, 16)==10 : “But Groovy does boxing” assert Character.digit((char) “a”, 16)==10 try catch(MissingMethodException e)

Casting Character

Groovy hỗ trợ 2 thứ hạng casting tự String sang –> char. Ở phía trên cũng có thể có sự khác biệt trong biện pháp cast.

//Cách 1 assert ((char) "c").class==Character // OK assert ((char) "cccc").class==Character // Error GroovyCastException //Cách 2 assert ("c" as char).class==Character // OK assert ("abc" as char).class==Character // OK, dẫu vậy chỉ rước ký kết từ a trước tiên 10. Primitives và wrappers

Groovy thực hiện Object cho toàn bộ những máy, vẻ bên ngoài tài liệu primitive sầu vẫn tự động wrap cho tới class wrapper tương úng.

Primitive sầu wrappers table Primitive sầu type Wrapper class boolean Boolean char Character short Short int Integer long Long float Float double Double

Cùng coi ví dụ dưới để xem sự biệt lập khi runtime áp dụng Java với Groovy.

Xem thêm: Tìm Hiểu An Yên Là Gì ? Nghĩa Của Từ An Yên Thường Thấy Trên Facebook

int i m(i) void m(long l) // method Grovy đã Gọi, tự động hóa wrap int –> Integer void m(Integer i) 11. So sánh ==

Trong Java, đối chiếu == được gọi là đang so sánh 2 giá trị primitive hoặc dìm dạng những objects.

Trong Groovy == được hiểu là a.compareTo(b)==0 giả dụ ab là Comparable, ngược trở lại sẽ được đọc là a.equals(b)

12. Conversions

Bảng so sánh bài toán chuyển đổi thứ hạng tài liệu thân Java với Groovy.

Y : Yes, Java hoàn toàn có thể thay đổi C : Yes, dẫu vậy đề xuất cast một phương pháp tường minch T : Yes, nhưng lại dữ liệu có khả năng sẽ bị loại bỏ N : No, Không chất nhận được

Java Conversions Table

Converts from boolean byte short char int long float double boolean – N N N N N N N byte N – Y C Y Y Y Y short N C – C Y Y Y Y char N C C – Y Y Y Y int N C C C – Y T Y long N C C C C – T T float N C C C C C – Y double N C C C C C C –

Grroovy Conversions Table

Converts from boolean Boolean byte Byte short Short char Character int Integer long Long BigInteger float Float double Double BigDecimal boolean – B N N N N N N N N N N N N N N N N Boolean B – N N N N N N N N N N N N N N N N byte T T – B Y Y Y D Y Y Y Y Y Y Y Y Y Y Byte T T B – Y Y Y D Y Y Y Y Y Y Y Y Y Y short T T D D – B Y D Y Y Y Y Y Y Y Y Y Y Short T T D T B – Y D Y Y Y Y Y Y Y Y Y Y char T T Y D Y D – D Y D Y D D Y D Y D D Character T T D D D D D – D D D D D D D D D D int T T D D D D Y D – B Y Y Y Y Y Y Y Y Integer T T D D D D Y D B – Y Y Y Y Y Y Y Y long T T D D D D Y D D D – B Y T T T T Y Long T T D D D T Y D D T B – Y T T T T Y BigInteger T T D D D D D D D D D D – D D D D T float T T D D D D T D D D D D D – B Y Y Y Float T T D T D T T D D T D T D B – Y Y Y double T T D D D D T D D D D D D D D – B Y Double T T D T D T T D D T D T D D T B – Y BigDecimal T T D D D D D D D D D D D T D T D – Y : Yes, Groovy có thể thay đổi D : Yes, tự động hóa biến đổi Khi compile hoặc nên cast một cách tường minch T : Yes, dẫu vậy tài liệu sẽ bị hạn chế B : Yes, tự động boxing/unboxing N : No, ko được cho phép 13. Extra từ khoá

Ngoài các từ khóa của Java, thì Groovy còn sử dụng thêm một trong những keywords bên dưới :

as def in trait

Cũng giống như Java, các từ khoá cũng ko được sử dụng nlỗi tên đổi thay.

14. Không áp dụng lốt ;

Với Java, sau mỗi statement đang ngừng bằng 1 lốt chấm phẩy ;. Nhưng cùng với Groovy thì điều này là ko buộc phải, tất yếu gồm cũng rất được cơ mà không tồn tại cũng không sao. Groovy đông đảo phát âm với compile hoàn toàn bình thường.

Chỉ gồm điều, nếu vệt ; được sử dụng, một số IDE đang ghi lại chính là ko cần thiết.

15. Từ khóa return – không buộc phải static void main(String args) " } static int m(Integer i)

Với Groovy return tại một method không hề là bắt buộc. Vấn đề này khôn xiết hữu ich cùng với những block code nhỏng closures hoặc những method đơn giản.

Tất nhiên , nó không có nghĩa là chúng ta vẫn bỏ return, bởi vào một vài ngôi trường hòa hợp Việc thực hiện return vẫn luôn là cần thiết.

16. class suffix có thể bỏ qua mất

.class suffix rất có thể bỏ lỡ lúc pass như parameter. Nhỏng Person.class ví dụ bên dưới

static void main(String args) static Person newInstance(Class clazz) 17. Try Catch Exception

Với Java bạn phải chỉ định tường minch Exception trong catch.

Nhưng với Groovy , đơn giản chỉ việc như sau

try catch (e)

Và có thể còn không hề ít sự khác hoàn toàn tốt ho nữa trong Groovy.

Tổng kết

Trên đây chỉ là tất cả những gì mình mày mò cùng viết lại theo ý đọc của bạn dạng thân với một số trong những cái được vận dụng Lúc thao tác làm việc thực tế.

Với Groovy nó cung cấp đến 99% cú pháp của Java, hơn nữa nó mang đến sự nthêm gọn đơn giản và dễ dàng vào cú pháp trình diễn. Sẽ giúp chúng ta trở nên tân tiến ứng dụng 1 phần nào kia nhanh lẹ hơn, một Lúc Grails càng ngày phổ biến

Để khám phá Groovy, Learning , Documentation vv.. bạn có thể tò mò tại http://groovy-lang.org