Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Android SDK
Code

Membuat Kod Aplikasi Android Fungsional di Kotlin: Lambdas, Keselamatan & Lain-lain

by
Length:LongLanguages:
This post is part of a series called Coding Android Apps in Kotlin.
Coding Functional Android Apps in Kotlin: Getting Started

Malay (Melayu) translation by Muhammad Nabil (you can also view the original English article)

Dalam seri tiga bahagian ini, kita akan melihat secara mendalam pada Kotlin, sebuah bahasa pemrograman moden untuk aplikasi Android yang berjalan di Java Virtual Machine (JVM).

Sementara Kotlin jauh dari sekedar alternatif pemrograman bahasa yang dirancang untuk berjalan di JVM, memang banyak yang ditawarkan kepada Android pengembang. Jadi, jika Anda baru saja merasa frustrasi dengan pengembangan Java di bagian Android, Anda pasti ingin mempertimbangkan untuk memberikan kesempatan Kotlin.

Dalam dua angsuran pertama, kita membahas perkara berikut:

  • Jawa vs Kotlin: Haruskah Anda Menggunakan Kotlin untuk Pengembangan Android? Dalam artikel ini, kita melihat apa yang ditawarkan oleh Kotlin kepada developer Android, dan juga beberapa kekurangan yang perlu diketahui sebelum memutuskan apakah Kotlin tepat untukmu

  • Membuat Kod Aplikasi Android Fungsional di Kotlin: Persiapan . Dalam siaran ini, kita melihat bagaimana cara mengkonfigurasi Android Studio untuk menyokong Kod Kotlin, membuat Android aplikasi yang ditulis sepenuhnya di Kotlin, membiasakan diri dengan pangkalan sintaks Kotlin, dan bahkan melihat bagaimana beralih ke Kotlin yang boleh menyebabkan anda tidak perlu menulis findViewById lagi

Sekarang setelah anda berada di posisi di mana anda dapat mengganti bagian Jawa dari proyekmu dengan kode Kotlin yang memiliki hasil akhir yang sama, mari kita lanjutkan dan lihat di beberapa area di mana Kotlin memiliki kelebihan dibandingkan Java

Pada kesempatan ini, kami akan menjelajah beberapa ciri tambahan Kotlin yang memungkinkan anda melakukan tugas yang akan jauh lebih terperinci di Jawa, atau tidak dapat dicapai dengan Java saja

Pada akhir artikel ini, anda akan tahu bagaimana menggunakan Kotlin untuk memotong satu ton kod boilerplate dari projekmu, memperluas kelas yang ada dengan fungsionalitas baru, dan membuat NullPointerExceptions yang memicu frustrasi ini menjadi sesuatu di masa lalu

Tidak ada lagi Nulls

Berapa kali anda bertemu dengan NullPointerException ketika mengetes kodemu? Hari ini, cukup jelas bahawa mengizinkan pemaju untuk menetapkan null ke reference object bukanlah pilihan terbaik desain! Mencoba menggunakan referensi objek yang memiliki nilai null adalah sumber bug yang sangat besar di banyak bahasa pemrograman yang berbeda, termasuk Java. Sebenarnya Mencoba menggunakan referensi objek yang memiliki nilai null adalah sumber bug yang sangat besar di banyak bahasa pemrograman yang berbeda, termasuk Java. Sebenarnya, NullPointerException telah menjadi sumber kegengkelan yang sangat besar sehingga Java 8 menambahkan anotasi @NonNull khusus untuk mencoba dan memperbaiki kekurangan ini pada sistem tipenya.

Masalahnya terletak pada kenyataan bahawa Java membolehkan anda untuk menetapkan variabel jenis referensi apa pun ke null-tapi jika pada titik tertentu anda mencoba menggunakan referensi yang mengarah ke nol, maka variabel tidak akan tahu dari mana harus mencari itu karena objeknya tidak benar-benar ada Pada titik ini, JVM tidak dapat melanjutkan proses eksekusi normal-aplikasimu akan macet, dan anda akan menemukan NullPointerException . Mencoba memanggil metode pada referensi null atau cuba mengakses field reference null akan memicu NullPointerException

Jika anda pernah mengalami penderitaan pada NullPointerExceptions (dan bukankah kita semua pada satu titik tertentu?) Maka ada kabar baik: null keselamatan diintegrasikan ke dalam bahasa Kotlin. Kompiler Kotlin tidak membolehkan anda untuk menetapkan nilai null ke rujukan objek, kerana secara khusus memeriksa kodemu untuk mengetahui kemungkinan objek null saat kompilasi. Jika pengkompil Kotlin mengetahui bahawa NullPointerException boleh dilemparkan semasa runtime, maka kodemu akan gagal ketika kompilasi waktu. Jika pengkompil Kotlin mengetahui bahawa NullPointerException boleh dilemparkan semasa runtime, maka kodemu akan gagal ketika kompilasi waktu.

Design null-safe Kotlin bermakna anda (hampir) tidak akan pernah menemukan situasi null dan NullPointerExceptions yang berasal dari kod Kotlin. Satu-satunya pengecualian adalah jika anda memicu NullPointerException dengan tidak benar menggunakan salah satu operator khusus Kotlin, atau jika anda menggunakan salah satu pengendali ini untuk secara sengaja memicu NullPointerException (kami akan menyelidiki pengendali secara lebih terperinci nanti dalam artikel ini).

Null Safety dalam Praktek

Di Kotlin, semua variabel dianggap tidak dapat dihilangkan secara lalai, jadi cuba untuk menetapkan nilai null ke variabel akan menghasilkan kompilasi kesalahan. Sebagai contoh, berikut ini tidak akan dikompilasi

Jika anda mahu variable menerima nilai null, anda harus secara explicitly menandai variabel tersebut sebagai nullable. Ini adalah kebalikan dari Java, di mana setiap objek dianggap nullable secara lalai, yang merupakan bahagian besar mengapa NullPointerExceptions begitu umum di Jawa

Sekiranya anda ingin secara eksplisit menyatakan bahawa suatu variabel boleh menerima nilai null, maka anda harus menambahkan ? ke jenis variable. Sebagai contoh, berikut ini akan dikompilasi:

Apabila pengkompil melihat jenis deklarasi ini, ia mengakui bahawa ini adalah variabel yang tidak dapat dilupakan dan akan memperlakukannya sedikit berbeza, terutama menghalang anda untuk memanggil metode atau mengakses properti pada hal yang tidak dapat dibaca ini, sekali lagi membantumu menghindari kejahatan NullPointerExceptions itu. Sebagai contoh, berikut ini tidak akan dikompilasi: Sebagai contoh, berikut ini tidak akan dikompilasi:

Walaupun desain Kotlin bermakna sukar untuk menemukan NullPointerExceptions yang berasal dari kod Kotlin, jika proyekmu dilengkapi dengan campuran Kotlin dan Java maka bagian Jawa dari proyekmu masih bisa menjadi sumber NullPointerExceptions.

Jika anda bekerja dengan file campuran Kotlin dan Java (atau mungkin anda secara khusus perlu mengenali nilai null ke dalam Kotlin-mu) maka Kotlin memasukkan satu rangkaian khusus operasi yang dirancang untuk membantu Anda dengan mengurus nilai null yang Anda temukan.

1. Panggilan Keselamatan Operator

Panggilan Keselamatan Operator ?. memberikanmu cara untuk mengatasi rujukan yang berpotensi mengandung nilai null, sambil memastikan bahwa panggilan ke referensi ini tidak akan menghasilkan NullPointerException

Apabila anda menambah pengendali Safe Call ke rujukan, rujukan itu akan diuji untuk nilai null. Jika nilainya null, maka null dikembalikan, jika tidak, rujukan objek akan digunakan seperti semula. Walaupun anda boleh mencapai kesan yang sama dengan menggunakan pernyataan if , Operator Safe Call membolehkan anda melakukan pekerjaan yang sama dengan kode yang jauh lebih sedikit Sebagai contoh, berikut ini akan mengembalika a.size hanya jika tidak null-jika tidak, maka akan mengembalikan null:

Sebagai contoh, berikut ini akan mengembalika a.size hanya jika tidak null-jika tidak, maka akan mengembalikan null:

Anda juga boleh mengikat operator Safe Call secara bersamaan:

Jika salah satu ungkapan dalam seri ini adalah null, maka hasilnya akan null, jika hasilnya tidak akan menjadi nilai yang diminta

2. Pengendali Elvis

Terkadang anda mempunyai ekspresi yang berpotensi mengandung nilai null, tetapi anda tidak ingin melepaskan NullPointerException walaupun nilai ini menjadi null

Di dalam situasi ini, anda boleh menggunakan pengendali Elvis Kotlin ?: Untuk memberikan alternatif nilai yang akan digunakan kapanpun nilai berubah menjadi null, yang juga merupakan cara yang baik untuk mencegah penyebaran nilai null dalam kodemu.

Mari kita lihat contoh dari operator Elvis yang sedang beraksi:

Disini, jika nilai di sebelah kiri operator Elvis tidak nol lalu nilai sisi kiri dikembalikan ( name ). Tetapi jika nilai di sebelah kiri operator Elvis adalah null maka ekspresi di sebelah kanan akan dikembalikan, yang dalam hal ini adalah N/A.

3. Pengendali !!

Jika anda ingin memaksa kod Kotlin-mu untuk melemparkan Java bergaya NullPointerException, anda boleh menggunakan !! pengendali. Sebagai contoh:

Di sini, kita menggunakan !! operator untuk menegaskan bahawa firstName tidak null. Selama firstName mengandungi rujukan yang sah, maka variable nombor diatur ke length dari string nya. Jika firstName tidak mengandungi rujukan yang sah, maka Kotlin akan melelar NullPointerException .

Ekspresi Lambda

Ekspresi Lambda mewakili fungsi anonim. Lambdas adalah cara terbaik untuk mengurangkan jumlah kod yang diperlukan untuk melakukan beberapa tugas yang muncul setiap saat dalam pengembangan Android-misalnya, menulis pendengar dan panggil balik.

Java 8 telah memperkenalkan ungkapan lambda bawaan, dan kini disokong di Android Nougat. Meski ciri ini bukan sesuatu yang unik untuk Kotlin, masih layak untuk dicermati. Ditambah, jika anda mengerjakan proyek yang berisi kode Kotlin dan Java, Anda dapat menggunakan lambda ekspresi di seluruh proyekmu!

Ekspresi Lambda terdiri daripada seperangkat parameter, pengendali lambda ( -> ) dan badan fungsi, yang disusun dalam format berikut:

Semasa membangun ungkapan lambda di Kotlin, anda harus mematuhi peraturan berikut:

  • Ekspresi lambda harus dikelilingi oleh kurung kurawal.

  • Jika ungkapan mengandungi parameter, maka anda perlu mendeklarasikannya sebelum -> simbol panah.

  • Jika anda bekerja dengan beberapa parameter, anda harus memisahkannya dengan koma.

  • Badan berjalan selepas tanda -> .

Manfaat utama dari lambda ekspresi adalah bahawa itu memungkinkanmu untuk menentukan fungsi anonim dan kemudian meneruskan fungsi ini segera sebagai ekspresi. Hal ini membolehkan anda untuk melakukan banyak tugas pembesaran umum secara lebih ringkas daripada yang anda dapat di Java 7 dan sebelumnya, kerana anda tidak lagi perlu menuliskan fungsi spesifikasi di kelas abstrak atau antarmuka. Pada kenyataannya, kurangnya lambdas di Java 7 dan sebelumnya adalah bagian besar dari mengapa menulis pendengar dan panggil balik secara tradisional telah sangat kikuk di Android. Pada kenyataannya, kurangnya lambdas di Java 7 dan sebelumnya adalah bagian besar dari mengapa menulis pendengar dan panggil balik secara tradisional telah sangat kikuk di Android.

Mari kita lihat contoh umum: tambah pendengar klik pada satu tombol. Di Java 7 dan sebelumnya, ini biasanya akan memerlukan kod berikut:

Namun, fungsi Kotlin lambda memungkinkanmu untuk mengatur pendengar klik menggunakan satu baris kode:

Sudah, ini jauh lebih singkat dan lebih mudah dibaca, tetapi kita boleh pergi lebih jauh-jika fungsi mengambil fungsi lain sebagai parameter yang terakhir, maka anda dapat melewati ini di luar tanda kurung:

Dan jika fungsi ini hanya mempunyai satu parameter yang itu suatu fungsi, kamu dapat sepenuhnya menghapus tanda kurung:

Fungsi Ekstensi

Serupa dengan C #, Kotlin membolehkanmu untuk menambah fungsionalitas baru ke kelas yang sudah ada yang kamu nyatakan tidak akan berubah. Jadi, jika anda berfikir kelas tidak memiliki cara yang berguna mengapa tidak menambahkannya sendiri, melalui suatu fungsi ekstensi?

Anda membuat fungsi ekstensi dengan nama kelas awalan yang anda ingin memperluasnya ke nama fungsi yang anda buat.

Sebagai contoh:

Perhatikan bahawa kata kunci $ this dalam fungsi extensi sesuai dengan contoh AppCompatActivity .toast .toast dipanggil.

Dalam contoh ini, anda hanya perlu mengimport kelas AppComptActivity dan kelas Toast ke file .kt -mu dan kemudian anda siap untuk memanggil notasi . pada contoh kelas yang diperluas.

Ketika sampai pada pengembangan Android, Anda mungkin menemukan fungsi ekstensi yang sangat berguna untuk memberikan ViewGroup ViewGroup untuk berkembang sendiri, sebagai contoh:

Jadi tanpa perlu menulis yang berikut:

Anda boleh menggunakan fungsi ekstensi-mu:

Objek Singleton

Di Jawa, menciptakan singletons biasanya sudah cukup verbose, mengharuskanmu untuk membuat kelas dengan konstruktor swasta dan kemudian membuat contoh itu sebagai suatu sifat pribadi.

Hasil akhirnya adalah biasanya sesuatu seperti ini:

Daripada menyatakan satu kelas, Kotlin membolehkan anda untuk menentukan objek tunggal, yang mana semantik sama seperti singleton, dalam satu baris kod:

Anda boleh menggunakan ini secara langsung, contohnya:

Kesimpulan

Dalam artikel ini, kami mengambil pandangan mendalam tentang Kotlin, dan melihat bagaimana anda dapat memastikan bahawa Android anda tetap tidak aman walaupun ketika itu mengandung campuran kode Java dan Kotlin dengan menggunakan berbagai operator khusus. Kita juga melihat-lihat bagaimana anda boleh menggunakan ungkapan lambda untuk menyederhanakan beberapa tugas-tugas pembangunan umum di Android, dan bagaimana untuk menambah baru fungsionalitas ke kelas yang ada

Dikombinasikan dengan apa yang kami pelajari di Bahagian 1: Java vs. Kotlin dan Bahagian 2: Persiapan , anda kini mempunyai semua yang anda perlukan untuk mulai membuat aplikasi Android yang efektif menggunakan bahasa pemrograman Kotlin.

Bersenang-senanglah dengan bahasa Kotlin, dan mengapa tidak menyemak beberapa program pengajaran dan tutorial lain Android kita?

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.