Kata Kunci Groovy def

1. Ikhtisar

Dalam tutorial singkat ini, kita akan menjelajahi konsep kata kunci def di Groovy. Ini menyediakan fitur pengetikan opsional untuk bahasa JVM dinamis ini.

2. Arti Kata Kunci def

Kata kunci def digunakan untuk mendefinisikan variabel yang tidak diketik atau fungsi di Groovy, karena ini adalah bahasa yang diketik secara opsional.

Saat kami tidak yakin dengan jenis variabel atau bidang, kami dapat memanfaatkan def untuk membiarkan Groovy memutuskan jenis pada waktu proses berdasarkan nilai yang ditetapkan:

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

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

Kita juga dapat menggunakan kata kunci def untuk menentukan tipe kembalian dari suatu metode:

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

Di sini, multiply dapat mengembalikan semua jenis objek, tergantung pada parameter yang kita berikan padanya.

3. def Variabel

Mari kita pahami bagaimana def bekerja untuk variabel.

Saat kami menggunakan def untuk mendeklarasikan variabel, Groovy mendeklarasikannya sebagai NullObject dan menetapkan nilai null untuknya:

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

Saat kami menetapkan nilai ke daftar , Groovy menentukan jenisnya berdasarkan nilai yang ditetapkan:

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

Katakanlah kita ingin memiliki tipe variabel kita dinamis dan berubah dengan sebuah tugas:

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

Kita tidak dapat menetapkan List atau String ke variabel yang diketik int , karena ini akan memunculkan pengecualian runtime .

Jadi, untuk mengatasi masalah ini dan mengaktifkan sifat dinamis 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. Metode def

Kata kunci def selanjutnya digunakan untuk menentukan tipe pengembalian dinamis dari suatu metode. Ini berguna ketika kita dapat memiliki berbagai jenis nilai pengembalian untuk suatu metode:

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

Kita juga bisa menggunakan def untuk mendefinisikan metode tanpa pengembalian eksplisit:

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

5. def vs. Jenis

Mari kita bahas beberapa praktik terbaik seputar penggunaan def .

Meskipun kita dapat menggunakan def dan type bersama-sama saat mendeklarasikan variabel:

def int count assert count instanceof Integer

Kata kunci def akan menjadi redundan di sana, jadi kita harus menggunakan def atau type.

Selain itu, kita harus menghindari penggunaan def untuk parameter yang tidak diketik dalam sebuah metode.

Oleh karena itu, alih-alih:

void multiply(def x, def y)

Kami harus memilih:

void multiply(x, y)

Selanjutnya, kita harus menghindari penggunaan def saat mendefinisikan konstruktor.

6. Groovy def vs. Objek Java

Seperti yang telah kita lihat sebagian besar fitur dari kata kunci def dan penggunaannya melalui contoh, kita mungkin bertanya-tanya apakah itu mirip dengan mendeklarasikan sesuatu menggunakan kelas Object di Java. Ya, def bisa dianggap mirip dengan Object :

def fullName = "Norman Lewis"

Demikian pula, kita bisa menggunakan Object di Java:

Object fullName = "Norman Lewis";

7. def vs. @TypeChecked

Karena banyak dari kita akan berasal dari dunia bahasa yang diketik dengan ketat, kita mungkin bertanya-tanya bagaimana cara memaksa pemeriksaan jenis waktu kompilasi di Groovy . Kita dapat dengan mudah mencapai ini menggunakan anotasi @TypeChecked .

Misalnya, kita dapat menggunakan @TypeChecked melalui kelas untuk mengaktifkan pemeriksaan tipe untuk semua metode dan propertinya:

@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 kompilasi akan gagal karena metode perkalian tidak diketik . Kompiler Groovy akan menampilkan kesalahan:

[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 sebuah metode, kita bisa menggunakan TypeCheckingMode.SKIP :

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

8. Kesimpulan

Dalam tutorial singkat ini, kita telah melihat bagaimana menggunakan kata kunci def untuk memanggil fitur dinamis dari bahasa Groovy dan membuatnya menentukan jenis variabel dan metode saat runtime.

Kata kunci ini dapat berguna dalam menulis kode yang dinamis dan kuat.

Seperti biasa, implementasi kode dari tutorial ini tersedia di proyek GitHub.