Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

Java 8 untuk Android: Cleaner Code Dengan Lambda Expressions

by
Read Time:15 minsLanguages:
This post is part of a series called Java 8 for Android Development.
Java 8 for Android Development: Default and Static Methods

Indonesian (Bahasa Indonesia) translation by Ilham Saputra (you can also view the original English article)

Lambda expressions dapat membantu Anda menghapus kode boilerplate dari proyek Anda dan memproses data dalam jumlah besar dengan mudah. Lihat bagaimana dengan tampilan mendalam ini pada fitur-fitur Java 8 yang dapat Anda mulai gunakan dalam proyek Android Anda hari ini.

Java 8 untuk Android

Java 8, yang memulai debutnya kembali pada Maret 2014, merupakan langkah maju yang besar untuk bahasa pemrograman, memperkenalkan daftar fitur yang menjanjikan untuk membuat coding di Java lebih mudah dan lebih ringkas daripada sebelumnya.

Sayangnya, pengembang Android tidak akan merasakan manfaat fitur ini untuk sementara waktu, karena Google bereksperimen dengan membawa Java 8 ke platform Android melalui Jack (Java Android Compiler Kit) sebelum menghentikan Jack yang mendukung Java 8 secara native di Android Studio.

Sekarang, dengan dirilisnya Android Studio 3.0, akhirnya kami memiliki versi toolchain Android yang memiliki dukungan bawaan untuk beberapa fitur paling penting dari Java 8.

Dalam seri ini, saya akan menunjukkan kepada Anda cara menghapus satu ton kode boilerplate dari proyek Anda, memproses data dalam jumlah besar dengan mudah, dan bahkan merangkul style yang lebih fungsional dalam program Java Anda dengan Java 8. Kami akan mengambil pandangan mendalam pada fitur-fitur Java 8 yang dapat Anda mulai gunakan hari ini.

Pada saat Anda menyelesaikan rangkaian ini, Anda akan siap untuk menggunakan semua fitur Java 8 berikut dalam proyek Android Anda:

  • lambda expressions
  • method references
  • default methods
  • static interface methods
  • type annotations
  • repeating annotations
  • functional interfaces
  • the Stream API

Dalam posting pertama ini, kami akan melihat fitur yang menghasilkan buzz paling banyak ketika Java 8 pertama kali diluncurkan, dan itu memiliki potensi untuk membuat perbedaan paling besar bagi pengembang Android: lambda expressions.

Mempersiapkan Lingkungan Pengembangan Anda

Sebelum Anda dapat mulai menggunakan apa pun fitur-fitur pada Java 8, Anda perlu memastikan bahwa lingkungan pengembangan Anda sudah diatur untuk mendukung versi Java ini.

Jika Anda belum menginstal Java 8, Anda harus mengunduh JDK8 terbaru dan memperbarui jalur JDK Android Studio sehingga mengarah ke paket JDK8:

  • Jalankan Android Studio.
  • Pilih File > Project Structure... dari toolbar Android Studio.
  • Perbarui bidang JDK Location sehingga mengarah ke paket JDK8 yang baru Anda unduh.

Jika Anda tidak yakin versi Java apa yang telah Anda instal, Anda dapat memeriksa dengan membuka jendela Terminal (jika Anda adalah pengguna Mac), atau Command Prompt (jika Anda menggunakan Windows) dan kemudian menjalankan yang berikut ini perintah:

Jika mengembalikan build 1.8 atau lebih tinggi, Anda bisa jalan!

Anda juga harus memiliki Android Studio 3.0 Preview 1 atau yang lebih tinggi, meskipun untuk mengurangi peluang Anda menghadapi bug dan perilaku aneh lainnya, disarankan agar Anda memasang versi terbaru Android Studio 3.0—apakah itu beta atau pratinjau atau, idealnya, versi stabil Android Studio 3.0 (yang belum tersedia pada saat penulisan).

Selanjutnya, Anda perlu melakukan beberapa perubahan pada file build.gradle proyek Anda. Biasanya, Anda hanya perlu menambahkan beberapa baris kode yang menetapkan bahwa proyek ini harus menghasilkan Java 8 bytecode. Namun, jika sebelumnya Anda telah bereksperimen dengan fitur Java 8 menggunakan kompiler Jack atau proyek Retrolambda yang populer, maka Anda harus menonaktifkan alat-alat ini sebelum proyek Anda dapat menggunakan dukungan Java 8 yang baru dan ditingkatkan yang disediakan oleh toolchain bawaan Android.

Di bagian selanjutnya, saya akan menunjukkan kepada Anda cara mengaktifkan dukungan Java 8, dan cara menonaktifkan Retrolambda dan Jack, jika diperlukan.

Menambahkan Dukungan Java 8 ke Proyek Baru

Dengan asumsi bahwa Anda sebelumnya tidak mengaktifkan Jack atau menambahkan Retrolambda sebagai ketergantungan proyek, langkah pertama adalah membuka file build.gradle tingkat proyek Anda dan memastikan bahwa Anda menggunakan versi 3.0.0-alpha1 (atau lebih tinggi) dari Gradle untuk plugin Android:

Selanjutnya, buka setiap file build.gradle module-level di mana Anda ingin menggunakan fitur-fitur Java 8, dan atur tingkat bahasa dari kode sumber dan versi Java bytecode yang dihasilkan ke JavaVersion.VERSION_1_8:

Jika Anda memigrasi Dari Jack

Kompilator Jack mungkin tidak lagi digunakan, tetapi selama diaktifkan, proyek Anda akan menggunakan dukungan Java 8 yang disediakan oleh Jack, daripada dukungan yang disediakan oleh toolchain bawaan Android.

Menggunakan alat yang usang tidak pernah merupakan ide yang bagus, tetapi ada beberapa alasan tambahan mengapa Anda harus bermigrasi dari kompilator Jack, jika Anda belum melakukannya.

Pertama, Jack dapat mendukung subset fitur Java 8, tetapi tidak seperti toolchain default, ia tidak mendukung pustaka pihak ketiga yang menggunakan fitur ini, jadi dengan menggunakan Jack Anda segera membatasi pilihan Anda ketika datang ke pustaka pihak ketiga.

Kedua, kompiler Jack mengambil kode Java dan mengubahnya langsung menjadi dex, tanpa menghasilkan bytecode perantara. Selama Jack diaktifkan, Anda tidak akan dapat menggunakan salah satu alat yang mengandalkan keluaran antara ini, seperti prosesor anotasi dan analisis bytecode.

Untuk menonaktifkan kompilator Jack, buka file build.gradle tingkat modul Anda dan hapus bagian jackOptions, tetapi pastikan Anda membiarkan blok compileOptions utuh:

Jika Anda Memigrasi Dari Retrolambda

Mirip dengan Jack, Retrolambda tidak mendukung pustaka pihak ketiga yang menggunakan fitur bahasa Java 8. Jika proyek Anda diatur untuk menggunakan plugin Retrolambda, maka Anda harus menghapus plugin ini sehingga proyek Anda dapat kembali ke toolchain default.

Buka file build.gradle tingkat proyek Anda dan hapus Retrolambda sebagai dependensi proyek:

Kemudian, hapus plugin Retrolambda dari setiap file build.gradle level-modul Anda:

Menguji Dukungan Java 8 Anda

Cara termudah untuk memverifikasi bahwa proyek Anda sekarang dapat mendukung Java 8 adalah menulis ekspresi lambda cepat dan melihat apakah proyek Anda masih dikompilasi.

Tambahkan tombol ke antarmuka pengguna Anda (atau gunakan tombol yang sudah ada) lalu terapkan onClickListener untuk tombol ini, menggunakan ekspresi lambda. Jangan khawatir jika kode berikut tidak terlalu masuk akal sekarang—pada akhir artikel ini!

Test your lambda expression by triggering the Java 8 toastTest your lambda expression by triggering the Java 8 toastTest your lambda expression by triggering the Java 8 toast

Periksa apakah proyek Anda masih dikompilasi, baik dengan memilih Sync dari banner yang muncul, atau dengan memilih Tools > Android > Sync Project with Gradle Files dari toolbar Android Studio.

Jika Android Studio tidak membuang kesalahan apa pun, Anda siap untuk mulai menggunakan semua fitur yang kami cantumkan di awal artikel ini, termasuk lambda expressions!

Mengapa Lambda Expressions Sangat Penting?

Lambda expressions merupakan fitur baru terbesar di Java 8, dan dapat memiliki dampak besar pada jumlah kode boilerplate yang perlu Anda tulis saat membuat hampir semua aplikasi Android.

Pada dasarnya, ekspresi lambda mewakili fungsi yang bukan milik kelas apa pun, dan Anda dapat berkeliling dengan mudah lalu mengeksekusi sesuai permintaan.

Fitur ini menghilangkan kekesalan yang sudah lama dialami oleh banyak pengembang Android dengan Java: sebagai bahasa berorientasi objek, melewatkan blok kode selalu terasa lebih sulit daripada seharusnya. Misalnya, jika Anda ingin membuat utas baru dan meneruskan beberapa kode ke utas itu, Anda biasanya harus melakukan instantiate utas dengan implementasi anonim antarmuka Runnable—itu banyak pekerjaan yang hanya untuk melewatkan beberapa kode! Dengan menyediakan cara mudah untuk menyampaikan fungsi ke suatu metode, lambda expression memiliki potensi untuk menyederhanakan beberapa tugas paling umum yang akan Anda lakukan sebagai pengembang Android.

Lambda expression juga akan menjadi tambahan yang baik untuk semua pengembang Java yang ingin mengambil pendekatan yang lebih fungsional untuk pemrograman mereka. Sebelum Java 8, pengkodean dalam gaya fungsional pasti akan mengharuskan Anda untuk menulis banyak kode boilerplate, tetapi sekarang Anda dapat meneruskan fungsi menggunakan lambda expression, menulis kode Java Anda dengan cara yang kurang berorientasi objek tidak harus melibatkan menulis satu ton kelas anonim.

Bagaimana Saya Membuat Lambda Expression?

Anda membuat lambda expression menggunakan sintaks berikut:

Operator panah cukup jelas, tetapi aturan untuk bagaimana Anda harus menyusun argumen dan ekspresi lambda dapat bervariasi bergantung pada apa yang Anda coba capai, jadi mari kita jelajahi kedua elemen ini secara lebih detail.

Argumen

Argumennya adalah satu atau lebih parameter, yang hampir selalu tertutup dalam tanda kurung. Meskipun ekspresi lambda Anda tidak memiliki parameter apa pun, Anda masih perlu memberikan tanda kurung kosong, misalnya:

Pengecualian untuk aturan ini adalah ketika metode Anda memiliki parameter tunggal dengan jenis yang disimpulkan, dalam hal ini Anda dapat menghilangkan tanda kurung:

Anda dapat menggunakan beberapa parameter dalam argumen Anda, dengan memisahkan setiap parameter dengan koma:

Ketik inferensi dimungkinkan dalam lambdas, sehingga Anda biasanya dapat menghilangkan tipe data dari argumen Anda. Namun, jika compiler tidak dapat menyimpulkan tipe data, maka Anda harus menambahkan jenis di depan parameter Anda:

Expression Body

Expression body adalah kode yang ingin Anda eksekusi, yang dapat berupa ekspresi tunggal atau beberapa baris kode. Jika Anda ingin menjalankan beberapa baris, Anda harus membuat blok pernyataan dengan mengelompokkan bagian kode ini dengan tanda kurung kurawal:

Jika ekspresi Anda mengembalikan nilai, maka harus dikembalikan dengan pernyataan kembali, misalnya:

Menggunakan Lambda Expressions di Aplikasi Android Anda

Sekarang kami memiliki ikhtisar tentang berbagai cara Anda dapat menyusun ekspresi lambda, mari kita lihat beberapa skenario paling umum di mana Anda dapat menggunakan ekspresi lambda dalam karya pengembangan Android Anda.

Lambdas untuk Event Handling

Aplikasi Android khas Anda harus mampu merespon berbagai macam peristiwa masukan pengguna, dan ekspresi lambda dapat membuat acara ini lebih mudah ditangani.

Dalam kode berikut, kami menggunakan kelas anonim untuk membuat turunan dari onClickListener dengan mengesampingkan metode onClick. Kemungkinannya, Anda telah menulis kode semacam ini berkali-kali.

Dengan menulis ulang kode di atas dengan ekspresi lambda, kita dapat menghapus semua hal berikut:

  • Instansiasi kelas: new View.OnClickListener()
  • pengubah akses, nama metode, dan jenis: public void onClick(View view)
  • dan jenis parameter, sehingga Anda tidak perlu menulis View view

Ini berarti bahwa kita dapat menerapkan persis fungsi yang sama, menggunakan satu baris:

Lambdas untuk Multithreading

Multithreading adalah skenario umum lainnya di mana ekspresi lambda dapat membantu Anda menulis kode yang lebih bersih. Secara default, Android memiliki satu antarmuka UI (antarmuka pengguna) yang bertanggung jawab untuk menangani semua interaksi pengguna, mengirim acara ke widget UI yang sesuai, dan memodifikasi antarmuka pengguna. Segera setelah Anda memblokir utas UI ini dengan operasi yang lama berjalan atau intensif, aplikasi Anda akan menjadi tidak responsif, dan bahkan dapat memicu dialog Android ANR (Aplication Not Responding). Jadi membuat untaian tambahan dan menetapkan kode untuk dijalankan pada thread tersebut sering menjadi bagian penting dari pengembangan Android.

Sebelum Java 8, menetapkan kode untuk dijalankan pada thread tambahan mengharuskan Anda membuat kelas anonim yang mengimplementasikan antarmuka Runnable:

Alternatifnya, Anda dapat memberi contoh utas baru dengan implementasi anonim antarmuka Runnable:

Mengganti kelas anonim ini dengan ekspresi lambda dapat membuat tugas yang sering dilakukan ini jauh lebih ringkas:

Terakhir, jika Anda menggunakan pustaka RxJava atau RxAndroid, Anda dapat menggunakan ekspresi lambda untuk membantu Anda membuat yang dapat diamati.

Di sini, kami membuat Observable sederhana yang memancarkan string hello world untuk semua Observers:

Menggunakan ekspresi lambda memungkinkan Anda mengganti semua kode Action1 dengan satu baris:

Menggunakan Lambda Expressions dalam Kode Kehidupan-Nyata Anda

Setelah membaca semua teori di balik fitur baru, tantangan berikutnya adalah membiasakan benar-benar menggunakan fitur baru ini. Hal ini bisa sangat sulit dengan sesuatu seperti lambdas, yang dirancang untuk digunakan sebagai pengganti kode boilerplate yang sudah dikenal, karena selalu ada godaan untuk hanya mundur dari apa yang Anda ketahui.

Android Studio memiliki beberapa fitur yang dapat membantu memberi Anda dorongan terakhir untuk mengganti kode familiar-but-clunky dengan lambda expression baru yang mengkilap.

Fitur pertama adalah menu aksi intent Android Studio, yang dapat mengonversi otomatis kelas anonim apa pun yang kompatibel ke dalam persamaan lambda yang setara. Ini sempurna jika Anda tidak yakin tentang cara menulis potongan kode tertentu dalam format lambda: cukup tulis seperti biasa, lalu gunakan fitur konversi otomatis menu tindakan.

Untuk mengonversi otomatis kelas anonim menjadi ekspresi lambda:

  • Arahkan kursor Anda ke atas kelas anonim, dan Android Studio akan menampilkan keterangan alat yang memberi tahu Anda bahwa itu dapat mengonversi bagian kode ini menjadi lambda expression.
  • Tekan tombol Alt/Option-Enter milik Mac Anda, atau gunakan pintasan Alt-Enter jika Anda pengguna Windows atau Linux.
  • Pilih opsi Replace with lambda dari menu konteks.

Select Replace with lambda from the context menu that appearsSelect Replace with lambda from the context menu that appearsSelect Replace with lambda from the context menu that appears

Atau, Anda dapat menggunakan alat Inspeksi Android Studio untuk menandai setiap kelas anonim yang berpotensi Anda ganti dengan ekspresi lambda, di seluruh proyek Anda. Selanjutnya, Anda dapat menulis ulang setiap kelas anonim secara manual atau membiarkan fitur konversi-otomatis Android Studio menunjukkan bagaimana kinerjanya.

Untuk menyorot setiap kelas anonim yang Android Studio berpotensi mengganti dengan ekspresi lambda:

  • Pilih Analyze > Run Inspection by Name dari toolbar Android Studio.
  • Di popup yang muncul, mulai ketik Anonymous type can be replaced with lambda, dan kemudian pilih opsi ini ketika muncul di menu tarik-turun.

Select Anonymous type can be replaced with lambda from the Enter inspection name popupSelect Anonymous type can be replaced with lambda from the Enter inspection name popupSelect Anonymous type can be replaced with lambda from the Enter inspection name popup

  • Di jendela berikutnya, pilih Whole project untuk menandai setiap kelas anonim di proyek Anda. Sebagai alternatif, Anda dapat menentukan modul atau file individual tempat Android Studio harus menjalankan pemeriksaan ini.
  • Klik OK.
  • Pilih Analyze > Inspect Code dari toolbar Android Studio.

Panel Hasil Inspeksi sekarang harus muncul dan menampilkan daftar semua kelas anonim yang dapat Anda ganti dengan ekspresi lambda. Untuk melihat lebih dekat pada kelas anonim, cukup double-click kelas tersebut di jendela Inspection Results, dan Android Studio akan membuka file dan membawa Anda ke baris yang tepat yang berisi kelas anonim tertentu ini.

Untuk mengganti kelas anonim yang dipilih saat ini dengan ekspresi lambda, beri Replace with lambda tombol klik.

In the Inspection Results window select the Replace with lambda button In the Inspection Results window select the Replace with lambda button In the Inspection Results window select the Replace with lambda button

Jika Android Studio tidak membuka jendela Hasil Inspeksi secara otomatis, Anda dapat meluncurkannya secara manual dengan memilih View > Tool Windows > Inspection Results dari toolbar Android Studio. Jika Hasil Inspeksi tidak muncul di sub-menu Tool Windows, maka Anda mungkin perlu memilih Analyze > Inspect Code… dari toolbar Android Studio terlebih dahulu.

Pengujian Lambda Expression

Terlepas dari banyak manfaat yang ditawarkan lambda expression, ada satu kelemahan utama yang harus Anda ketahui sebelum menambahkannya ke kode Anda. Karena lambdas tidak memiliki nama, Anda tidak dapat memanggilnya langsung dari kode uji Anda, jadi menambahkan sejumlah besar lambdas ke proyek Anda dapat membuatnya lebih sulit untuk diuji.

Idealnya, lambda expression Anda harus terlalu sederhana untuk dipecahkan, sehingga tidak dapat menguji unit mereka seharusnya tidak terlalu besar masalah. Namun, jika Anda perlu menguji lambda, maka Anda selalu dapat memperlakukannya seperti metode pribadi dan unit menguji hasilnya, bukan lambda itu sendiri. Sebagai alternatif, Anda dapat merombak lambda expression ke dalam metodenya sendiri, sehingga Anda dapat merujuknya secara langsung dan oleh karena itu mengujinya seperti biasa.

Kesimpulan

Dalam posting pertama ini di fitur bahasa Jawa 8, kami melihat cara mengatur proyek Android Anda untuk mendukung Java 8, dan cara mengurangi kode boilerplate dengan mengganti kelas anonim dengan ekspresi lambda.

Di pos berikutnya, saya akan menunjukkan kepada Anda cara memangkas lebih banyak kode dari proyek Android Anda dengan menggabungkan ekspresi lambda dengan referensi metode, dan bagaimana Anda dapat meningkatkan antarmuka dengan metode antarmuka default dan statis.

Sementara itu, lihat beberapa posting kami yang lain tentang pengembangan aplikasi Android!

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.