Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

Kotlin – การเริ่มต้นคุณสมบัติโดยใช้ lazy vs. lateinit


ไลบรารี 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