Android Academy · Pelajaran

Jenis Nullable berbanding Tidak Null

Penanda jenis ?.

Pelajaran 1 daripada 413 langkah

Jenis Nullable berbanding Tidak Null ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 4 pelajaran.

Kepentingan Keselamatan Null

Banyak ranap dalam aplikasi Android berpunca daripada satu kesilapan: menggunakan nilai yang sebenarnya tiada. Dalam bahasa lain, keadaan ini menjadi NullPointerException yang ditakuti semasa masa jalan.

Kotlin menangani perkara ini semasa masa kompilasi. Sistem jenis menjejaki nilai yang mungkin null dan nilai yang tidak mungkin null. Pelajaran ini memperkenalkan asas sistem tersebut.

Jenis Bukan Null

Secara lalai, jenis Kotlin tidak boleh menyimpan null. String sentiasa merujuk kepada rentetan sebenar.

Jika anda cuba menetapkan null kepadanya, kod itu tidak akan berjaya dikompil. Ini ialah tetapan lalai yang selamat.

fun main() {
    val name: String = "Ada"
    println(name.length)
}

Null Ditolak

Perhatikan perkara yang berlaku apabila anda cuba memasukkan null ke dalam jenis bukan null.

Pengompil menghentikan anda serta-merta. Anda tidak akan sampai ke masa jalan dengan pepijat tersembunyi.

val name: String = null  // Compile error:
// Null can not be a value of a non-null type String

Jenis Nullable dengan ?

Kadangkala sesuatu nilai memang mungkin tiada, seperti nama tengah pilihan pengguna. Aktifkan kemungkinan ini dengan menambahkan ? pada jenis tersebut.

String? boleh menyimpan rentetan sebenar atau null. Tanda soal menandakan jenis itu sebagai nullable.

fun main() {
    val middleName: String? = null
    println(middleName)
}

Dua Jenis Berbeza

String dan String? bukan jenis yang sama. Jenis kedua lebih luas kerana merangkumi nilai null.

Perbezaan ini membolehkan pengompil melindungi anda. Pengompil mengetahui dengan tepat tempat null boleh muncul.

val sure: String = "hello"
val maybe: String? = "hello"
// maybe could later be null; sure never can

Anda Tidak Boleh Menggunakan Nullable Secara Terus

Pengompil tidak membenarkan anda memanggil kaedah pada nilai nullable tanpa menyemaknya terlebih dahulu.

Oleh sebab middleName mungkin null, memanggil .length padanya ialah ralat kompilasi. Anda mesti mengendalikan keadaan null.

val middleName: String? = null
println(middleName.length)
// Error: only safe (?.) or non-null (!!) calls allowed

Menyemak dengan if

Cara paling mudah untuk menggunakan nilai nullable ialah menyemaknya dengan syarat if.

Dalam cabang yang membuktikan nilainya bukan null, Kotlin menukarnya secara pintar kepada jenis bukan null, jadi .length boleh digunakan.

fun main() {
    val text: String? = "Kotlin"
    if (text != null) {
        println(text.length)
    }
}

Penukaran Pintar

Selepas semakan null yang berjaya, pengompil mengingati bahawa nilai itu bukan null untuk baki blok tersebut. Ini dipanggil penukaran pintar.

Anda tidak menulis sebarang penukaran. Kotlin menjejakinya untuk anda secara automatik.

fun describe(s: String?) {
    if (s == null) return
    // s is now treated as String here
    println("Length is " + s.length)
}

Parameter Fungsi

Sama ada sesuatu parameter nullable atau tidak merupakan sebahagian daripada kontrak fungsi. Parameter bukan null menjanjikan kepada pemanggil bahawa ia tidak akan menerima null.

Parameter nullable menandakan bahawa input yang tiada dijangka berlaku dan akan dikendalikan.

fun greet(name: String) {
    println("Hi, " + name)
}
// greet(null) would not compile

Jenis Pulangan Boleh Nullable

Fungsi boleh mengembalikan null untuk menandakan bahawa tiada apa-apa ditemui. Tandakan jenis pulangannya dengan ?.

Pemanggil kemudiannya tahu bahawa hasil itu mesti disemak sebelum digunakan.

fun firstChar(s: String): Char? {
    if (s.isEmpty()) return null
    return s[0]
}

Gunakan Bukan Null sebagai Lalai

Peraturan yang baik: utamakan jenis bukan null. Tambahkan ? hanya apabila sesuatu nilai benar-benar boleh tiada.

Ini menjadikan kod anda lebih tepat. Semakin sedikit jenis nullable yang anda gunakan, semakin sedikit semakan null yang diperlukan kemudian.

// Prefer this:
val score: Int = 0
// Over this, unless null is meaningful:
val maybeScore: Int? = null

Semakan Pantas

Uji pemahaman anda tentang jenis nullable berbanding bukan null.

Imbas Kembali

Jenis Kotlin secara lalai bukan null dan menolak null semasa masa kompilasi. Tambahkan ? untuk menjadikan sesuatu jenis nullable apabila nilainya mungkin tiada.

Anda tidak boleh menggunakan nilai nullable secara terus. Semakan null menukarnya secara pintar kepada bukan null supaya anda boleh menggunakannya dengan selamat. Seterusnya, anda akan mempelajari cara yang lebih ringkas untuk mengendalikan nilai nullable.

Percuma untuk bermula

Pelajari Kotlin dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
36
Pelajaran
152

Soalan Lazim

Adakah pelajaran “Jenis Nullable berbanding Tidak Null” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “Jenis Nullable berbanding Tidak Null”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Jenis Nullable berbanding Tidak Null”?

Penanda jenis ?. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Android Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Jenis Nullable berbanding Tidak Null” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?

Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Jenis Nullable berbanding Tidak Null
  2. Panggilan Selamat dan Elvis
  3. let, also dan Fungsi Scope
  4. Mengelakkan NullPointerExceptions
← Kembali ke Android Academy