ثابت ها

آموزش ثابت ها (کلیدواژه const) در سی شارپ به زبان ساده

اساطیر زبان

تا کنون بحث زیادی درباره متغیرها انجام داده ایم و نیز نحوه نام گذاری آنها را بررسی کرده ایم؛ متغیرها همیشه می توانند تغییر کنند. در نقطه مقابل متغیرها؛ ثابت ها قرار دارند که در سی شارپ با کلید واژه const معرفی می شوند. زمانی که یک ثابت اعلام می شود؛ باید سریعاً یک مقداری به آن اختصاص بدهیم و سپس، هیچ تغییری را نمی توان در مقدار آن ایجاد کرد. استفاده از ثابت ها هنگامی به کارتان می آید که می خواهید مقداری را در برنامه تعریف کنید که تا لحظه آخر تغییر نکند، و مطمئن شوید که به صورت تصادفی هم با کد نویسی تان تحت تأثیر قرار نمی گیرد و تغییر نمی کند.

شما بسیاری از ثابت ها را در خود چارچوب، برای مثال در کلاس Math (ریاضیات) پیدا خواهید کرد؛ که در آن یک ثابت برای PI تعریف شده است:

 


برنامه نویسی شبکه معماری کامپیوتر هوش مصنوعی و تجاری

توی این پک فوق العاده، صفرتاصد مبانی برنامه نویسی رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با صفرتاصد مبانی برنامه نویسی اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

Console.WriteLine(Math.PI);

اما البته؛ قسمت جالب ماجرا آن است که بخواهیم ثابت های خودمان را اعلام کنیم. یک ثابت را مانند زیر می توان در دامنه یک متد تعریف کرد:

static void Main(string[] args)
{
const int TheAnswerToLife = 42;
Console.WriteLine(“The answer to life, the universe and everything: ” +  TheAnswerToLife);
}

با این حال؛ اغلب ثابت ها در سطح کلاس تعریف می شود؛ بنابراین؛ بر اساس کنترل سطح دسترسی (visibility) می توان از تمامی متدهای کلاس؛ حتی از خارج کلاس به آن ثابت ها دسترسی پیدا کرد (البته می دانید که تغییر نمی کنند). یک ثابت مانند عضو استاتیک کلاس رفتار می کند؛ به این معنا که شما می توانید بدون نمونه سازی کلاس، به آنها دست پیدا کنید. با به خاطر داشتن این نکات، بیایید مثالی را بررسی کنیم که در آن دو ثابت تعریف شده است- یک ثابت خصوصی (private) و یک ثابت عمومی (public) .

using System;

namespace Constants
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“The fake answer to life: ” + SomeClass.TheFakeAnswerToLife);
Console.WriteLine(“The real answer to life: ” +  SomeClass.GetAnswer());
}
}

class SomeClass
{
private const int TheAnswerToLife = 42;
public const int TheFakeAnswerToLife = 43;

public static int GetAnswer()
{
return TheAnswerToLife;
}
}
}

توجه کنید که چگونه یک کلاس را با دو ثابت تعریف کرده ایم (SomeClass). اولین ثابت خصوصی است، بنابراین فقط از کلاس خود آن ثابت می توان به آن دسترسی داشت؛ اما ثابت دیگر، عمومی است. بنابراین، در کدنویسی برنامه مان؛ به هردو ثابت به صورتی متفاوت دسترسی خواهیم داشت- اولی به صورت مستقیم؛ زیرا پاسخ نادرست به طور عمومی در دسترس است و دومی با کمک متد ()GetAnswer به دست می آید.

کدام نوع از آیتم ها را می توان به عنوان یک ثابت استفاده کرد؟

از آنجایی که ثابت ها را باید فوراً اعلام کرد و نمی توان بعداً آنها را تغییر داد؛ مقداری که به ثابت تخصیص می دهید باید یک عبارت ثابت باشد و کامپایلر باید بتواند مقدار را در زمان کامپایل ارزیابی نماید. این بدان معناست که اعداد، مقادیر بولی و رشته ها را می توان به عنوان ثابت به کار برد؛ در حالی که اشیاء DateTime را نمی توان به عنوان ثابت به کار گرفت.

از آنجایی که کامپایلر باید به سرعت مقدار ثابت را بداند؛ به این ترتیب زمانی که می خواهید تنظیمات مقادیر را انجام دهید؛ محدودیت هایی وجود دارد. برای نمونه، مثال کاملی در ادامه آورده شده است که نشان می دهد شما چه می توانید بکنید:

const int a = 10;
const float b = a * 2.5f;

const string s1 = “Hello, world!”;
const string s2 = s1 + ” How are you?”;

از سوی دیگر؛ شما نمی توانید از نتیجه فراخوانی متد یا اعضای غیر ثابت کلاس استفاده کنید؛ زیرا اینها عبارت های ثابتی نیستند. در ادامه دو مثال از آنچه نمی توانید انجام دهید آورده ایم:

// NOT possible:
const int a = Math.Cos(4) * 2;
// Possible:
const string s1 = “Hello, world!”;
// NOT possible:
const string s2 = s1.Substring(0, 6) + ” Universe”;

آنچه که انتظار می رود کامپایلر هنگام رسیدن به کد شما درک بکند؛ محل تفاوت است. به عنوان مثال، اعداد، رشته ها و ثابت های دیگر به درستی توسط کامپایلر دریافت نمی شود.

یک جایگزین برای ثابت ها: فیلد فقط خواندنی

اگر به دنبال نسخه ای هستید که محدودیت کمتری نسبت به کلاس ثابت ها داشته باشد؛ ممکن است بخواهید نگاهی به کلیدواژه readonly داشته باشید؛ البته در سطح متد در دسترس نیست؛ اما می توانید از سطح کلاس ها از این کلید واژه استفاده کنید تا یک فیلد را تعریف نمایید که تنها در طول اعلام کردن یا اجرای یکی از متدهای سازنده ی کلاس؛ می تواند اصلاح بشود. بنابراین؛ به محض این که شیء برای استفاده در دسترس قرار می گیرد؛ فیلد فقط خواندنی همان مقدار را خواهد داشت که دیگر توسط کاربر قابل تغییر نیست. بیاید یکی از آنها را امتحان کنیم:

class SomeClass
{
private readonly DateTime rightNow;
public readonly DateTime later = DateTime.Now.AddHours(2);

public SomeClass()
{
this.rightNow = DateTime.Now;
}
}

بنابراین، دو فیلد فقط خواندنی داریم: اولین آنها خصوصی و دومی عمومی است (ما معمولاً ویژگی هایی برای آنها داریم؛ که بعداً به آنها می رسیم). اولین فیلد بدون مقدار بیان شده است (می توانیم فیلدها را بدون مقدار بیان کنیم؛ اما با ثابت ها نمی توانیم این کار را انجام دهیم)؛ در حالی که فیلد دوم بلافاصله مقدار دهی می شود. شما همچنین می توانید مشاهده کنید که ما از کلاس DateTime به عنوان نوع داده استفاده کرده ایم و یک مقدار غیر ثابت را به آن اختصاص داده ایم). به عبارت دیگر؛ موارد زیادی وجود دارد که نمی توانیم در استفاده از ثابت ها به کار ببریم ولی در به کارگیری آنها در حالتی که از فیلدهای فقط خواندنی استفاده می کنیم؛ مشکلی وجود ندارد؛ به این ترتیب فیلدهای فقط خواندنی جایگزین مناسبی برای ثابت ها هستند.

توجه داشته باشید که چگونه مقداری را به فیلد rightNow در سازنده ی کلاس SomeClass اختصاص دادیم. همان طور که پیشتر ذکر شده است؛ این آخرین شانس برای تخصیص یک مقدار به یک فیلد فقط خواندنی است. پس از آن؛ چه در یک متدی درون کلاس در حال تعریف باشید یا خارج از آن؛ اگر سعی کنید مقداری را به فیلد فقط خواندنی اختصاص دهید؛ از کامپایلر خطا دریافت می کنید.

خلاصه

یک ثابت را درون دامنه یک متد یا در یک کلاس می توان تعریف کرد. این امر به شما اجازه می دهد مقداری را تعریف کنید که در هنگام کامپایل کردن برنامه شناخته شده است و دیگر قابل تغییر نمی باشد. آیتم های معمولی که برای ثابت ها به کار می رود؛ اعداد صحیح؛ رشته ها و متغیرهای بولی هستند. اگر به دنبال انعطاف پذیری بیشتری هستید؛ سعی کنید فیلدهای فقط خواندنی را امتحان کنید که در بالا شرح داده ایم.

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in,

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست