در قسمت سوم آموزش سی شارپ توضیحات مختصری در مورد value type، متغیر (variable) و عملگرها (operators) داده شد. در این قسمت با چند مثال به تشریح کاملتر آنها خواهیم پرداخت. همانطور که در قسمت قبل گفته شد، data types به دو دسته ی value types و reference types تقسیم میشوند و دانستید که سیزده value types داریم.
در مجموع به این سیزده ولیو تایپ، simple types میگویند و دلیل این نامگذاری این است که اینها شامل مقدار تکی (singleValue) هستند و به عبارت دیگر، ترکیبی از دو یا بیشتر از دو مقدار نیستند
Float و Double
به مثال زیر توجه کنید:
;using System
;using System.Collections.Generic
;using System.Linq
;using System.Text
namespace ExFloat
}
class Program
}
static void Main(string[] args)
}
;int i = 25
;float f = 16.8F
;float result = i / f
;Console.WriteLine("Result is: " + result)
{
{
{
همانطور که مشاهده میکنید متغیر i مقدار ۲۵ را در خود ذخیره کرده است و متغیر f که از جنس float است مقدار ۱۶.۸ را در خود نگهداری میکند. نکته ی float اینجاست که باید بعد از آن از پسوند F یا f استفاده کنید:
دلیل اینکار این است که اعداد اعشاری به صورت پیش فرض double هستند و برای اینکه یک مقدار را به صورت float ذخیره کنید باید حتماً از پسوند F یا f استفاده کنید، در غیر این صورت کامپایلر به شما پیغام خطا میدهد و به شما میگوید که نمیتوانید یک مقدار از جنس double را در متغیری از جنس float ذخیره کنید.
در اینجا مقدار متغیر i را بر مقدار متغیر f تقسیم کردیم و نتیجه ی آنرا در متغیری به اسم result که از جنس float است ذخیره کردیم.
;Console.WriteLine("Result is: " + result)
در نهایت مقدار result را در خروجی نمایش دادیم:
Result is: 1.488095
اگر همین مثال را برای double انجام دهیم همانطور که در قسمت قبل گفته شد، خواهیم دید که دقت دابل بیشتر از float است:
static void Main(string[] args)
}
;int i = 25
;double d = 16.8
;double result = i / d
;Console.WriteLine("Result is: " + result)
{
:خروجی
Result is: 1.48809523809254
یکی از موارد خیلی عالی در سی شارپ، تدارک دیدن نوع Decimal برای محاسبات مالی است. نوع دسیمال با بهره گیری از ۱۲۸ بیت برای نشان دادن مقادیر در محدودهی ۲۸-۱۰ * ۱٫۰ و ۱۰۲۸ * ۷٫۹ استفاده میکند. در محاسبات معمولی ممیز شناور، خطاهای گرد کردن گوناگونی رخ میدهد. نوع دسیمال این خطاها را از بین میبرد و دقیقاً تا ۲۸ رقم اعشار (در بعضی موارد ۲۹ رقم اعشار) را نشان میدهد. این توانایی نشان دادن مقادیر اعشاری بدون خطای گرد کردن، نوع Decimal را برای محاسبات پولی و مالی بسیار مناسب میکند. به دلیل اینکه مقادیر پولی در اپلیکیشن های تجاری بسیار با اهمیت هستند، بسیاری از برنامه نویسان سی شارپ اغلب برای این منظور از نوع Decimal استفاده میکنند. برای مشخص کردن اینکه عدد شما از نوع Decimal است، باید به عدد خود کاراکتر M (یا m) را اضافه کنید:
;decimal d = 12.30M
اینکار ضروری است چرا که در غیر این صورت مقدار متغیر به عنوان double تفسیر میشود (مقادیر اعشاری به صورت پیشفرض double هستند).
در اینجا یک مثال برای شما در نظر گرفته ایم که با استفاده از نوع Decimal بتوانید قیمت نهایی را همراه با تخفیف، با توجه به قیمت اصلی و درصد تخفیف به دست آورید:
;using System
;using System.Collections.Generic
;using System.Linq
;using System.Text
namespace test
}
class Program
}
static void Main(string[] args)
}
;decimal price
;decimal discount
;decimal discountedPrice
.Compute discounted price//
;price = 19.95m
%discount = 0.15m; // discount rate is 15
;discountedPrice = price - (price * discount)
;Console.WriteLine("Discounted price: $" + discountedPrice)
{
{
{
:خروجی این برنامه
Discounted price: $16.9575
در این برنامه، در قسمتی که محاسبه تخفیف انجام میشود، الویت اول با پرانتزها است به طوری که ابتدا متغیر price در discount ضرب میشود، سپس حاصل آن از متغیر price کم میشود و در نهایت مقدار محاسبه شده ی نهایی در متغیر discountedPrice قرار میگیرد.
دریافت ورودی از کاربر
به مثال زیر که برای دریافت مقدار از ورودی است توجه کنید:
;using System
;using System.Collections.Generic
;using System.Linq
;using System.Text
namespace test
}
class Program
}
static void Main(string[] args)
}
;Console.Write("Please enter your name: ")
;()string userName = Console.ReadLine
;Console.Write("Please enter your surname: ")
;()string userSurname = Console.ReadLine
;Console.WriteLine("Hi there, {0} {1}!", userName, userSurname)
;()Console.WriteLine
{
{
{
و خروجی با توجه به اسم و فامیل شما اینچنین است:
در این مثال ما نام و نام خانوادگی کاربر را دریافت میکنیم و در نهایت یک پیغام خوش آمد گویی به کاربر نمایش میدهیم. هدف از این مثال این
است که شما بیاموزید چگونه یک مقدار (ورودی) را از کاربر دریافت کنید و چگونه آن را نمایش دهید و در صورت نیاز چه تغییراتی روی آن اعمال کنید.
به توضیحات برنامه بالا توجه کنید:
;Console.Write("Please enter your name: ")
با این خط کد شما به کاربر یک پیغام را نمایش میدهید که نام خودش را وارد کند. کاربر نام خودش را وارد میکند ولی این نام وارد شده که مسلماً string (رشته ای از کاراکترها) است در کجا ذخیره میشود؟! پس شما باید یک مکان را برای گرفتن این مقدار آماده کنید. کامپیوتر در نهایت همه ی اطلاعات را در خانه های حافظه (Ram) ثبت میکند که به صورت باینری هستند. حتی برنامه نویسان کارکشته و باتجربه هم ترجیح میدهند به جای استفاده از باینری، مستقیماً از اعداد، متن و نوشته استفاده کنند. زبانهای برنامه نویسی به شما اجازه میدهند که مکانهای خاصی را برای نگهداری اطلاعات در حافظه بوجود بیاورید، این مکانهای خاص همان متغیرها هستند که در قسمت قبل به شما معرفی کردیم.
شما تا اینجا یک پیغام را به کاربر نمایش دادید که نام خودش را وارد کند و اکنون میخواهیم نام کاربر را دریافت و ذخیره کنیم، خط کد بعدی این کار را برای ما انجام میدهد:
;()string userName = Console.ReadLine
در اینجا برای دریافت نام کاربر یک متغیر به اسم userName از جنس string تعریف کردیم تا نام کاربر را در آن ذخیره کنیم. اکنون ما نیاز داریم که این مقدار را از کاربر دریافت کنیم. دستور ()Console.ReadLine این کار را برای ما انجام میدهد و به این صورت عمل میکند که منتظر میماند تا کاربر مقداری را در پنجره کنسول تایپ کند و بهمحض اینکه کاربر کلید Enter را فشرد، هرچه را که تایپ کرده در متغیر userName ذخیره میکند. در اینجا ما هم زمان هم متغیر را تعریف کردیم هم مقدار ورودی را در آن قرار دادیم، ولی میتوانستیم ابتدا متغیر را تعریف کنیم، سپس مقدار ورودی را در آن قرار دهیم، بدین صورت:
;string userName
;()userName = Console.ReadLine
برای دریافت نام خانوادگی هم طبق همین روال پیش میرویم. همینطور که میبینید ما برای انتخاب نام متغیرها از userName برای اسم کاربر و از userSurname برای نام خانوادگی کاربر استفاده کردیم.
یکسری قرارداد و راهنمایی برای نام گذاری وجود دارد که به شما کمک میکند چگونه یک نام بسیار مناسب را انتخاب کنید تا اگر در زمان آینده به برنامه ی خود برگشتید دچار سردرگمی نشوید و علاوه بر آن از یک خوشنویسی در زبان سی شارپ بهره ببرید، به چند نمونه از این قراردادها و راهنمایی ها توجه کنید:
از space و نقطه گذاری نمیتوانید در انتخاب نام استفاده کنید.
از نام های ساده، خوانا و با معنی استفاده کنید.
خوانایی و با معنی بودن یک اسم را قربانی یک اسم کوتاه و عجیب و غریب نکنید.
از زیرخط، خط فاصله یا هر کاراکتری غیر از کارکترهای الفبایی استفاده نکنید.
از انتخاب اسم هایی که با کلمات کلیدی زبان برنامه نویسی تداخل دارند پرهیز کنید.
سی شارپ یک زبان case-sensitive است و اکثر برنامه نویسان به طور عمده از حروف کوچک برای نامگذاری متغیرها استفاده میکنند ولی اگر نام متغیر چند قسمتی باشد برای تمایز بین کلمات از حروف بزرگ استفاده میکنند برای مثال userName و userSurname که برای نام گذاری آنها را انتخاب کردیم، دو قسمتی (دو کلمه ای) هستند و userName از دو کلمهی user و name تشکیل شده است که برای تمایز بین آنها حرف N را بزرگ نوشته ایم و هر کلمه ای که به این اسم بخواهد اضافه شود حرف اول آن باید بزرگ باشد.
;Console.WriteLine("Hi there, {0} {1}!", userName, userSurname)
اگر شما این خط کد را با خروجی مقایسه کنید متوجه خواهید شد که چه اتفاقی افتاده است. رشتهی " ,Hi there" در خروجی نمایش داده میشود و نام کاربر به جای {۰} قرار میگیرد و نام خانوادگی کاربر در قسمت {۱} واقع میشود. اگر شما بخواهید مقدار یک متغیر را در خروجی همراه یک پیغام نمایش دهید میتوانید متغیر را با یک عدد در کروشه جایگزین کنید. کامپیوتر شمارش را از عدد صفر شروع میکند بنابراین userName متغیر شماره صفر میشود و مقدار آن در خروجی چاپ میشود همچنین userSurname متغیر شماره یک است. همانطور که میبینید بعد از string نام متغیرهایی را که میخواهیم مقدار آنها همراه با پیغام خوش آمد گویی نمایش داده شود، مینویسیم و به ترتیب userName به جای {۰} و userSurname به جای {۱} قرار گرفته میشود. اگر توجه کرده باشید همین کار را با استفاده از علامت + هم میتوانستیم انجام دهیم که بدین صورت میشد:
;Console.WriteLine("Hi there, " + userName + " " + userSurname + "!" )
همانطور که میبینید توسط علامت + متغیرها را به رشته ها متصل کردیم.
دستور آشنای آخر:
;()Console.WriteLine
این دستور وقتی به این صورت و بدون هیچ ورودی استفاده شود تنها یک خط خالی را چاپ میکند و معمولاً برای اینکه خروجی ها خواناتر باشند استفاده میشود.
منبع:webtarget.ir