Groovy Là Gì

Groovy - một ngữ điệu lập trình hễ điều khiển xe trên nền sản phẩm công nghệ ảo Java, có những chức năng giống như như Pythanh mảnh hoặc Ruby .Nó hỗ trợ đến 99% cú pháp của Java, cho nên vì thế bài toán bạn paste 1 đoạn code Java nhằm chạy trên Groovy là vấn đề rất là dễ dàng và đơn giản cùng thân mật cùng với Java Developer.

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

Làm Việc cùng với Groovy từ thời điểm năm 2013 lúc Google IO ra mắt Android Studio thực hiện Gradle build cùng với groovy script.Nhưng cho tới bây chừ, mình vẫn chưa tồn tại cơ hội thực hiện Groovhệt như một ngữ điệu sửa chữa thay thế trong dự án thực tiễn.Mọi lắp thêm cùng với mình vẫn chỉ dừng lại sinh hoạt câu hỏi config build script trong Gradle , hoặc Jenkins pipeline.Vì vậy, với tất cả hầu như gì bản thân mày mò với một ít tay nghề của bản thân, hy vọng các bạn thuộc đóp góp chủ kiến ví như bao gồm điều gì không ổn. Xin cảm ơn!!

1. Default imports

Việc import package mỗi lúc áp dụng class chẳng hạn như java.io.File vẫn thường là đề nghị cho từng Java Developer.Nhưng vào groovy thì không yêu cầu làm cho điều đó, mặc định những packages sau sẽ imported.

java.io.* java.lang.* java.math.BigDecimal java.math.BigInteger java.net.* java.util.* groovy.lang.* groovy.util.*2. Multi-methodsGiả sử bọn họ gồm đoạn code với 2 method hấp thụ ông xã như bên dưới. Compile cùng chạy cho cả Java cùng Groovy --> sẽ đem về 2 công dụng khác nhau.

int method(String arg) return 1;int method(Object arg) return 2;Object o = "Object";int result = method(o);Kết trái :

Java result vẫn là 2.Groovy result vẫn là 1 trong những.

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

3. Khởi chế tạo một Array

Với Java, bài toán khởi tạo ra array có thể thực hiện nhỏng sau :

int<> array = 1, 2, 3Nhưng trong groovy, nó không được phép. Vì cặp chỉ giành cho closures.Ttuyệt bởi vì đó sẽ áp dụng nlỗi sau nhằm sửa chữa :

int<> array = <1,2,3>4. Package scope visibilityTrong Java :

class Person String nameTrong groovy, không có có mang access modifier giành cho field.

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

Để làm cho điều đó,đề xuất áp dụng annotation
PackageScope dòng vẫn kết phù hợp với getter với setter của field kia ( getter với setter được ngầm định tạo ra trong groovy)

class Person
PackageScope String name5. ARM blocksARM (Automatic Resource Management) được cung ứng trường đoản cú Java 7. Trong khi Groovy lại không cung cấp. Ttuyệt vào đó groovy hỗ trợ các biện pháp không giống nhau dựa vào closures - loại tất cả công dụng tương tự trong những khi closures đem lại sự nđính gọn hơn

// JavaPath file = Paths.get("/path/to/file");Charset charmix = Charset.forName("UTF-8");try (BufferedReader reader = Files.newBufferedReader(tệp tin, charset)) String line; while ((line = reader.readLine()) != null) System.out.println(line); catch (IOException e) e.printStackTrace();//Groovynew File("/path/to/file").eachLine("UTF-8") println it//Hoặc closer lớn Javanew File("/path/to/file").withReader("UTF-8") reader -> reader.eachLine println it 6. Inner classesViệc tạo nên một anonymous inner classes với nested classes vẫn vâng lệnh theo nguyên tắc của Java. Tuy nhiên vào groovy cú pháp bao gồm phần dễ dàng hơn với nhiều loại bửa một số trong những syntax , không xẻ trường đoản cú truy nã xuất, biến local không cần là final

Static inner classes

class A static class B new A.B()Anonymous Inner Classesimport java.util.concurrent.CountDownLatchimport java.util.concurrent.TimeUnitCountDownLatch called = new CountDownLatch(1)Timer timer = new Timer()timer.schedule(new TimerTask() void run() called.countDown() , 0)assert called.await(10, TimeUnit.SECONDS)Tạo instances of Non-Static Inner Classes//Java public class Y public class X public X foo() return new X(); public static X createX(Y y) return y.new X(); Cú pháp y.new X(); không được cung cấp trong groovy. Thay vào đó , chúng ta bắt buộc viết new X(y) nlỗi dưới :

//Groovypublic class Y public class X public X foo() return new X() public static X createX(Y y) return new X(y) 7. LambdasJava 8 có Lambdas thì groovy bao gồm Closures.

Đây là giải pháp Java 8 bộc lộ với lambdas :

Runnable run = () -> System.out.println("Run");list.forEach(System.out::println);Còn cùng với Groovy

Runnable run = println "run" menu.each println it // or các mục.each(this.&println)8. GStringsTrong Java để nối các string với nhau chúng ta thường dùng sử dụng tân oán tử + nhằm nối chuỗi, giống hệt như ráng này:

String name = "Nguyen Van Manh"; System.out.println("Xin chao " + name + "!");Còn trong groovy thì đơn giản và dễ dàng cùng dễ ợt rộng không hề ít.

String name = "Nguyen Van Manh"; println "Xin chao $name!"Và cặp Double-quoted string literals $ như bên trên được hotline là GString value.

9. String và Character literals

Trong Groovy, Singly-quoted được áp dụng mang đến String và double-quoted được sử dụng mang đến String hoặc GString (nếu như có interpolation GString $ )

assert "c".getClass()==Stringassert "c".getClass()==Stringassert "c$1".getClass() in GStringKiểu dữ liệu char chỉ được đọc chỉ lúc lúc báo tường minh một vươn lên là là char

char a="a"assert Character.digit(a, 16)==10 : "But Groovy does boxing"assert Character.digit((char) "a", 16)==10try assert Character.digit("a", 16)==10 assert false: "Need explicit cast" catch(MissingMethodException e)

Casting Character

Groovy hỗ trợ 2 kiểu casting từ String sang trọng --> char. Tại phía trên cũng đều có sự khác biệt trong biện pháp cast.

//Cách 1assert ((char) "c").class==Character // OK assert ((char) "cccc").class==Character // Error GroovyCastException //Cách 2assert ("c" as char).class==Character // OK assert ("abc" as char).class==Character // OK, tuy vậy chỉ rước ký kết từ a đầu tiên10. Primitives và wrappersGroovy thực hiện Object đến toàn bộ số đông sản phẩm, dạng hình tài liệu primitive vẫn auto wrap cho tới class wrapper tương úng.

Xem thêm: Tiểu Sử Sĩ Thanh Là Ai Nổi Tiếng, Kém 6 Tuổi, Tiểu Sử Sĩ Thanh

Primitive sầu wrappers tablePrimitive typeWrapper class
booleanBoolean
charCharacter
shortShort
intInteger
longLong
floatFloat
doubleDouble

Cùng xem ví dụ dưới giúp thấy sự biệt lập khi runtime sử dụng Java cùng Groovy.

int im(i)void m(long l) println "in m(long)" // method Java sẽ gọi// method Grovy sẽ hotline, tự động wrap int --> Integervoid m(Integer i) println "in m(Integer)" 11. So sánh ==Trong Java, so sánh == được đọc là đang so sánh 2 quý giá primitive sầu hoặc nhận dạng những objects.

Trong Groovy == được phát âm là a.compareTo(b)==0 nếu như ab là Comparable, ngược chở lại sẽ được đọc là a.equals(b)

12. Conversions

Bảng so sánh câu hỏi biến đổi hình dạng tài liệu thân Java với Groovy.

Y : Yes, Java có thể đưa đổiC : Yes, tuy thế bắt buộc cast một phương pháp tường minhT : Yes, cơ mà tài liệu có khả năng sẽ bị quăng quật bớtN : No, Không mang đến phép

Java Conversions Table

Converts frombooleanbyteshortcharintlongfloatdouble
boolean-NNNNNNN
byteN-YCYYYY
shortNC-CYYYY
charNCC-YYYY
intNCCC-YTY
longNCCCC-TT
floatNCCCCC-Y
doubleNCCCCCC-

Grroovy Conversions Table

Converts frombooleanBooleanbyteByteshortShortcharCharacterintIntegerlongLongBigIntegerfloatFloatdoubleDoubleBigDecimal
boolean-BNNNNNNNNNNNNNNNN
BooleanB-NNNNNNNNNNNNNNNN
byteTT-BYYYDYYYYYYYYYY
ByteTTB-YYYDYYYYYYYYYY
shortTTDD-BYDYYYYYYYYYY
ShortTTDTB-YDYYYYYYYYYY
charTTYDYD-DYDYDDYDYDD
CharacterTTDDDDD-DDDDDDDDDD
intTTDDDDYD-BYYYYYYYY
IntegerTTDDDDYDB-YYYYYYYY
longTTDDDDYDDD-BYTTTTY
LongTTDDDTYDDTB-YTTTTY
BigIntegerTTDDDDDDDDDD-DDDDT
floatTTDDDDTDDDDDD-BYYY
FloatTTDTDTTDDTDTDB-YYY
doubleTTDDDDTDDDDDDDD-BY
DoubleTTDTDTTDDTDTDDTB-Y
BigDecimalTTDDDDDDDDDDDTDTD-
Y : Yes, Groovy rất có thể đưa đổiD : Yes, tự động biến đổi Khi compile hoặc yêu cầu cast một phương pháp tường minhT : Yes, nhưng lại tài liệu sẽ ảnh hưởng quăng quật bớtB : Yes, tự động hóa boxing/unboxingN : No, không cho phép13. Extra keywords

Ngoài các từ khoá của Java, thì Groovy còn thực hiện thêm một trong những keywords bên dưới :

asdefintrait

Cũng hệt như Java, những từ khóa cũng không được áp dụng nhỏng tên thay đổi.

14. Không thực hiện lốt ;

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

Chỉ gồm điều, giả dụ dấu ; được áp dụng, một trong những IDE vẫn đánh dấu sẽ là ko quan trọng.

15. Từ khóa return - ko bắt buộc

static void main(String<> args) int i def result = m(i) println "Ket qua = $result" static int m(Integer i) 100 Với Groovy return tại một method không còn là bắt buộc. Vấn đề này hết sức hữu ich cùng với những block code như closures hoặc các method dễ dàng và đơn giản.

Tất nhiên , nó ko tức là bọn họ đang vứt return, do vào một số trong những ngôi trường hợp vấn đề sử dụng return vẫn luôn là quan trọng.

16. class suffix hoàn toàn có thể bỏ qua

.class suffix hoàn toàn có thể bỏ qua lúc pass nhỏng parameter. Nhỏng Person.class ví dụ bên dưới

static void main(String<> args) // hoàn toàn có thể phát âm là Person.class def p = newInstance(Person) println p.name static Person newInstance(Class clazz) return clazz.newInstance() 17. Try Catch ExceptionVới Java bạn phải hướng dẫn và chỉ định tường minh Exception trong catch.

Nhưng cùng với Groovy , đơn giản dễ dàng chỉ cần nlỗi sau

try Integer.parseInt("aaa") catch (e) println e.getMessage() Và rất có thể còn rất nhiều sự khác hoàn toàn tốt ho nữa vào Groovy.

Tổng kết

Trên phía trên chỉ là các thứ mình tìm hiểu với viết lại theo ý hiểu của bạn dạng thân và một trong những cái được áp dụng Lúc làm việc thực tiễn.

Với Groovy nó cung ứng mang đến 99% cú pháp của Java, không chỉ có vậy nó mang lại sự ngắn gọn đơn giản vào cú pháp trình diễn. Sẽ góp họ cải tiến và phát triển áp dụng một phần như thế nào kia hối hả hơn, một Lúc Grails càng ngày phổ biến

Để tìm hiểu Groovy, Learning , Documentation vv.. chúng ta có thể mày mò trên http://groovy-lang.org