زنگ سیشارپ – قسمت سوم
نوشته مسعود درویشیان • 02 خرداد 1391
در قسمت قبل با یک برنامهی ساده شروع کردیم که تنها در خروجی یک پیغام را چاپ میکرد، در این قسمت قصد داریم با متغیرها (variable)، value type و عملگرها (operator)بیشتر آشنا شویم.
شاید هیچ سازهای بهاندازهی متغیرها برای یک زبان برنامهنویسی اهمیت نداشته باشند. متغیر در واقع مکانی در حافظه است که میتوان یک مقدار را به آن اختصاص داد. بهاین دلیل به آن متغیر میگویند که مقدار آن میتواند در طول اجرای برنامه تغییر کند. بهعبارت دیگر محتوای متغیرها قابل تغییر هستند و همیشه ثابت نمیمانند.
ویژوال استودیو را اجرا کنید و یک پروژه جدید بسازید اگر این کار را نمیتوانید انجام دهید حتماً قسمت قبلی را مطالعه بفرمایید.
به برنامه زیر دقت کنید، این برنامه دو متغیر را که اسم آنها x و y است میسازد:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Example { class Program { static void Main(string[] args) { int x; int y; x = 100; // this assign 100 to x Console.WriteLine("X Contains " + x); y = x / 2; Console.Write("y contains x / 2: "); Console.WriteLine(y); } } }
وقتی برنامه را اجرا کردید (توسط Ctrl + F5) خروجی زیر برای شما نمایش داده میشود:
x contains 100
y contains x / 2: 50
این برنامه شامل چندین مفهوم جدید است که در ادامه به شرح آنها میپردازیم:
int x;
اعلام یک متغیر که نام آن x و نوع آن عدد صحیح (integer) است. در سیشارپ ، همهی متغیرها پیش از اینکه مورد استفاده قرار بگیرند ابتدا باید اعلام شوند. علاوه بر این، نوع مقداری را که متغیر در خود نگه میدارد باید مشخص شود. در این مورد x میتواند مقادیر integer (عدد صحیح) را در خود نگه دارد. در سیشارپ، برای اعلام یک متغیر از نوع عدد صحیح (integer) قبل از نام آن از کلمهکلیدی int استفاده میکنند. پس int x یک متغیر را اعلام میکند که اسم آن x و نوع آن integer (عدد صحیح) است.
int y;
توجه داشته باشید که در این مورد هم یک متغیر از نوع عدد صحیح ساخته میشود با این تفاوت که اسم آن فرق میکند. به صورت کلی شما برای اعلام یک متغیر از این الگو میتوانید پیروی کنید:
type var-name;
که type نوع متغیر و var-name نام متغیر را مشخص میکند. علاوه بر int سیشارپ از نوعهای دادهای (data type) دیگر هم پشتیبانی میکند که کامل بهشرح آنها خواهیم پرداخت.
x = 100;
این خط کد مقدار ۱۰۰ را به x اختصاص میدهد. در سیشارپ، عملگر انتساب یک تکمساوی است و بدین صورت عمل میکند که یک کپی از مقدار سمت راست خودش را در متغیر سمت چپش قرار میدهد.
خط کد بعدی مقدار x را در خروجی نمایش میدهد که قبل از آن رشتهی " X Contains" قرار دارد:
Console.WriteLine("x contains " + x);
در این خط کد علامت + موجب میشود که مقدار x بعد از string (رشته) نمایش داده شود. این روش میتواند یک حالت کلی بهخود بگیرد. با علامت + شما میتوانید آیتمهای دیگری را که میخواهید در یک ()WriteLine داشته باشید، به هم وصل کنید.
خط کد بعدی مقدار x را که بر ۲ تقسیم شده است به y اختصاص میدهد:
y = x / 2;
این خط کد مقدار x را بر ۲ تقسیم و سپس نتیجهی آن را در y ذخیره میکند. بنابراین بعد از اجرای این خط،y شامل مقدار ۵۰ میشود و مقدار x بدون تغییر باقی میماند. سیشارپ مانند تمام زبانهای برنامهنویسی طیف گستردهای از عملگرهای محاسباتی را پشتیبانی را میکند. از جمله این عملگرها:
دو خط بعدی برنامه:
Console.Write("y contains x / 2: "); Console.WriteLine(y);
دو چیز در اینجا جدید است: اول ()Console.Write است که رشتهی " :y contains x / 2" را در خروجی نمایش میدهد. تفاوت این دستور با دستور ()Console.WriteLine این است که وقتی خروجی بعدی تولید میشود از همان خط شروع میشود، نه از خط بعدی. دوم اینکه ()Console.WriteLine متغیر y را بهعنوان ورودی گرفته است و مقدار آن را در خروجی نمایش میدهد. پس توجه داشته باشید، هنگامی که میخواهید مقدار یک متغیر را در خروجی نمایش دهید کافی است اسم آن را در ()Console.WriteLine یا ()Console.Write وارد کنید. همانطور که مشاهده میکنید مقدار y در جلوی رشتهی :y contains x / 2 نمایش داده میشود زیرا برای چاپ این رشته از ()Console.Write استفاده کردیم ولی اگر از ()Console.WriteLine استفاده میکردیم مقدار y در خط بعدی نمایش داده میشد.
یک نکتهی جالب دیگر در مورد اعلام متغیرها این است که شما میتوانید دو یا بیشتر از دو متغیر را در یک تعریف متغیر اعلام کنید. فقط کافی است اسم متغیرها را با کاما از هم جدا کنید، برای مثال متغیرهای y و x را از این روش هم میتوان اعلام کرد:
int x, y;
همچنین نیازی نیست که ابتدا متغیر را تعریف کنید و بعد به آن مقدار بدهید، میتوانید این کار را همزمان با تعریف متغیر انجام دهید. بدین صورت:
int x = 100;
تا اینجا ما فقط از اعداد صحیح برای محاسبه استفاده کردیم، مثل عدد ۱۸ یا ۲۲ و غیره. برای استفاده از اعداد اعشاری مثل ۲۲.۵ یا ۱۵.۶ باید از نوع عددی double، float و decimal استفاده کنیم. نوع عددی float برای مقادیر ممیز شناور با دقت کمتر و نوع عددی double برای مقادیر ممیز شناور با دقت بیشتر است بهطوری که دقت double دو برابر float است. decimal یک دیتا تایپ ۱۲۸ بیتی است که در مقایسه با float و double از دقت بیشتر و بازهی کمتری برخوردار است و این خاصیت آن باعث میشود که برای محاسبات پولی و مالی بسیار مناسب باشد.
نوع float سی و دو بیتی است و بازهی اعداد آن را میتوانید در جدول زیر مشاهده کنید:
نوع دابل ۶۴ بیتی است و محدودهی آن در جدول زیر مشخص است:
بازهی تقریبی و دقت decimal را در جدول زیر میتوانید مشاهده کنید:
سیشارپ شامل دو دستهبندی برای data type (نوع اطلاعات) است:
- Value Type
- Reference Type
تفاوت بین این دو، مقداری است که آن متغیر دارد. برای value type، متغیر یک مقدار واقعی را در خود نگه میدارد مثل: ۲۲ یا ۳۴۵.۶ اما برای Reference type، متغیر یک ارجاع به Value را در خود نگه میدارد که این اکثراً در کلاس مورد استفاده قرار میگیرد. در مورد Reference type بعداً بیشتر صحبت خواهیم کرد، فعلاً به value type میپردازیم.
در جدول زیر لیست کاملی از تمام value type ها را میبینید:
سیشارپ همچنین ۹ integer type را تعریف میکند که char، byte، sbyte، short، ushort، int، uint، long، ulong هستند و هرکدام بازهی خاصی از اعداد را شامل میشوند. در جدول زیر بازهی عددی و تعداد بیت هریک را میبینید. نوع char اصولاً به نمایندگی از کاراکتر استفاده میشود که در مقالات آینده در مورد آن صحبت خواهیم کرد:
در قسمت بعدی با چندین مثال به تشریح کاملتر مباحثی که در اینجا به صورت تئوری بیان شد میپردازیم. همچنین فراموش نکنید که حتماً سوالات و مشکلات خود را در هر قسمت بیان کنید تا موضوع برای شما و دیگر خوانندگان عزیز قابل فهمتر شود.
ضمنا، سعی کنید که حتماً اصطلاحات انگلیسی استفاده شده در این مقالات را یاد بگیرید چراکه برنامهنویسی اصطلاحات زیادی دارد و اکثراً واژهی معادل فارسی ندارند یا در صورت داشتن، معادل فارسی آنها آنچنان که باید مناسب نیست و ما ترجیح میدهیم که از واژه و اصطلاحات اصلی آنها استفاده کنیم.
توجه: زین پس انتشار مقالات زنگ سیشارپ در وبلاگینا متوقف و از ابتدا در وبتارگت منتشر میشود و حدوداً تا صد قسمت همراه با دانلود مقالات در قالب فایل پیدیاف پیش خواهد رفت.
کالارنا
این آموزشت هم خیلی عالی بود مسعود جان ممنونم
ابالفضل
آموزشتون عاليه
چنتا پيشنهاد داشتم
1. مقدار هر درس رو افزايش بدين
2. در صورت امكان فاصله آموزش ها رو كم كنين
3. براي هر درس چنتا تمرين بدين
4. ميدونم زوده! اما از مثال هاي عملي تر استفاده كنين
ولي در هر صورت اين كارتون خيلي خوبه و واقعن جاي تشكر داره
اميدوارم اين آموزش ادامه پيدا كنه و قطع نشه
ممنون
مسعود درویشیان
مرسی ابالفضل جان بهخاطر پیشنهادهای خوبت.
1. مقدار هر قسمت بسته به نیازش هست.
2. راستش فاصله آموزشها رو دیگه ازین کمتر نمیشه کرد چون خودم هم وقتش رو ندارم که مثلاً هفتهای سه قسمت منتشر بشه!
3. حتماً تمرین خواهیم داد که دوستان برای خودشون حل کنند و مقالاتی هم تحت عنوان حلتمرین و رفعاشکال خواهیم داشت.
4. مثالها در ابتدا ساده هستند، جلوتر که برویم مثالهای کاربردیتری میزنیم.
ممنون
موفق باشید
عمران
سلام
خیلی ممنون از آموزشتون. امیدوارم به همین خوبی و نظم ادامه پیدا کنه و منم بتونم استفاده کنم.
موفق باشید.
محسن
بازه های متغیرها و اینکه هر کدوم چقدر فضا توی حافظه اشغال میکننن؛ اینهارو چطور به خاطر بسپاریم؟
آیا لازمه همه شو بدونیم؟
مسعود درویشیان
دوست عزیز اصلاً نیازی به حفظ کردن نیست همینکه بدونید از هر دیتاتایپ برای چه منظور استفاده میشه کافیه و ترجیحا بازهاش رو هم بدونید خوبه. توی دنیای برنامهنویسی شما اگه بهخواهید همهچیز رو حفظ کنید که دیگه…!! چون اینقدر مطلب زیاد هست که اصلاً حتی فرصت خوندن هم پیدا نمیکنید چه برسه که حفظ کنید….
شما باید یک چیز رو با تمرین زیاد توی ذهنتون ثبت کنید نه با حفظ کردن
موفق باشید
mahdieh
thank you very much.
سید مهدی شاه امیریان
در تصویر اول خط 21 به اشتباه از دستور ()Console.WriteLine استفاده شده که در ادامه مطلب صحیح اون رو به دوستان گفتید.
هرچند این مباحث برام تکراری هست اما از دنبال کردنش لذت میبرم امیدوارم سریع تر برسیم به مطالبی که جذابیت بیشتری دارن
مسعود درویشیان
مرسی مهدی جان که یادآوری کردی
اصلاح شد 🙂
مملی
آقا دستت درد نکنه هرجا گشتم آموزش از این ساده تر و سهل الوصول تر پیدا نکردم خیلی زحمت می کشی فقط خواهش می کنم یه وقت خدای نکرده وسطش این پروژه را رها نکنی که من از غصه می میرم
راستی خواهش میکنم هر چند جلسه یکبار، یک فایل PDF خودتون زحمت بکشین بذارین از درسهای جلسات قبل که هم امضای خودتون پای کار باشه هم آدرس وبسایت مفیدتون تا بیش از پیش دیگران هم به جذب این سایت و مطالب مفیدش بشن
بازم از زحماتتون متشکرم
میلاد
با سلام
مطالبتون واقعا بدرد بخوره
ممنون
اگر امکان دارد در باره شی گراییی در C یا #C هم مطالبی ذکر کنید.
مسعود درویشیان
سلام
این مطالب پیوسته طی مقالات بعدی کاملتر میشوند و همهی فصول رو در بر میگیرند، از جمله مبحث شیگرایی
نسیم
عالی است
سهیل
ممنون خیلی خوب بود.
رضا
ممنون، امیدوارم همینطور ادامه بدید
شکوفه
مطالب زنگ سی شارپ خیلی آموزنده هستند…گرچه در ابتدای راه واسم خیلی آسونه اما مطمئنا به مطالب پیچیده ترش هم خواهیم رسید.
خواستم تشکر کنم از وبلاگینا و مخصوصا آقای مسعود درویشیان
فقط یه سوال داشتم و اونم اینه که فقط تو محیط کنسول قراره درس بدید؟
آیا ویندوز فرم اپلیکیشن هم درس داده خواهد شد یا خیر؟
amini
ممنون از آموزش فوق العاده تون… بی نظیرید… خدا کنه از آموزش دلسرد نشید و با قدرت ادامه بدید
عاطفه
این مطالب برام خیلی اموزندست فقط اگه ممکنه براتون بیشتر تو محیط ویندوز فرم اپلیکیشن درس بدید
چطور پایه برنامه نویسیمو قوی کنم؟
mona
خیلی خوبه ممنون
میخواستم اگه میشه در مورد فم گزارش وکدهایی که در سی شارپ برای آن به کارمیرود هم توضیح دهید
طراحی دکوراسیون داخلی
من C++ بلدم.سی شارپو خیلی راحتتر دارم یاد میگیرم.
تا این قسمت که سوالی ندارم.
sepide
سلام
آموزشتون خیلی عالیه 🙂 راستش واسه پروژه دانشگام همشو کپی کردم 🙁 با اجازتون