Groovy là gì

Groovy - một ngôn ngữ thiết kế cồn điều khiển xe trên nền sản phẩm công nghệ ảo Java, gồm các kỹ năng tương tự như nhỏng Pythanh mảnh hoặc Ruby .Nó cung cấp cho 99% cú pháp của Java, cho nên bài toán các bạn paste 1 đoạn code Java để chạy xe trên Groovy là điều hết sức đơn giản dễ dàng cùng gần gũi cùng với Java Developer.

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

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

1. Default imports

Việc import package mọi khi áp dụng class chẳng hạn như java.io.File vẫn thường xuyên là bắt buộc cho mỗi Java Developer.Nhưng vào groovy thì không yêu cầu làm điều ấy, mặc định những packages sau vẫn imported.

java.io.* java.lang.* java.math.BigDecimal java.math.BigInteger java.net.* java.util.* groovy.lang.* groovy.util.*2. Multi-methodsGiả sử họ bao gồm đoạn code với 2 method nạp ông xã nlỗi bên dưới. Compile với chạy cho tất cả Java và Groovy --> sẽ đem về 2 kết quả không giống 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 đang là 2.Groovy result đang là 1.

Với Java thì các method sẽ tiến hành lựa chọn Lúc compile, dựa vào data type đã knhì báo trong 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 tạo thành array rất có thể thực hiện như sau :

int<> array = 1, 2, 3Nhưng vào groovy, nó ko được phxay. Vì cặp chỉ giành cho closures.Txuất xắc vị đó sẽ sử dụng như sau nhằm sửa chữa thay thế :

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

class Person String nameTrong groovy, không có khái niệm access modifier giành riêng cho field.

Điều đó Có nghĩa là , dù các bạn tất cả thêm / vứt bỏ modifier của field y như Java thì cũng ko ảnh hưởng gì mang lại kĩ năng truy tìm xuất của field kia cả.

Để có tác dụng điều này,bắt buộc thực hiện annotation
PackageScope cái vẫn kết phù hợp với getter và setter của field kia ( getter cùng 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 Lúc Groovy lại không hỗ trợ. Ttốt vào đó groovy hỗ trợ những giải pháp khác nhau dựa trên closures - dòng bao gồm tác dụng tương đương trong những khi closures đem lại sự nthêm gọn hơn

// JavaPath tệp tin = Paths.get("/path/to/file");Charset charset = Charmix.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 to Javanew File("/path/to/file").withReader("UTF-8") reader -> reader.eachLine println it 6. Inner classesViệc tạo thành một anonymous inner classes cùng nested classes vẫn tuân thủ theo quy tắc của Java. Tuy nhiên trong groovy cú pháp bao gồm phần đơn giản hơn cùng các loại té một số syntax , không té từ bỏ truy hỏi xuất, thay đổi 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. Ttốt vào kia , họ phải viết new X(y) như 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à biện pháp Java 8 biểu thị cùng với lambdas :

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

Runnable run = println "run" danh mục.each println it // or danh mục.each(this.&println)8. GStringsTrong Java để nối những string cùng nhau bọn họ hay được sử dụng cần sử dụng tân oán tử + để nối chuỗi, hệt như nạm này:

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

String name = "Nguyen Van Manh"; println "Xin chao $name!"Và cặp Double-quoted string literals $ nlỗi bên trên được Điện thoại tư vấn là GString value.

9. String với Character literals

Trong Groovy, Singly-quoted được thực hiện đến String với double-quoted được thực hiện mang lại String hoặc GString (nếu bao gồm interpolation GString $ )

assert "c".getClass()==Stringassert "c".getClass()==Stringassert "c$1".getClass() in GStringKiểu tài liệu char chỉ được đọc chỉ Lúc lúc báo tường minch một thay đổi 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 cung cấp 2 vẻ bên ngoài casting từ String lịch sự --> char. Ở trên đây cũng có thể có sự khác biệt vào phương 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, cơ mà chỉ lấy ký kết từ bỏ a đầu tiên10. Primitives với wrappersGroovy áp dụng Object đến toàn bộ đầy đủ vật dụng, mẫu mã tài liệu primitive sầu vẫn auto wrap cho tới class wrapper tương úng.

Xem thêm: Âm Dương Sư Pc Ra Mắt Miễn Phí Trên Steam, Tải Âm Dương Sư

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

Cùng xem ví dụ dưới để thấy sự khác hoàn toàn Lúc runtime sử dụng Java và Groovy.

int im(i)void m(long l) println "in m(long)" // method Java sẽ gọi// method Grovy đang Call, tự động wrap int --> Integervoid m(Integer i) println "in m(Integer)" 11. So sánh ==Trong Java, đối chiếu == được đọc là sẽ so sánh 2 quý hiếm 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 ab là Comparable, ngược trở lại sẽ được phát âm là a.equals(b)

12. Conversions

Bảng đối chiếu vấn đề đổi khác hình trạng dữ liệu giữa Java và Groovy.

Y : Yes, Java hoàn toàn có thể gửi đổiC : Yes, nhưng bắt buộc cast một giải pháp tường minhT : Yes, nhưng tài liệu sẽ ảnh hưởng bỏ bớtN : No, Không đế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 có thể gửi đổiD : Yes, auto biến hóa khi compile hoặc cần cast một bí quyết tường minhT : Yes, tuy nhiên dữ liệu có khả năng sẽ bị quăng quật bớtB : Yes, auto boxing/unboxingN : No, cấm đoán phép13. Extra keywords

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

asdefintrait

Cũng giống như Java, những keywords cũng không được sử dụng nlỗi tên trở thành.

14. Không áp dụng vệt ;

Với Java, sau mỗi statement vẫn hoàn thành bởi 1 vệt chấm phẩy ;. Nhưng với Groovy thì điều đó là không đề nghị, tất nhiên có cũng rất được nhưng không có cũng không sao. Groovy những hiểu với compile hoàn toàn thông thường.

Chỉ gồm điều, giả dụ dấu ; được sử dụng, một trong những IDE vẫn đánh dấu chính là ko cần thiết.

15. Từ khóa return - không 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 ở một method không còn là yêu cầu. Vấn đề này cực kỳ hữu ich cùng với các block code như closures hoặc các method đơn giản và dễ dàng.

Tất nhiên , nó ko Tức là bọn họ đã bỏ return, do trong một trong những trường vừa lòng câu hỏi thực hiện return vẫn chính là cần thiết.

16. class suffix có thể vứt qua

.class suffix rất có thể bỏ qua khi pass nhỏng parameter. Nlỗi Person.class ví dụ mặt dưới

static void main(String<> args) // rất có thể hiểu 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 đẫn tường minh Exception trong catch.

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

try Integer.parseInt("aaa") catch (e) println e.getMessage() Và rất có thể còn không ít sự khác biệt tuyệt ho nữa trong Groovy.

Tổng kết

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

Với Groovy nó cung ứng đến 99% cú pháp của Java, không dừng lại ở đó nó đem lại sự nthêm gọn dễ dàng và đơn giản vào cú pháp trình diễn. Sẽ góp bọn họ phát triển áp dụng một trong những phần như thế nào đó nhanh lẹ rộng, một lúc Grails ngày càng phổ biến

Để mày mò Groovy, Learning , Documentation vv.. chúng ta có thể tò mò tại http://groovy-lang.org

| W88Vuive | xosoketqua.com