Halo semuanya. Untuk mengantisipasi dimulainya kursus dasar tentang pengembangan Android , kami terus membagikan materi yang bermanfaat.
Sebelum membaca tip-tip ini, Anda harus membaca dokumentasi Kotlin dan mempelajari bahasanya sendiri di try.kotlinlang.org
. Karena tips ini ditujukan khusus untuk menggunakan Kotlin dalam konteks pengembangan Android, Anda juga harus memiliki pengalaman dengan Android SDK. Dianjurkan untuk membiasakan diri dengan plugin Kotlin dan penggunaan Kotlin dengan Android Studio dari JetBrains (pembuat Kotlin)
Baca bagian pertamaDeskripsi benda
Deskripsi objek hanya memungkinkan singleton, yang tidak dapat disalahartikan sebagai kelas dengan kemampuan untuk membuat instance. Oleh karena itu, Anda tidak perlu menyimpan singlet sebagai variabel dari kelas statis atau dalam kelas Aplikasi.
Misalnya, jika saya memiliki kelas utilitas dengan metode statis yang terkait dengan utas, dan saya ingin mengakses seluruh aplikasi, Anda dapat melakukan ini:
package com.myapps.example.util import android.os.Handler import android.os.Looper
ThreadUtil dapat dipanggil nanti dengan cara yang sama seperti ketika memanggil metode kelas statis:
ThreadUtil.onMainThread(runnable)
Ini berarti bahwa Anda tidak perlu lagi mensimulasikan perilaku kelas statis menggunakan konstruktor pribadi dan Anda tidak perlu mencari tahu di mana instance disimpan. Objek, pada kenyataannya, adalah elemen asli dari bahasa. Dengan prinsip yang sama, kami membuat objek, bukan kelas dalam:
iewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageScrollStateChanged(state: Int) {} override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {} override fun onPageSelected(position: Int) { bindUser(position) } });
Keduanya pada dasarnya melakukan hal yang sama - mereka membuat satu instance dari kelas sebagai objek yang dideklarasikan.
Benda Pendukung
Sepintas, Kotlin tidak memiliki variabel dan metode statis. Tidak ada konsep seperti itu dalam bahasa ini, tetapi ada konsep objek tambahan. Mereka adalah objek tunggal dalam kelas yang berisi metode dan variabel yang dapat Anda akses dengan cara statis. Objek pendamping memungkinkan untuk konstanta dan metode tertentu, mirip dengan kelas statis di Jawa. Dengan itu, Anda dapat mengikuti pola cuplikan
Instance baru .
Lihatlah objek pendamping dalam bentuknya yang paling sederhana:
class User { companion object { const val DEFAULT_USER_AGE = 30 } }
Di Android, kami biasanya menggunakan metode dan variabel statis untuk membuat pabrik statis untuk fragmen. Sebagai contoh:
class ViewUserActivity : AppCompatActivity() { companion object { const val KEY_USER = "user" fun intent(context: Context, user: User): Intent { val intent = Intent(context, ViewUserActivity::class.java) intent.putExtra(KEY_USER, user) return intent } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_cooking) val user = intent.getParcelableExtra<User>(KEY_USER)
Membuat
Intent mirip dengan tindakan serupa di Jawa:
val intent = ViewUserActivity.intent(context, user) startActivity(intent)
Pola ini baik karena mengurangi kemungkinan
Intent atau
Fragment tidak memiliki data yang diperlukan untuk menampilkan konten yang ditentukan pengguna atau konten lainnya. Objek pendamping adalah cara untuk melestarikan formulir akses statis di Kotlin, dan harus digunakan untuk mengkompensasi kurangnya kelas.
Konstanta global
Kotlin memungkinkan Anda untuk mendefinisikan konstanta yang terlihat di satu tempat aplikasi (jika ada). Tetapi ruang lingkup konstanta harus diminimalisasi sebanyak mungkin. Dan dalam situasi di mana Anda ingin suatu kawasan menjadi global, Kotlin memiliki cara hebat untuk melakukan ini tanpa harus menggunakan kelas konstan. Sesuatu seperti:
package com.myapps.example import android.support.annotation.StringDef
Kemudian mereka dapat digunakan sebagai konstanta di mana saja dalam proyek:
import com.savvyapps.example.PRESENTATION_MODE_EDITING val currentPresentationMode = PRESENTATION_MODE_EDITING
Konstanta dalam proyek harus sekecil mungkin untuk mengurangi kompleksitasnya. Jika Anda memiliki nilai yang hanya berlaku untuk kelas kustom, yang terbaik adalah meletakkannya di objek pembantu.
Ekstensi
Ekstensi berguna karena memungkinkan Anda untuk menambahkan fungsionalitas kelas tanpa mewarisinya. Misalnya, bagaimana cara menambahkan beberapa metode ke
hideKeyboard()
seperti
hideKeyboard()
? Menggunakan ekstensi, Anda dapat dengan mudah melakukan ini:
fun Activity.hideKeyboard(): Boolean { val view = currentFocus view?.let { val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager return inputMethodManager.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_NOT_ALWAYS) } return false }
Ekstensi berguna karena:
- Membantu meningkatkan keterbacaan kode
- menghilangkan kebutuhan untuk membuat kelas dan metode utilitas.
Anda dapat melangkah lebih jauh dan meningkatkan arsitektur kode. Bayangkan Anda memiliki model dasar, misalnya,
Artikel , yang dianggap sebagai kelas data yang diekstraksi dari sumber oleh API:
class Article(val title: String, val numberOfViews: Int, val topic: String)
Penting untuk menentukan relevansi Artikel untuk pengguna berdasarkan beberapa rumus. Haruskah Anda meletakkannya langsung di kelas Artikel? Dan jika model hanya boleh berisi data dari API, tidak lebih, ekstensi dapat digunakan lagi:
fun Article.isArticleRelevant(user: User): Boolean { return user.favoriteTopics.contains(topic) }
Ini saat ini merupakan cara mudah untuk memeriksa keberadaan topik Artikel dalam daftar topik favorit Anda.
Logika ini dapat bervariasi tergantung di mana Anda ingin menguji ini dan atribut perilaku pengguna lainnya. Karena logika ini didukung sampai batas tertentu terlepas dari model
Artikel , Anda dapat mengubahnya tergantung pada tujuan, metode dan kemampuannya untuk diubah.