تفاوت 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) تعریف شده است تا در طول برنامه به صورت ناخواسته مورد تغییر قرار نگیرد .