ไลบรารี Kotlin มีตัวแก้ไขการเข้าถึงที่แตกต่างกันสองแบบสำหรับการประกาศคุณสมบัติ
ในบทความนี้ เราจะเน้นถึงความแตกต่างระหว่าง accessmodifier สองตัวนี้และวิธีที่เราสามารถใช้ในแอปพลิเคชันของเรา
ลาตินิต
ในการสร้างตัวแปร "lateInit" เราเพียงแค่เพิ่มคำหลัก "lateInit" เป็นตัวแก้ไขการเข้าถึงของตัวแปรนั้น ต่อไปนี้เป็นชุดเงื่อนไขที่ต้องปฏิบัติตามเพื่อใช้ "lateInit" ใน Kotlin
-
ใช้ "lateInit" กับตัวแปรที่ไม่แน่นอน นั่นหมายความว่า เราจำเป็นต้องใช้คีย์เวิร์ด "var" กับ "lateInit"
-
อนุญาตให้ใช้ "lateInit" กับประเภทข้อมูลที่ไม่ใช่ค่า NULL เท่านั้น
-
"lateInit" ใช้ไม่ได้กับประเภทข้อมูลพื้นฐาน
-
"lateInit" สามารถใช้เมื่อคุณสมบัติของตัวแปรไม่มี getter และ เซ็ตเตอร์ วิธีการ
ตัวอย่าง
เราจะประกาศตัวแปรเป็น lateInit และเราจะดูว่าเราจะเข้าถึงข้อมูลเดียวกันนี้ได้อย่างไรตลอดทั้งโปรแกรม
class Tutorial { lateinit var name : String fun checkLateInit(){ // checking whether the value is assigned or not if(this::name.isInitialized) println("Your value is not assigned"); else{ // initializing name name = "www.tutorialspoint.com/" println(this.name) // this will return true } } } fun main() { var obj=Tutorial(); obj.checkLateInit(); }
ผลลัพธ์
เมื่อคุณรันโค้ด มันจะสร้างผลลัพธ์ต่อไปนี้ -
www.tutorialspoint.com/
Lazy Initialization
เพื่อการจัดการหน่วยความจำที่มีประสิทธิภาพ Kotlin ได้แนะนำคุณลักษณะใหม่ที่เรียกว่า Lazy initialization เมื่อ ขี้เกียจ ใช้คีย์เวิร์ด อ็อบเจกต์จะถูกสร้างขึ้นเมื่อมีการเรียกเท่านั้น มิฉะนั้น จะไม่มีการสร้างอ็อบเจ็กต์ ขี้เกียจ() เป็นฟังก์ชันที่รับแลมบ์ดาและส่งกลับอินสแตนซ์ ขี้เกียจ ซึ่งสามารถทำหน้าที่เป็นตัวแทนของคุณสมบัติสันหลังยาวที่มันถูกนำไปใช้ ได้รับการออกแบบมาเพื่อป้องกันการเริ่มต้นวัตถุโดยไม่จำเป็น
-
Lazy สามารถใช้ได้กับตัวแปร non-NULLable เท่านั้น
-
ตัวแปรต้องเป็น val เท่านั้น "วาร์" ไม่อนุญาต .
-
ออบเจ็กต์จะเริ่มต้นเพียงครั้งเดียว หลังจากนั้น คุณจะได้รับค่าจากหน่วยความจำแคช
-
ออบเจ็กต์จะไม่ถูกเตรียมใช้งานจนกว่าจะถูกใช้ในแอปพลิเคชัน
ตัวอย่าง
ในตัวอย่างนี้ เราจะประกาศตัวแปรขี้เกียจ "myName" และเราจะเห็นว่าการเรียกส่วนนี้ของรหัสจะเกิดขึ้นเพียงครั้งเดียว และเมื่อกำหนดค่าเริ่มต้น มันจะจดจำค่าตลอดทั้งแอปพลิเคชัน เมื่อกำหนดค่าโดยใช้การกำหนดค่าเริ่มต้นแบบสันหลังยาวแล้ว จะไม่สามารถกำหนดค่าใหม่ได้
class Demo { val myName: String by lazy { println("Welcome to Lazy declaration"); "www.tutorialspoint.com" } } fun main() { var obj=Demo(); println(obj.myName); println("Second time call to the same object--"+obj.myName); }
ผลลัพธ์
เมื่อคุณรันโค้ด มันจะสร้างผลลัพธ์ต่อไปนี้ -
Welcome to Lazy declaration www.tutorialspoint.com Second time call to the same object--www.tutorialspoint.com