Computer >> Máy Tính >  >> Lập trình >> Android

Kotlin - Khởi tạo thuộc tính bằng lười biếng so với lateinit

Thư viện Kotlin cung cấp hai công cụ sửa đổi truy cập khác nhau để khai báo thuộc tính.

Trong bài viết này, chúng tôi sẽ nêu bật sự khác biệt giữa hai công cụ hỗ trợ truy cập này và cách chúng tôi có thể sử dụng chúng trong ứng dụng của mình.

Lateinit

Để tạo biến "lateInit", chúng ta chỉ cần thêm từ khóa "lateInit" làm bổ trợ truy cập của biến đó. Sau đây là một loạt các điều kiện cần phải tuân theo để sử dụng "lateInit" trong Kotlin.

  • Sử dụng "lateInit" với một biến có thể thay đổi. Điều đó có nghĩa là, chúng ta cần sử dụng từ khóa "var" với "lateInit".

  • "lateInit" chỉ được phép với các kiểu dữ liệu không phải NULLable.

  • "lateInit" không hoạt động với các kiểu dữ liệu nguyên thủy.

  • "lateInit" có thể được sử dụng khi thuộc tính biến không có bất kỳ getter nào và setter phương pháp.

Ví dụ

Chúng tôi sẽ khai báo một biến là lateInit và chúng tôi sẽ xem cách chúng tôi có thể truy cập giống nhau trong suốt chương trình.

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();
}

Đầu ra

Khi bạn thực thi mã, nó sẽ tạo ra kết quả sau -

www.tutorialspoint.com/

Khởi tạo Lazy

Để quản lý bộ nhớ hiệu quả, Kotlin đã giới thiệu một tính năng mới được gọi là Khởi tạo lười biếng. Khi lười biếng từ khóa được sử dụng, đối tượng sẽ chỉ được tạo khi nó được gọi, nếu không sẽ không có tạo đối tượng. lười biếng () là một hàm nhận lambda và trả về một phiên bản của lazy có thể đóng vai trò là đại biểu của các thuộc tính lười biếng mà nó đã được áp dụng. Nó được thiết kế để ngăn việc khởi tạo các đối tượng không cần thiết.

  • Chỉ có thể sử dụng Lazy với các biến không phải NULLable.

  • Biến chỉ có thể là val. "var" không được phép.

  • Đối tượng sẽ chỉ được khởi tạo một lần. Sau đó, bạn nhận được giá trị từ bộ nhớ đệm.

  • Đối tượng sẽ không được khởi tạo cho đến khi nó được sử dụng trong ứng dụng.

Ví dụ

Trong ví dụ này, chúng tôi sẽ khai báo một biến lười "myName" và chúng ta có thể thấy rằng lệnh gọi đến các phần này của mã sẽ chỉ xảy ra một lần và khi giá trị được khởi tạo, nó sẽ ghi nhớ giá trị trong toàn bộ ứng dụng. Khi giá trị được chỉ định bằng cách sử dụng khởi tạo lười biếng, nó không thể được chỉ định lại.

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);
}

Đầu ra

Khi bạn thực thi mã, nó sẽ tạo ra kết quả sau -

Welcome to Lazy declaration
www.tutorialspoint.com
Second time call to the same object--www.tutorialspoint.com