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 |
კომპილაციის დროს | უნდა იყოს ცნობილი კომპილაციის დროს | უნდა იყოს უცვლელი |