Java menduduki kedudukan yang dominan dalam bahasa pengaturcaraan, jadi saya telah melihat kesilapan yang sama ketika menggunakan pemaju Java ketika menggunakan Kotlin. Jangan salahkan saya.
Artikel ini akan memberitahu anda bau bau yang sering saya lihat dan bagaimana untuk merealisasikannya ideal dalam "Kotlin".
bahagian pertama siri ini akan meliputi:
Gunakan kelas data
- menggunakan keselamatan kosong
Di bawah keadaan lalai, bukan -muttering -
- Gunakan kelas data
Tema ini tidak lama lagi akan hilang, kerana semakin banyak pemaju Java juga mempunyai pengalaman menggunakan rekod. Walau bagaimanapun, masih terdapat beberapa perbezaan antara rekod Java dan kelas data Kotlin.
atau sebagai rekod:
Kaedah Kotlin Kotlin:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters, setters, ...
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
anda mungkin perlu memahami beberapa perbezaan antara rekod Java dan kelas data Kotlin.
public record Person(
String name,
int age
) {
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Rekod Java dan kategori data Kotlin adalah pembawa data yang tidak berubah.
Di Java, medan ini tersembunyi di akhir, yang tidak dapat diubah suai selepas struktur.
data class Person(val name: String, var age: Int)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Satu lagi perbezaan ialah jenis rekod Java adalah muktamad dan dimeteraikan, yang bermaksud bahawa mereka tidak dapat dilanjutkan, dan di Kotlin, anda boleh mengembangkan kelas data.
Di Kotlin, anda juga boleh menutupi kaedah hashcode, dan toString, yang mustahil di Jawa. -
Kotlin menyediakan kaedah salinan dengan tanah, yang tidak terdapat di Java. -
- <> Beberapa contoh:
-
salin objek di java -
Kotlin:
atau menguraikan pernyataan di Java:
Kotlin:
Person p2 = new Person(p1.getName(), p1.getAge());
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Rujukan <参>
val p2 = p1.copy(age = 42)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
kelas data Kotlin
String name = p1.getName();
int age = p1.getAge();
Salin selepas log masuk
Salin selepas log masuk
baeldung: kelas data kotlin
val (name, age) = p1
println(name) // "John"
println(age) // 42
Salin selepas log masuk
Salin selepas log masuk
menggunakan keselamatan kosong <利>
Pada pendapat saya, keselamatan udara di Kotlin adalah salah satu fungsi yang paling kuat. Ini adalah fungsi yang mengubah peraturan permainan, yang dapat menjimatkan banyak masa dan masalah. Di Kotlin, keselamatan udara introvert dalam sistem jenis, yang menjadikannya lebih mudah untuk mengelakkan kesilapan runtime yang berkaitan dengan udara.
- 1. Boleh jenis kosong
- Di Kotlin, jenis kosong diisytiharkan secara eksplisit. Ini bermakna anda boleh mempunyai pemboleh ubah yang mungkin menyelamatkan nilai kosong, tetapi anda mesti ditentukan secara jelas dalam pernyataan tersebut.
<可> jenis non -empty (lalai)
Secara lalai, semua jenis di Kotlin sangat diperlukan, yang bermaksud bahawa pembolehubah tidak dapat menyimpan nilai kosong.
<空> boleh mengosongkan jenis
Untuk mengisytiharkan pembolehubah yang dapat menyelamatkan nilai kosong, anda mesti menggunakan pengendali.
2. Panggilan keselamatan
Fungsi yang kuat adalah pengendali panggilan yang selamat?. Ia membolehkan anda untuk mengukus kaedah dengan selamat atau mengakses atribut tanpa membuang NullPointerException.
Contoh
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters, setters, ...
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
?.operator menyemak sama ada objek kosong, jika ya ia mengembalikan batal serta-merta, jika tidak ia terus memanggil kaedah atau mengakses sifat. Jika objek kosong, keseluruhan ungkapan dinilai kepada null.
3. Operator Elvis (?:)
Pengendali Elvis?: ialah singkatan untuk mengembalikan nilai lalai jika ungkapan di sebelah kiri pengendali kosong.
public record Person(
String name,
int age
) {
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
4. !! (penegasan bukan nol)
Anda boleh menggunakan operator !! untuk memberitahu pengkompil bahawa nilainya bukan nol. Jika nilainya nol, ia akan membuang NullPointerException.
data class Person(val name: String, var age: Int)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Petua:
Penggunaan operator !! ini ditamatkan kerana ia mengalahkan tujuan keselamatan nol.
5. Kebolehbatalan dalam parameter fungsi
Apabila mentakrifkan fungsi, anda boleh menentukan sama ada parameter boleh menjadi batal. Dalam kes ini pemanggil mesti mengendalikannya.
Person p2 = new Person(p1.getName(), p1.getAge());
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
6. Penukaran selamat (sebagai operator)
Terdapat operator penukaran yang selamat sebagai?, yang mengembalikan batal jika penukaran tidak dapat dilakukan.
val p2 = p1.copy(age = 42)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
7. Keselamatan nol dalam ungkapan lambda
Anda juga boleh menggunakan ciri keselamatan nol dalam ungkapan lambda dan fungsi tertib lebih tinggi:
String name = p1.getName();
int age = p1.getAge();
Salin selepas log masuk
Salin selepas log masuk
8. Gunakan fungsi let
Fungsi let ialah fungsi berskop yang membolehkan anda melaksanakan blok kod pada objek bukan nol. Ia biasanya digunakan untuk melaksanakan kod pada objek yang boleh dibatalkan dengan cara yang selamat.
Contoh dan nilai lalai:
val (name, age) = p1
println(name) // "John"
println(age) // 42
Salin selepas log masuk
Salin selepas log masuk
9. Amalan Terbaik
- Elakkan menggunakan operator !!
Mengendalikan jenis nullable dengan selamat dan memberikan nilai lalai menggunakan panggilan selamat dan pengendali Elvis -
Gunakan jenis nullable hanya apabila perlu-
Rujukan:
Ketidakbolehubah secara lalai
Kotlin sangat menggalakkan gaya pengaturcaraan berfungsi! Untuk gaya pengaturcaraan berfungsi, kebolehubahan memainkan peranan penting dalam mengelakkan ralat, terutamanya dalam aplikasi berbilang benang.
Saya mungkin akan menulis artikel berasingan tentang pengaturcaraan berfungsi dalam Kotlin atau Java sekarang, tetapi buat masa ini mari fokus pada kebolehubah.
Kotlin pada dasarnya lebih suka objek tidak berubah daripada objek boleh berubah. Ini menghasilkan kod yang lebih mudah dan boleh diramal, terutamanya dalam persekitaran serentak.
1. Pembolehubah (val) yang tidak boleh diubah secara lalai
Dalam Kotlin, pembolehubah yang diisytiharkan menggunakan kata kunci val tidak boleh diubah secara lalai. Ini sangat hampir dengan mengisytiharkan pembolehubah akhir dalam Java, tetapi dengan beberapa perbezaan utama:
Pembolehubah val dalam Kotlin sebenarnya adalah baca sahaja - nilai yang diberikan kepadanya tidak boleh ditukar selepas pemulaan. -
Walau bagaimanapun, jika nilai adalah objek, sifat objek masih boleh diubah suai, melainkan sifat itu sendiri diisytiharkan sebagai val. -
Contoh:
val name: String = "John" // 不可空
name = null // 编译错误!
Salin selepas log masuk
Perbezaan daripada Java: Di Jawa, kami menggunakan kata kunci terakhir untuk memastikan pembolehubah tidak boleh ditetapkan semula, tetapi objek yang ditunjuknya masih boleh diubah. Perbezaan utama dalam Kotlin ialah kebolehubahan meluas kepada pembolehubah secara lalai, yang menggalakkan reka bentuk yang lebih boleh diramal dan selamat untuk keseluruhan aplikasi.
<变> Variable Variable Contoh: Gunakan kata kunci var dalam kotlin untuk membolehkan anda memulakan semula pembolehubah.
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters, setters, ...
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
tip:
Kotlin menggalakkan sebanyak mungkin dan bukannya VAR untuk memastikan tidak -degeneration.
2. Koleksi Unchanging
Secara lalai, ia juga digalakkan untuk menggunakan tidak aktif. Set yang tidak jelas menghalang sebarang pengubahsuaian selepas penciptaan.
public record Person(
String name,
int age
) {
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Jika anda perlu mengubah suai koleksi, anda boleh menggunakan MutableListOf () atau jenis pengumpulan pembolehubah lain.
data class Person(val name: String, var age: Int)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Perbezaan antara Java: Di Java, koleksi (seperti ArrayList) berubah secara lalai, yang bermaksud bahawa ia dapat mengubah suai unsur -unsur dengan bebas.
3. Kategori Data Variabel Tidak dapat
Kelas data Kotlin tidak berubah secara lalai. Apabila menentukan kelas data, atribut biasanya diisytiharkan sebagai Val, yang menjadikan kelas tidak berubah. Ini menjadikan kelas sangat sesuai untuk objek nilai, terutamanya apabila berurusan dengan API, rekod pangkalan data, atau status objek lain yang tidak boleh diubah selepas penciptaan.
Person p2 = new Person(p1.getName(), p1.getAge());
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
val p2 = p1.copy(age = 42)
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
4. Yang tidak memuaskan dalam kelas pengedap
Kelas pengedap Kotlin juga boleh tidak berubah, dan mereka dipadankan dengan model data yang tidak tersembunyi. Kelas pengedap biasanya digunakan untuk mewakili struktur kelas terhad, seperti status atau tindak balas, dan tidak bermoral mereka memastikan bahawa keadaan atau keputusan tidak akan diubah secara tidak sengaja.
Atas ialah kandungan terperinci Kotlin untuk Pembangun Java (Bahagian 1). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!