Gaya versus pengubah

Gaya berbeda dari pengubah menurut desain. Gaya tidak menggantikan pengubah; sebagai gantinya, kedua sistem ini berdampingan dengan sasaran yang berbeda. Secara internal, Gaya adalah pengubah. Anda dapat melakukan semua yang dapat dilakukan Gaya dengan pengubah, tetapi tidak semua fungsi dalam pengubah tersedia di Gaya.

Berikut adalah perbandingan antara Gaya dan pengubah:

Fitur Pengubah Gaya
Sasaran Utama Menentukan perilaku, semantik, dan tata letak yang kompleks. Pengubah memanipulasi setiap elemen secara langsung untuk composable tertentu dan tidak mengalir dari tema. Tentukan tampilan visual, ukuran masing-masing item, dan properti yang dapat diubah tema. Gaya beroperasi di tingkat tema dan dapat ditimpa di tingkat komponen. Modifier ini mengalir ke bawah dan menerapkan gaya di berbagai composable.
Logika Aditif - pengubah digabungkan untuk membentuk hasil baru. Dapat ditimpa - properti terakhir yang ditetapkan dalam Gaya akan menang. Gaya bertindak sebagai satu lapisan properti yang saling menggantikan berdasarkan hierarki prioritas yang ditentukan.
Tema Sulit untuk diangkat ke dalam tema, biasanya digunakan satu per satu. Menurut desainnya, Gaya dapat diberi tema (dapat mengakses CompositionLocal) dan dapat ditentukan satu kali serta digunakan di seluruh komponen.
Performa Update sering kali memerlukan ketiga fase Compose: komposisi, tata letak, dan gambar. Untuk mendapatkan performa animasi pengubah yang baik, Anda sering kali perlu menulis versi berbasis lambda. Melewati fase komposisi, hanya aktif dalam fase tata letak dan gambar, sehingga mengurangi rekomposisi. Memerlukan alokasi objek yang lebih sedikit.
Animasi Memerlukan penggunaan primitif animasi terpisah seperti animate*AsState Menampilkan API animate { } bawaan yang menangani beberapa animasi untuk Anda.

Batasan pengubah

Pengubah memiliki banyak manfaat dalam lanskap Compose saat ini. Namun, Gaya mengatasi beberapa batasan pengubah, yang dijelaskan dalam daftar berikut:

  • Pengubah biasanya dibuat dalam fase Komposisi. Pembaruan dapat memaksakan penayangan ulang Komposisi, Tata Letak, dan Gambar secara penuh, bahkan untuk perubahan visual kecil seperti warna, kecuali jika Anda membuat pengubah berbasis lambda.
  • Pengubah kondisional memerlukan logika if-else yang mengganggu dalam rantai lancar. Menganimasikannya memerlukan boilerplate status manual dan tidak memiliki mekanisme "animasi otomatis" berperforma tinggi.
  • Pengubah ditumpuk, bukan diganti. Anda tidak dapat mengganti batas default komponen; Anda hanya dapat menggambar batas kedua di atasnya.
  • Pengubah sulit diabstraksi menjadi tema global. Oleh karena itu, tema biasanya menyimpan nilai mentah, bukan konfigurasi pengubah yang dapat digunakan kembali.

Batasan Gaya

Meskipun Gaya dapat mengisi beberapa celah yang dimiliki pengubah, Gaya juga memiliki beberapa batasan, yang menunjukkan bahwa Gaya tidak dapat sepenuhnya menggantikan pengubah:

  • Gaya adalah Pengubah khusus. Meskipun pengubah dapat melakukan apa pun yang dapat dilakukan Gaya, hal sebaliknya tidak berlaku. Oleh karena itu, Gaya dapat melengkapi, tetapi tidak dapat menggantikan pengubah.
  • Gaya terbatas pada konfigurasi visual (latar belakang, padding, batas). Mereka tidak dapat menangani perilaku seperti logika klik, deteksi gestur, atau semantik aksesibilitas.
  • Menyelesaikan Gaya ke dalam status akhirnya lebih mahal daripada menerapkan satu pengubah. Sistem harus membuat struktur data yang berisi semua kemungkinan nilai properti, dan pencarian properti yang diwariskan semakin memperumit hal ini.

Kapan harus menggunakan Gaya daripada pengubah

Meskipun pilihan untuk menggunakan Gaya sangat bergantung pada aplikasi dan kasus penggunaan Anda, panduan berikut membantu menentukan kapan lebih baik menggunakan gaya daripada pengubah:

  • Untuk mencapai konsistensi di seluruh tema: Gaya didesain agar dapat "diangkat" ke dalam tema global. Daripada meneruskan Pengubah berulang ke setiap komponen, Anda dapat menentukan satu Gaya dalam tema untuk menciptakan tampilan yang seragam di seluruh aplikasi.
  • Saat melakukan animasi yang sering: Gaya dievaluasi selama fase Tata Letak dan Menggambar, sehingga properti seperti warna atau skala dapat dianimasikan sambil melewati fase Komposisi sepenuhnya. Hal ini secara signifikan mengurangi overhead performa. Gunakan Gaya, bukan pengubah, saat melakukan animasi properti visual.
  • Mengganti vs. menumpuk: Gunakan Gaya saat Anda perlu mengganti properti default. Pengubah bersifat aditif (menambahkan batas akan menumpuk batas kedua), sedangkan Gaya menggunakan logika "penulisan terakhir menang", sehingga memudahkan penggantian latar belakang atau padding tanpa kekacauan visual.
  • Menyesuaikan komponen Material: Jika komponen Material menyediakan parameter Gaya, pendekatan ini disarankan untuk penyesuaian. Gaya ini memungkinkan Anda mengakses dan mengubah properti tertentu dalam struktur internal composable yang mungkin tidak dapat diakses.