تفاوت const , final در تعریف ثابت ها
در زبان دارت جهت تعریف ثابت ها از دو عبارت const , final استفاده می شود . ولی در ابتدا باید گفت ثابت ها یعنی چه و این دو با هم چه تفاوتی دارند ؟
ثابت ها در تمام زبان های برنامه نویسی مفهومی یکسان دارند و عبارتند از متغییر یا پراپرتی که فقط یکبار مقداردهی می شود و پس از اولین مقداردهی دیگر قابل تغییر نیست . این موضوع در بسیار از قسمت های نرم افزار کاربرد دارد ، به عنوان مثال اگر لازم باشد شما مقدار مالیات بر حقوق را یکبار از سرور دریافت و در طول کدهای برنامه به دفعات مورد استفاده قرار دهید و همچنین خواسته باشید جلوی مقدار دهی ناخواسته آن را توسط سایر برنامه نویس ها در طول استفاده از آن بگیرید ، نوع متغییر آن را از نوع ثابت تعریف می کنید تا در اولین مقدار دهی قفل شده و در مراحل استفاده در صورت مقدار دهی مجدد ایجاد خطا نماید و به این وسیله جلوی اشتباه کاربری را بگیرد .
مقدار ثابت ها پس از تعریف و مقداردهی اولیه ، دیگر قابل تغییر نمی باشد .
تفاوت بین const , final در چیست ؟
در زبان دارت از کلمه کلیدی const جهت تعریف متغییرهای (variable) ثابت استفاده می شود در حالی که از کلمه کلید final جهت تعریف پراپرتی های (property) ثابت استفاده می شود . به عنوان مثال به قطعه کد زیر دقت نمایید :
import 'package:flutter/material.dart';
// ignore: camel_case_types
class myWidget extends StatelessWidget {
final Widget myTitel;
myWidget({this.myTitel});
@override
Widget build(BuildContext context) {
return new Container(
padding: const EdgeInsets.all(5.0),
child: new Material(
child: new Row(
children: <Widget>[
Icon(Icons.add),
Expanded(
child: myTitel,
),
Icon(Icons.arrow_back)
],
),
),
);
}
}
همانطور که در مثال بالا مشاهده می کنید ، یک ویجت از نوع stateless ایجاد شده است و در خط ۵ پراپرتی به نام myTitel از نوع ثابت (final) تعریف شده و طبق تعریف به این پراپرتی فقط در متد سازنده کلاس می توان مقدار داد ، لذا در خط ۶ و در متد سازنده کلاس به این پراپرتی مقداردهی شده است .
همچنین در خط ۱۱ مقداری که به padding داده شده است از نوع ثابت (const) تعریف شده است تا در طول برنامه به صورت ناخواسته مورد تغییر قرار نگیرد .