উত্তর:
ডার্টের ওয়েবসাইটে একটি পোস্ট রয়েছে এবং এটি এটি বেশ ভালভাবে ব্যাখ্যা করেছে।
ফাইনাল:
"চূড়ান্ত" অর্থ সিঙ্গল-অ্যাসাইনমেন্ট: একটি চূড়ান্ত ভেরিয়েবল বা ক্ষেত্রের অবশ্যই একটি ইনিশিয়ালাইজার থাকতে হবে। একবার কোনও মূল্য নির্ধারিত হয়ে গেলে, একটি চূড়ান্ত ভেরিয়েবলের মান পরিবর্তন করা যায় না। চূড়ান্ত পরিবর্তনশীল পরিবর্তন করে ।
const:
"কনস্ট" এর একটি অর্থ রয়েছে যা ডার্টে কিছুটা জটিল এবং সূক্ষ্ম। কনস্ট মান পরিবর্তন করে । কনস্ট [1, 2, 3] এর মতো সংগ্রহ তৈরি করার সময় এবং কনস্ট পয়েন্ট (2, 3) এর মতো (নতুন পরিবর্তে) অবজেক্ট তৈরি করার সময় আপনি এটি ব্যবহার করতে পারেন। এখানে, কনস্টের অর্থ হ'ল কম্পাইল করার সময় অবজেক্টের সম্পূর্ণ গভীর অবস্থা সম্পূর্ণ নির্ধারণ করা যেতে পারে এবং অবজেক্টটি হিমশীতল এবং সম্পূর্ণরূপে অপরিবর্তনীয়।
কনস্ট অবজেক্টগুলির কয়েকটি আকর্ষণীয় বৈশিষ্ট্য এবং বিধিনিষেধ রয়েছে:
সেগুলি অবশ্যই ডেটা থেকে তৈরি করা উচিত যা সংকলন সময়ে গণনা করা যায়। কোনও কনট কনট অবজেক্টের এমন কোনও কিছুর অ্যাক্সেস নেই যা রানটাইমের সময় আপনার গণনা করতে হবে। 1 + 2 একটি বৈধ কনস্ট এক্সপ্রেশন, তবে নতুন ডেটটাইম.নো () এটি নয়।
তারা গভীরভাবে, অস্থায়ীভাবে পরিবর্তনযোগ্য। আপনার যদি সংগ্রহ সহ একটি চূড়ান্ত ক্ষেত্র থাকে, তবে সংগ্রহটি এখনও পরিবর্তনযোগ্য হতে পারে। যদি আপনার কাছে কনস্টের সংগ্রহ থাকে তবে এর প্রত্যেকটি জিনিস অবশ্যই পুনরাবৃত্তভাবে কনস্ট হওয়া উচিত।
তারা ক্যানোনিকালাইজড হয় । এটি স্ট্রিং ইন্টার্নিংয়ের মতো: কোনও নির্দিষ্ট কনস্ট মানের জন্য, একক কনস্ট অবজেক্ট তৈরি করা হবে এবং পুনরায় ব্যবহার করা হবে না কেন কনস্ট এক্সপ্রেশন (গুলি) যতবার মূল্যায়ন করা হয়।
কনস্ট: আপনার
যদি মানটি রানটাইমের সময় গণনা করা হয় ( new DateTime.now()
উদাহরণস্বরূপ), আপনি এটির জন্য কোনও কনস্ট ব্যবহার করতে পারবেন না । তবে, সংকলনের সময় যদি মানটি জানা থাকে (তবে const a = 1;
) আপনার ব্যবহার const
করা উচিত final
। সেখানে 2 এর মধ্যে অন্যান্য বৃহৎ পার্থক্য আছে const
এবং final
। প্রথমত, আপনি যদি ব্যবহার করেন তবে আপনাকে const
এটিকে ন্যায়বিচারের static const
চেয়ে ঘোষণা করতে হবে const
। দ্বিতীয়ত, আপনার যদি const
সংগ্রহ থাকে তবে এর ভিতরে থাকা সমস্ত কিছুই const
। আপনার যদি final
সংগ্রহ থাকে তবে এর ভিতরে থাকা সমস্ত কিছুই final
।
চূড়ান্ত: আপনি যদি সংকলনের সময় মানটি না জানেন তবে
final
এটি ব্যবহার করা উচিত const
এবং এটি রানটাইমে গণনা করা / ধরা হবে। আপনি যদি কোনও এইচটিটিপি প্রতিক্রিয়া চান যা পরিবর্তন করা যায় না, আপনি যদি কোনও ডাটাবেস থেকে কিছু পেতে চান বা কোনও স্থানীয় ফাইল থেকে পড়তে চান তবে ব্যবহার করুন final
। কিছু আছে যে কম্পাইল সময়ে পরিচিত করা উচিত হবে না final
ধরে const
।
সঙ্গে যে হচ্ছে সকলে বলল, উভয় const
এবং final
পুনরায় নির্ধারণ করা যাবে না, কিন্তু একটি ক্ষেত্র final
বস্তু, যতদিন তারা না const
বা final
, (অসদৃশ পুনরায় নির্ধারণ করা যেতে পারে const
)।
const
এবং কখন final
? আপনি কি এই সংশোধকটির জন্য কোনও প্রকারের ব্যবহার-কেস জানেন?
সংকলন সময়ে মান অবশ্যই জানা উচিত ,
const birthday = "2008/12/26"
আরম্ভ করার পরে পরিবর্তন করা যাবে না।
রান রান সময়ে মান অবশ্যই জানা উচিত ,
final birthday = getBirthDateFromDB()
আরম্ভ করার পরে পরিবর্তন করা যায় না Can
একীভূত @ মাইয়ি এবং @ ফয়সাল-নাসির উত্তর এবং সামান্য প্রোগ্রামিংয়ের সাথে তুলনা করা।
একটি সংকলন সময় ধ্রুবক মান সংরক্ষণ করতে ভেরিয়েবল তৈরির জন্য কনট কীওয়ার্ড ব্যবহৃত হয় । সংকলনের সময় ধ্রুবক মান হল এমন একটি মান যা :-) সংকলনের সময় স্থির থাকবে
উদাহরণস্বরূপ 5
একটি সংকলন সময় ধ্রুবক। যদিও DateTime.now()
যা কম্পাইল সময় ধ্রুবক নয়। কারণ এই পদ্ধতিটি রানটাইমের সময় লাইনটি কার্যকর হওয়ার সময়টি ফিরিয়ে দেবে । সুতরাং আমরা DateTime.now()
একটি const
ভেরিয়েবল নির্ধারণ করতে পারবেন না ।
const a = 5;
// Uncommenting below statement will cause compile time error.
// Because we can't able to assign a runtime value to a const variable
// const b = DateTime.now();
একই লাইনে আরম্ভ করা উচিত ।
const a = 5;
// Uncommenting below 2 statement will cause compilation error.
// Because const variable must be initialized at the same line.
// const b;
// b = 6;
নীচে উল্লিখিত সমস্ত বিবৃতি গ্রহণযোগ্য।
// Without type or var
const a = 5;
// With a type
const int b = 5;
// With var
const var c = 6;
ক্লাস স্তরের কনস্ট ভেরিয়েবলটি নীচের মতো শুরু করা উচিত।
Class A {
static const a = 5;
}
ইনস্ট্যান্স স্তরের কনস্ট ভেরিয়েবল সম্ভব নয় ।
Class A {
// Uncommenting below statement will give compilation error.
// Because const is not possible to be used with instance level
// variable.
// const a = 5;
}
এর আর একটি বড় ব্যবহার অবজেক্টটিকে অপরিবর্তনীয় করেconst
তুলতে ব্যবহৃত হয় । ক্লাস অবজেক্টকে অপরিবর্তনীয় করে তুলতে আমাদের কনস্ট্রাক্টর দিয়ে কনস্ট কিওয়ার্ডটি ব্যবহার এবং তৈরি করা দরকার হবে এবং নীচে উল্লিখিত মত সমস্ত ক্ষেত্রকে চূড়ান্ত হিসাবে হবে ।
Class A {
final a, b;
const A(this.a, this.b);
}
void main () {
// There is no way to change a field of object once it's
// initialized.
const immutableObja = const A(5, 6);
// Uncommenting below statement will give compilation error.
// Because you are trying to reinitialize a const variable
// with other value
// immutableObja = const A(7, 9);
// But the below one is not the same. Because we are mentioning objA
// is a variable of a class A. Not const. So we can able to assign
// another object of class A to objA.
A objA = const A(8, 9);
// Below statement is acceptable.
objA = const A(10, 11);
}
আমরা ব্যবহার করতে পারি একটি তালিকার কাছে কনস্টওয়ার্ড ।
কনট ক = কনস্ট [] - একটি পরিবর্তনশীল a
সূচনাযুক্ত const
যা const
বস্তুর একটি তালিকা রয়েছে (যেমন, তালিকায় কেবল সংকলন সময় ধ্রুবক এবং অপরিবর্তনীয় বস্তু থাকতে হবে) contain সুতরাং আমরা a
অন্য তালিকার সাথে বরাদ্দ করতে পারি না ।
var a = const [] - একটি পরিবর্তনশীল a
সূচনাযুক্ত var
যা তালিকার const
অবজেক্টগুলিকে ধারণ করে । সুতরাং আমরা ভেরিয়েবলের জন্য অন্য একটি তালিকা নির্ধারণ করতে সক্ষম হয়েছিa
।
Class A {
final a, b;
const A(this.a, this.b);
}
class B {
B(){ // Doing something }
}
void main() {
const constantListOfInt = const [5, 6, 7,
// Uncommenting below statement give compilation error.
// Because we are trying to add a runtime value
// to a constant list
// DateTime.now().millisecondsSinceEpoch
];
const constantListOfConstantObjA = const [
A(5, 6),
A(55, 88),
A(100, 9),
];
// Uncommenting below 2 statements will give compilation error.
// Because we are trying to reinitialize with a new list.
// constantListOfInt = [8, 9, 10];
// constantListOfConstantObjA = const[A(55, 77)];
// But the following lines are little different. Because we are just
// trying to assign a list of constant values to a variable. Which
// is acceptable
var variableWithConstantList = const [5, 6, 7];
variableWithConstantList = const [10, 11, 15];
var variableOfConstantListOfObjA = const [A(5, 8), A(7, 9), A(10, 4)];
variableWithConstantList = const [A(9, 10)];
}
চূড়ান্ত কীওয়ার্ডটি একটি ধ্রুবক মান ধরে রাখতে ভেরিয়েবল তৈরি করতেও ব্যবহৃত হত । একবার আরম্ভ করার পরে আমরা মানটি পরিবর্তন করতে পারি না।
final a = 5;
// Uncommenting below statement will give compilation error.
// Because a is declared as final.
// a = 6;
নীচে উল্লিখিত সমস্ত বিবৃতি গ্রহণযোগ্য।
// Without type or var
final a = 5;
// With a type
final int b = 5;
// With var
final var c = 6;
একটি রানটাইম মান নির্ধারণ করতে সক্ষম ।
// DateTime.now() will return the time when the line is getting
// executed. Which is a runtime value.
final a = DateTime.now();
var b = 5;
final c = b;
ক্লাস স্তরের চূড়ান্ত পরিবর্তনশীল একই লাইনে শুরু করতে হবে।
Class A {
static final a = 5;
static final b = DateTime.now();
}
ইনস্ট্যান্স স্তরের চূড়ান্ত ভেরিয়েবলটি একই লাইনে বা কনস্ট্রাক্টর ইনিশিয়ালাইজের মাধ্যমে শুরু করতে হবে। যখন বস্তুটি তৈরি হবে তখন মানটি মেমোরিতে রাখা হবে।
Class A {
final a = 5;
}
// Constructor with a parameter.
Class B {
final b;
B(this.b);
}
// Constructor with multiple parameter.
Class C {
final c;
C(this.c, int d) {
// Do something with d
}
}
void main() {
A objA = new A();
B objB = new B(5);
C objC = new C(5, 6);
}
একটি তালিকা বরাদ্দ করা হচ্ছে ।
final a = [5, 6, 7, 5.6, A()];
// Uncommenting Below statement will give compilation error.
// Because we are trying to reinitialize the object with another list.
// a = [9.9, 10, B()];
উত্তরটি @ মাইয়ি দ্বারা প্রসারিত করা হচ্ছে
biggestNumberOndice
তবেই মানটি আরম্ভ করা হবে এবং মেমরি নির্ধারিত হবে))কনস্ট অভ্যন্তরীণভাবে প্রকৃতিতে চূড়ান্ত তবে মূল পার্থক্যটি হ'ল এর সংকলন সময় ধ্রুবকটি যা সংকলনের সময় আরম্ভ করা হয় এমনকি আপনি যদি এর মানটি ব্যবহার না করেন তবে এটি আরম্ভ হবে এবং মেমরিতে স্থান নেবে।
ক্লাস থেকে পরিবর্তনশীল চূড়ান্ত হতে পারে তবে ধ্রুবক হতে পারে না এবং আপনি যদি শ্রেনী স্তরে একটি ধ্রুবক চান তবে এটি স্থির প্রতিবন্ধী করুন।
কোড:
void main() {
// final demonstration
final biggestNumberOndice = '6';
// biggestNumberOndice = '8'; // Throws an error for reinitialization
// const
const smallestNumberOnDice = 1;
}
class TestClass {
final biggestNumberOndice = '6';
//const smallestNumberOnDice = 1; //Throws an error
//Error . only static fields can be declared as constants.
static const smallestNumberOnDice = 1;
}
উভয়ই final
এবং const
কোনও ভেরিয়েবলকে পুনরায় নিয়োগ দেওয়া থেকে আটকাতে পারে ( final
জাভাতে কীভাবে const
কাজ হয় বা জাভাস্ক্রিপ্টে কীভাবে কাজ করা যায় তার সমান )।
পার্থক্য কীভাবে মেমরি বরাদ্দ করা হয় তার সাথে সম্পর্কিত। final
রানটাইম চলাকালীন একটি const
চলক এবং সংকলন-সময়ে একটি পরিবর্তনশীল জন্য মেমরি বরাদ্দ করা হয় । final
কারণ অনেক প্রোগ্রাম ভেরিয়েবল কোনো মেমরির প্রয়োজন হবে না যেহেতু প্রোগ্রাম যুক্তিবিজ্ঞান তাদের সক্রিয়া করা জন্য কল করা হবে না পরিবর্তক, আরো সাধারণভাবে ব্যবহৃত হওয়া উচিত। একটি const
ভেরিয়েবলের সাহায্যে আপনি মূলত কম্পিউটারকে বলছেন, "আরে, এই ভেরিয়েবল আপ ফ্রন্টের জন্য আমার মেমরি দরকার কারণ আমি জানি যে এটির প্রয়োজন হবে" "
তাদের এইভাবে চিন্তা করা তাদের সিনট্যাক্টিক্যাল ব্যবহারের পার্থক্য বুঝতে সহজ করে তোলে। মূলত এটি যে একটি final
ভেরিয়েবল একটি উদাহরণ ভেরিয়েবল হতে পারে তবে একটি শ্রেণিতে const
অবশ্যই একটি static
ভেরিয়েবল হতে পারে । এর কারণ উদাহরণস্বরূপ ভেরিয়েবলগুলি রানটাইমের সময় তৈরি হয়, এবং const
ভেরিয়েবলগুলি - সংজ্ঞা অনুসারে - হয় না। সুতরাং, const
একটি শ্রেণিতে ভেরিয়েবলগুলি অবশ্যই হবেstatic
, যার অর্থ কেবল সেই শ্রেণীর তাত্ক্ষণিক কিনা তা নির্বিশেষে কোনও শ্রেণীর উপর সেই পরিবর্তকের একক অনুলিপি উপস্থিত থাকে।
এই ভিডিওটি এটিকে মোটামুটিভাবে ভেঙে দিয়েছে: https://www.youtube.com/watch?v=9ZZL3iyf4Vk
এই নিবন্ধটি আরও গভীরতায় যায় এবং উভয়ের মধ্যে একটি অত্যন্ত গুরুত্বপূর্ণ অর্থগত পার্থক্য ব্যাখ্যা করে, অর্থাত final
পরিবর্তনশীল এবং const
মানগুলিকে সংশোধন করে, যা মূলত কেবল সেই const
সংকলন-সময় প্রাপ্ত হওয়া মানগুলি সূচনা করতে সক্ষম হয়ে যায় being
https://news.dartlang.org/2012/06/const-static-final-oh-my.html
আপনার কাছ থেকে আসছে হয় C++
তারপর const
মধ্যে Dart
হয় constexpr
মধ্যে C++
এবং final
মধ্যে Dart
হয় const
মধ্যে C++
।
উপরেরগুলি আদিম ধরণের ক্ষেত্রে প্রযোজ্য। তবে Dart
চিহ্নিত বস্তুগুলিতে final
এর সদস্যদের ক্ষেত্রে পরিবর্তনীয়।
const
সি ++ এ প্রায় সর্বদা নির্দিষ্ট করার জন্য ব্যবহৃত হয় যে কোনও নির্দিষ্ট রেফারেন্স বা পয়েন্টারের মাধ্যমে কোনও বস্তু পরিবর্তনযোগ্য নয়। final
ডার্টে বস্তুটিকে সেই পরিবর্তনশীল মাধ্যমে পরিবর্তিত হতে বাধা দেয় না।
কোন শব্দটি কখন ব্যবহার করবেন?
উভয়ের জন্য একটি সাধারণ উদাহরণ: চূড়ান্ত ব্যবহার করুন: সংকলন সময়ে এর মান কী হবে তা যদি আপনি না জানেন। উদাহরণস্বরূপ, যখন আপনাকে কোনও এপিআই থেকে ডেটা পাওয়ার প্রয়োজন হতে পারে, আপনার কোড চালানোর সময় এটি ঘটে।
কনস্ট ব্যবহার করুন: আপনি যদি নিশ্চিত হন যে আপনার কোডটি চালানোর সময় কোনও মান পরিবর্তন করা যাচ্ছে না। উদাহরণস্বরূপ, আপনি যখন কোনও বাক্য ঘোষণা করেন যা সর্বদা একই থাকে।
https://itnext.io/difference-between-const-and-final-in-dart-78c129d0c573
const
: stackoverflow.com/questions/51576209/... এবং সহজ explonationfinal
ধ্রুবক (পুনঃস্থির বা ধার্য করতে একবার চূড়ান্ত শব্দ দিয়ে তৈরি করতে পারেন) এবং আপনি একবার এটি আরম্ভ করতে হবে।