Kata kunci Groovy def

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan meneroka konsep kata kunci def di Groovy. Ia menyediakan ciri menaip pilihan untuk bahasa JVM dinamik ini.

2. Makna Kata Kunci def

Kata kunci def digunakan untuk menentukan pemboleh ubah yang tidak diketik atau fungsi di Groovy, kerana itu adalah bahasa yang ditaip pilihan.

Apabila kita tidak pasti jenis pemboleh ubah atau medan, kita dapat memanfaatkan def untuk membiarkan Groovy memutuskan jenis pada waktu berjalan berdasarkan nilai yang diberikan:

def firstName = "Samwell" def listOfCountries = ['USA', 'UK', 'FRANCE', 'INDIA'] 

Di sini, firstName akan menjadi String , dan listOfCountries akan menjadi ArrayList .

Kita juga boleh menggunakan kata kunci def untuk menentukan jenis kaedah kembali:

def multiply(x, y) { return x*y }

Di sini, penggandaan dapat mengembalikan semua jenis objek, bergantung pada parameter yang kita sampaikan kepadanya.

3. def Pemboleh ubah

Mari kita fahami bagaimana def berfungsi untuk pemboleh ubah.

Apabila kita menggunakan def untuk menyatakan pemboleh ubah, Groovy menyatakannya sebagai NullObject dan memberikan nilai nol kepadanya:

def list assert list.getClass() == org.codehaus.groovy.runtime.NullObject assert list.is(null) 

Sebaik sahaja kita memberikan nilai ke dalam senarai , Groovy menentukan jenisnya berdasarkan nilai yang diberikan:

list = [1,2,4] assert list instanceof ArrayList 

Katakan bahawa kita mahu agar jenis pemboleh ubah kita dinamik dan berubah dengan tugasan:

int rate = 20 rate = [12] // GroovyCastException rate = "nill" // GroovyCastException

Kami tidak dapat menetapkan List atau String ke variabel int typed, kerana ini akan membuang pengecualian runtime .

Oleh itu, untuk mengatasi masalah ini dan menggunakan sifat dinamik Groovy, kami akan menggunakan kata kunci def :

def rate assert rate == null assert rate.getClass() == org.codehaus.groovy.runtime.NullObject rate = 12 assert rate instanceof Integer rate = "Not Available" assert rate instanceof String rate = [1, 4] assert rate instanceof List

4. kaedah Def

Kata kunci def selanjutnya digunakan untuk menentukan jenis kaedah kembali yang dinamik. Ini berguna apabila kita boleh mempunyai pelbagai jenis nilai pulangan untuk satu kaedah:

def divide(int x, int y) { if (y == 0) { return "Should not divide by 0" } else { return x/y } } assert divide(12, 3) instanceof BigDecimal assert divide(1, 0) instanceof String

Kami juga dapat menggunakan def untuk menentukan kaedah tanpa pengembalian eksplisit:

def greetMsg() { println "Hello! I am Groovy" }

5. def vs Jenis

Mari kita bincangkan beberapa amalan terbaik mengenai penggunaan def .

Walaupun kita mungkin menggunakan kedua-dua def dan ketik bersama-sama sambil menyatakan pemboleh ubah:

def int count assert count instanceof Integer

Kata kunci def akan berlebihan di sana, jadi kita harus menggunakan def atau jenisnya.

Selain itu, kita harus mengelakkan penggunaan def untuk parameter yang tidak diketik dalam kaedah.

Oleh itu, bukannya:

void multiply(def x, def y)

Kita harus memilih:

void multiply(x, y)

Tambahan pula, kita harus mengelakkan penggunaan def semasa menentukan pembina.

6. Groovy def vs Java Object

Seperti yang kita lihat kebanyakan ciri kata kunci def dan penggunaannya melalui contoh, kita mungkin tertanya-tanya sama seperti menyatakan sesuatu menggunakan kelas Objek di Java. Ya, def boleh dianggap serupa dengan Objek :

def fullName = "Norman Lewis"

Begitu juga, kita dapat menggunakan Object di Java:

Object fullName = "Norman Lewis";

7. def vs @TypeChecked

Oleh kerana ramai di antara kita berasal dari dunia bahasa yang ditaip ketat, kita mungkin tertanya-tanya bagaimana memaksa pemeriksaan jenis waktu kompilasi di Groovy . Kami dapat mencapainya dengan mudah menggunakan anotasi @TypeChecked .

Sebagai contoh, kita boleh menggunakan @TypeChecked di atas kelas untuk membolehkan pemeriksaan jenis untuk semua kaedah dan sifatnya:

@TypeChecked class DefUnitTest extends GroovyTestCase { def multiply(x, y) { return x * y } int divide(int x, int y) { return x / y } }

Di sini, kelas DefUnitTest akan diperiksa jenisnya, dan penyusunan akan gagal kerana kaedah pendaraban tidak ditaip . Penyusun Groovy akan memaparkan ralat:

[Static type checking] - Cannot find matching method java.lang.Object#multiply(java.lang.Object). Please check if the declared type is correct and if the method exists.

Jadi, untuk mengabaikan kaedah, kita boleh menggunakan TypeCheckingMode.SKIP :

@TypeChecked(TypeCheckingMode.SKIP) def multiply(x, y)

8. Kesimpulannya

Dalam tutorial ringkas ini, kita telah melihat bagaimana menggunakan kata kunci def untuk menggunakan ciri dinamik bahasa Groovy dan memilikinya menentukan jenis pemboleh ubah dan kaedah pada waktu runtime.

Kata kunci ini boleh berguna dalam menulis kod yang dinamik dan mantap.

Seperti biasa, pelaksanaan kod tutorial ini tersedia di projek GitHub.