Apakah ada cara untuk merangkai beberapa memungkinkan untuk beberapa variabel nullable di kotlin?
fun example(first: String?, second: String?) {
first?.let {
second?.let {
// Do something just if both are != null
}
}
}
Maksud saya, sesuatu seperti ini:
fun example(first: String?, second: String?) {
first?.let && second?.let {
// Do something just if both are != null
}
}
Jawaban:
Jika tertarik, berikut adalah dua fungsi saya untuk menyelesaikan ini.
Pemakaian:
sumber
Berikut adalah beberapa variasi, tergantung pada gaya apa yang ingin Anda gunakan, jika Anda memiliki semua jenis yang sama atau berbeda, dan jika daftar jumlah item tidak diketahui ...
Jenis campuran, semua tidak boleh null untuk menghitung nilai baru
Untuk tipe campuran, Anda dapat membuat serangkaian fungsi untuk setiap jumlah parameter yang mungkin terlihat konyol, tetapi berfungsi dengan baik untuk tipe campuran:
Contoh penggunaan:
Jalankan blok kode ketika daftar tidak memiliki item nol
Dua ragam di sini, pertama untuk mengeksekusi blok kode ketika daftar memiliki semua item bukan nol, dan kedua untuk melakukan hal yang sama ketika daftar memiliki setidaknya satu item bukan nol. Kedua kasus meneruskan daftar item bukan null ke blok kode:
Fungsi:
Contoh penggunaan:
Sedikit perubahan agar fungsi menerima daftar item dan melakukan operasi yang sama:
Contoh penggunaan:
Variasi ini dapat diubah agar memiliki nilai pengembalian seperti
let()
.Gunakan item non-null pertama (Coalesce)
Mirip dengan fungsi SQL Coalesce, kembalikan item bukan null pertama. Dua jenis fungsi:
Contoh penggunaan:
Variasi lainnya
... Ada variasi lain, tetapi dengan lebih banyak spesifikasi, ini dapat dipersempit.
sumber
whenAllNotNull
dengan destrukturisasi seperti:listOf(a, b, c).whenAllNotNull { (d, e, f) -> println("$d $e $f")
.Anda dapat menulis fungsi Anda sendiri untuk itu:
sumber
Anda dapat membuat
arrayIfNoNulls
fungsi:Anda kemudian dapat menggunakannya untuk sejumlah nilai variabel dengan
let
:Jika Anda sudah memiliki array, Anda dapat membuat
takeIfNoNulls
fungsi (terinspirasi olehtakeIf
danrequireNoNulls
):Contoh:
sumber
Untuk kasus hanya memeriksa dua nilai dan juga tidak harus bekerja dengan daftar:
Contoh penggunaan:
sumber
Sebenarnya, Anda bisa melakukan ini begitu saja, Anda tahu? ;)
Tidak ada yang salah dalam menggunakan pemeriksaan null normal di Kotlin.
Dan itu jauh lebih mudah dibaca oleh semua orang yang akan melihat kode Anda.
sumber
let
pintas untuk melakukan pemeriksaan iniSaya sebenarnya lebih suka menyelesaikannya menggunakan fungsi helper berikut:
Dan inilah cara Anda menggunakannya:
sumber
Saya menyelesaikan ini dengan membuat beberapa fungsi yang kurang lebih mereplikasi perilaku with, tetapi mengambil beberapa parameter dan hanya memanggil fungsi semua parameter yang bukan null.
Kemudian saya menggunakannya seperti ini:
Masalah yang jelas dengan ini adalah bahwa saya harus menentukan fungsi untuk setiap kasus (jumlah variabel) yang saya butuhkan, tetapi setidaknya saya pikir kodenya terlihat bersih saat menggunakannya.
sumber
Anda juga bisa melakukan ini
sumber
Saya telah meningkatkan sedikit jawaban yang diharapkan:
ini memungkinkan ini:
sumber
Untuk sejumlah nilai yang akan diperiksa, Anda dapat menggunakan ini:
Dan itu akan digunakan seperti ini:
elemen yang dikirim ke blok menggunakan wildcard, Anda perlu memeriksa jenis jika Anda ingin mengakses nilai, jika Anda hanya perlu menggunakan satu jenis, Anda dapat mengubah ini menjadi generik
sumber