1. Pengenalan
Bahasa pengaturcaraan Kotlin dibangun di atas Java Virtual Machine (JVM). Oleh itu, ia harus mengikuti semua peraturan yang dikenakan oleh JVM - termasuk pengubah penglihatan.
Namun, ada beberapa nuansa halus dalam bagaimana bahasa menerapkan pengubah ini berkenaan dengan penyusun dan cara kod kami disusun. Artikel ini akan menunjukkan beberapa persamaan dan perbezaan antara Java dan Kotlin dalam hal ini.
2. Pengubah Penglihatan
Pengubah penglihatan digunakan untuk menentukan elemen kod lain yang mempunyai akses ke elemen yang sedang diubah suai. Mereka berlaku untuk beberapa elemen yang berbeza dalam kod, pada berbagai tahap ruang lingkup. Cara peraturan ini diterapkan mungkin sedikit berbeza antara penggunaan yang berbeda ini, yang pada awalnya dapat membingungkan.
2.1. Penglihatan Awam
Pengubah yang paling jelas adalah umum . Ini mungkin yang paling sering digunakan dalam keseluruhan bahasa dan bermaksud bahawa tidak ada batasan tambahan pada siapa yang dapat melihat elemen tersebut diubah.
Tidak seperti Java, di Kotlin hampir tidak perlu menyatakan sesuatu sebagai umum - ini adalah pengubah lalai yang digunakan jika kita tidak menyatakan yang lain. Selain itu, ia berfungsi sama di Kotlin seperti di Jawa.
Sekiranya kita menerapkan pengubahsuaian awam ke elemen tingkat atas - kelas luar atau fungsi atau pemboleh ubah yang dinyatakan secara langsung di dalam paket - maka kod lain dapat mengaksesnya. Sekiranya kita menerapkan pengubahsuaian awam ke elemen bersarang - kelas dalam, atau fungsi atau pemboleh ubah di dalam kelas - maka kod yang dapat mengakses wadah juga dapat mengakses elemen ini.
Sebagai contoh:
class Public { val i = 1 fun doSomething() { } }
Kelas Awam boleh diakses dari mana sahaja di seluruh pangkalan data, "val i" dan "fun doSomething ()" dapat diakses dari apa sahaja yang dapat mengakses Umum.
2.2. Penglihatan Peribadi
Pengubah lain yang digunakan sebahagian besar masa adalah peribadi . Ini mempunyai makna yang hampir sama dengan umum - ini bermaksud bahawa tidak ada yang dapat mengaksesnya.
Pada hakikatnya, di Kotlin ini bermaksud bahawa hanya kod yang dinyatakan dalam ruang lingkup yang sama yang dapat mengaksesnya . Ini secara halus berbeda dari Java hanya kerana Kotlin memungkinkan untuk beberapa deklarasi tingkat atas dalam fail yang sama - elemen tingkat atas peribadi dapat diakses oleh semua yang lain dalam fail yang sama. Selain itu peraturannya sama. Sebagai contoh:
Sebagai contoh:
private class Private { private val i = 1 private val doSomething() { } }
Kelas Peribadi hanya boleh diakses dari dalam fail sumber yang sama, "val i" dan "fun doSomething ()" hanya dapat diakses dari dalam kelas Peribadi .
2.3. Penglihatan Terlindung
The p rotected pengubahsuai dalam Kotlin cara yang ia secara tegas hanya boleh diakses oleh kelas dan subkelas yang mengisytiharkan . Ini sama seperti kebanyakan orang mengharapkan Java berfungsi, tetapi secara halus berbeda dengan cara Java berfungsi.
Di Java, pengubah yang dilindungi juga membenarkan akses ke elemen dari apa pun dalam pakej yang sama. Contohnya, diberikan fail kelas berikut:
class A { protected val i = 1 }
Fail berikut akan berfungsi dengan baik di Kotlin:
class B : A() { fun getValue() : Int { return i } }
Fail berikut akan berfungsi di Java tetapi tidak akan berfungsi di Kotlin:
class C { fun getValue() : Int { val a = A() return a.i } }
Dan yang berikut tidak akan berfungsi di Jawa atau Kotlin:
class D { fun getValue() : Int { val a = A() return a.i } }
Selain itu, di Kotlin dilindungi menjadi keterlihatan lalai ketika kita mengatasi elemen terlindung dari superclass . Perkara ini secara eksplisit dapat diubah menjadi umum jika dikehendaki dan merupakan masa utama kita perlu menyatakan sesuatu sebagai umum secara eksplisit.
2.4. Penglihatan Pakej-Peribadi / Lalai
Di Jawa, ada pengubah akses yang dikenal sebagai "paket-pribadi" (juga disebut sebagai "default"). Ini digunakan apabila tiada pengubah diletakkan pada elemen. Ini bermaksud bahawa mana-mana kod dalam pakej yang sama dapat mengaksesnya, tetapi kod dalam pakej yang lain tidak dapat, termasuk subkelas.
Kotlin tidak mempunyai sokongan untuk pengubah ini sama sekali , walaupun ini mungkin akan berubah di masa depan. Alasan untuk ini adalah bahawa ia tidak menawarkan perlindungan - siapa pun dapat menentukan kod dalam paket yang sama dan mengakses elemen kami, bahkan dari fail jar yang berbeza.
2.5. Penglihatan Dalaman
Kotlin menambahkan pengubah baru untuk pilihan yang tidak disokong oleh Java pada masa ini - dalaman . Pengubah ini bermaksud bahawa mana-mana kod yang dinyatakan dalam modul yang sama yang tidak disekat sebaliknya dapat mengakses elemen ini . (Modul pada dasarnya adalah fail Jar.)
Ini mungkin berlaku di Java menggunakan perkara seperti OSGi, tetapi bahasa ini tidak asli pada masa ini. Java 9 akan membawa beberapa konsep yang membuatnya lebih mudah dicapai dengan dapat mengeksport pengenal umum secara terpilih.
Ini menambahkan faedah besar untuk menulis API dan pelaksanaan. Kami dapat menulis antara muka API kami sebagai umum , pelaksanaan utama kami sebagai kelas awam dan semua kod sokongan yang bergantung kepada dalaman . Melakukan ini bermaksud bahawa kod luaran terpaksa melalui API dan tidak dapat mendapatkan akses ke dalaman. Sebagai contoh:
package com.baeldung.modifiers internal class Internal { } class Public { internal val i = 1 internal fun doSomething() { } }
Kelas Dalaman hanya boleh diakses dari dalam modul yang sama. "Val i" dan "fun doSomething ()" juga hanya dapat diakses dari dalam modul yang sama, walaupun kelas yang berada di dalamnya dapat diakses dari mana saja.
3. Ringkasan
Dalam artikel itu, kami melihat pengubah penglihatan di Kotlin.
Selalunya, peraturan pengubah penglihatan di Kotlin berfungsi sama seperti yang kita harapkan dari Java. Walau bagaimanapun, terdapat perbezaan besar - iaitu pengenalan ruang lingkup dalaman - yang sangat berguna untuk projek yang lebih besar.