Sobes.tech
Junior

რა განსხვავებაა Dart-ში final და const საკვანძო სიტყვებს შორის?

sobes.tech AI

პასუხი AI-სგან

final და const გამოიყენება ცვლადების შესაქმნელად, რომელთა მნიშვნელობაც ვერ შეიცვლება ინიციაციის შემდეგ:

ძირითადი განსხვავებები:

  • ინიციალიზაციის დრო:

    • final ინიცირდება შესრულების დროს (runtime) პირველი მიმართვის შემდეგ.
    • const ინიცირდება კომპილაციის დროს (compile-time).
  • მნიშვნელობების ტიპი:

    • final ცვლადი შეიძლება შეიცავდეს მნიშვნელობას, რომელიც გამოითვლება შესრულების დროს.
    • const ცვლადი უნდა შეიცავდეს მნიშვნელობას, რომელიც გამოითვლება კომპილაციის დროს (ლიტერალები, კონსტანტული გამოთვლების შედეგები).
  • კონსტანტულობა:

    • final: ცვლადი არის კონსტანტული, მაგრამ მნიშვნელობა, რომელსაც ის ეხება (თუ ეს ობიექტია), შეიძლება იყოს შეცვლადი.
    • const: ცვლადი არის კონსტანტული, და მნიშვნელობაც უნდა იყოს კონსტანტული (შეუცვლელი).

მაგალითები:

// final - ინიცირდება შესრულების დროს
final DateTime now = DateTime.now(); // მნიშვნელობა ცნობილია მხოლოდ runtime-ში

// const - ინიცირდება კომპილაციის დროს
const double pi = 3.14; // მნიშვნელობა ცნობილია კომპილაციის ეტაპზე

// const-ის გამოყენება სია და რუკებისთვის, რაც მათ უცვლელს ხდის
const List<int> constantList = [1, 2, 3];
// constantList[0] = 10; // შეცდომა! სია უცვლელია

// final-ის გამოყენება სია და რუკებისთვის, რაც ცვლადს ხდის უცვლელს,
// მაგრამ ობიექტის შიგთავსი შეიძლება შეიცვალოს (თუ ობიექტი შეცვლადი არის)
final List<int> finalList = [1, 2, 3];
finalList[0] = 10; // დაშვებულია, რადგან List შეცვლადია

// final-ის და კონსტანტული მნიშვნელობა
final int a = 5; // შესაძლებელია, მაგრამ `const` უფრო შესაბამისია
ინიცირების დრო მნიშვნელობის მოთხოვნები ობიექტის მუტაბელობა (თუ ობიექტზე არის მითითება)
final შესრულების დროს შეიძლება გამოითვალოს შესრულების დროს შეიძლება იყოს შეცვლადი, თუ ობიექტი შეცვლადი არის
const კომპილაციის დროს უნდა იყოს ცნობილი კომპილაციის დროს უნდა იყოს უცვლელი