در قسمت قبل با یک برنامه ی ساده شروع کردیم که تنها در خروجی یک پیغام را چاپ میکرد، در این قسمت قصد داریم با متغیرها (variables)، عملگرها (operator) و value type بیشتر آشنا شویم.
شاید هیچ سازه ای به اندازه ی متغیرها برای یک زبان برنامه نویسی اهمیت نداشته باشند. متغیر در واقع مکانی در حافظه است که میتوان یک مقدار را به آن اختصاص داد. به این دلیل به آن متغیر میگویند که مقدار آن میتواند در طول اجرای برنامه تغییر کند. به عبارت دیگر محتوای متغیرها قابل تغییر هستند و همیشه ثابت نمیمانند.
ویژوال استودیو را اجرا کنید و یک پروژه جدید بسازید اگر این کار را نمیتوانید انجام دهید حتماً قسمت قبل را مطالعه بفرمایید.
به برنامه زیر دقت کنید، این برنامه دو متغیر را که اسم آنها 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 را در خروجی نمایش میدهد که قبل از آن رشتهی ” 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 اصولاً به نمایندگی از کاراکتر استفاده میشود که در مقالات آینده در مورد آن صحبت خواهیم کرد:
در قسمت بعدی با چندین مثال به تشریح کاملتر مباحثی که در اینجا به صورت تئوری بیان شد میپردازیم. همچنین فراموش نکنید که حتماً سوالات و مشکلات خود را در هر قسمت بیان کنید تا موضوع برای شما و دیگر خوانندگان عزیز قابل فهمتر شود. ضمناً، سعی کنید که حتماً اصطلاحات انگلیسی استفاده شده در این مقالات را یاد بگیرید چرا که برنامه نویسی اصطلاحات زیادی دارد و اکثراً واژه ی معادل فارسی ندارند یا در صورت داشتن، معادل فارسی آنها آنچنان که باید مناسب نیست و ما ترجیح میدهیم که از واژه و اصطلاحات اصلی آنها استفاده کنیم.
امین
12 September 2012
سلام اقا دمتگرم خیلی مردی…تو هر سایتی میریم زده خرید
علیرضا
12 September 2012
Excellent
mohamad
13 September 2012
سلام و خسته نباشید
ممنون از سایت خوبتون
من 1 سوال داشتم :
خواستم بدونم شما چرا توی سایتتون قسمت سرچ کردن رو قرار ندادین ؟
یا اگر هم هست راهنمایی کنید تا پیداش کنیم
بازم ممنون از سایت خوبتون
واقعا خسته نباشید
امیر سروری
13 September 2012
سلام محمد عزیز . ممنون از نکته ای که گفتین ، بله در وب سایت قسمت سرچ وجود نداره در حال حاضر و این هم دلیلش تغییرات ساختاری بود که در وب سایت انجام شد و مطمئن باشید در یک یا دو روز آینده این بخش اضافه خواهد شد . موفق باشید .
داوود
14 September 2012
سلام
باز هم یه دنیا ممنون از آموزشهای خوبتون،
فقط چرا این قسمت کمی دیرتر اومد؟برای من که بیصبرانه منتظر آموزشهای شما هستم و دوست دارم هر روز یک آموزش جدید رو بخونم تاخیر بیشتر از یک روز کمی سخته.
دو تا پیشنهاد:
دوست عزیزم آقا مسعود؛ احساس میکنم متغیرهای ارجاعی و مقداری رو مقداری کمتر توضیح دادید(منظور نحوه قرار گیری در حافظه هستن)، آیا در هنگام متغیرهای ارجاعی میخواین بیشتر و مبسوط تر توضیح بدید؟ ببخشید که تعیین تکلیف کردم.
همچنین امکانش نیست که در هر قسمت چند تا سوال مطرح کنید تا ما پاسخها و احیانا برنامه ها رو بفرستیم؟
اگه ما مباحث شما رو درس به درس و همراه با تمرین و پشتکار پیش بریم امکانش هست که بتونیم پروژه های خوب انجام بدیم؟
بازهم ببخشید و عذر میخوام ازتون.
ممنونم.
مسعود درویشیان
14 September 2012
سلام
ممنون که دنبال میکنید. دوست عزیز روزی یه آموزش که غیر ممکنه، آموزشها روزهای یکشنبه و چهارشنبه هر هفته منتشر میشه.
بعضی موارد مثل Reference type رو الان نمیشه کامل توضیح داد چون هنوز زمانش نرسیده و در جای خودش کامل توضیح داده میشه.
بله حتماً تمرین داده میشه تا شما و بقیه دوستان حل کنید ولی باید بحث رو به یه جایی رسوند که تمرین رو بهتون بدیم، شما هم حتماً برای یادگیری باید تمرینها رو حل کنید و برای ما بفرستید. تمرینهایی که قراره انجام بدید همگی آماده شده و توی قسمتهای آینده بهتون داده میشه که انجام بدید.
موفق باشید
نوید
15 September 2012
سلام؛
من به تازگی با این وب سایت آشنا شدم، واقعا از مطالب قشنگتون لذت بردم.
میخوام همه آموزشهای شما رو تا انتها دنبال کنم.
اگه از پستهای قبلی سوالی داشته باشیم باید تو همون پست مربوطه مطرح کنیم یا در آخرین پست منتشر شده؟
از شما بسیار بسیار سپاسگزارم.
مرسی
مسعود درویشیان
15 September 2012
سلام
ممنون از لطفی که نسبت به ما دارین
اگر سوالهاتون رو توی هر قسمتی که مربوط به همون موضوع هست بپرسید خیلی بهتره
موفق باشید
پروانه
18 September 2012
سلام آقا مسعود.
خسته نباشید. امید دارم که شما همیشه موفق هستید و می باشید.
ممنون از آموزشهای خوبتون
مسعود درویشیان
19 September 2012
سلام
ممنون از لطفتون
diho
22 September 2012
ممنون از مطالب بسیار خوبتون
شمارو مشتاقانه دنبال میکنیم
امیدوارم خسته نشید و تا آخرش کنار ما بمونید :)
مرسی
مسعود درویشیان
22 September 2012
سلام
ممنون که دنبال میکنید.
تا عزیزانی مثل شما به ما لطف دارن ما هیچ وقت خسته نمیشیم. مطمئن باشید این مقالات تا آخر با موفقیت پیش خواهد رفت.
محمد
11 October 2012
با تشکر از شما اعدادی بصورت نماد عملی رو چطور می شه وارد کرد؟!
مسعود درویشیان
13 October 2012
نمایش اعداد بهصورت نماد علمی
سمیرا
31 October 2012
واقعا نمیشه این آموزش خوب رو خوند و تشکر نکرد
خیلی خیلی ممنون از مطالب مفیدتون
مسعود درویشیان
31 October 2012
سلام خواهش میکنم
امیدوارم که بهدردتون بخوره :)
مهدی
15 November 2012
دستت درت نکنه داداش. بریم بعدی .
حانی
3 March 2013
سلام ممنون از آموزش های خوبتون. من هیچی هیچی از C#و کلا برنامه نویس نمی دونستم. با استفاده از آموزش های خوبتون و مطالعه یک کتاب شروع کردم. به نظرتون ممکنه یه روز من هم بتونم برنامه ای با c#بنویسم؟؟؟
یه سوال هم داشتم: می شه تو برنامه تنظیماتی را انجام داد که شماره خط ها را هم نشون بده؟ تو برنامه من نشون نمی ده!
مسعود درویشیان
3 March 2013
سلام مرسی که دنبال میکنید. بله که میتویند یه روز یه برنامه نویس عالی بشید :)
فقط باید خیلی زیاد تمرین کنید و دلسرد نشید…
هر قسمتی رو هم که متوجه نشدید بگید تا من سادهتر براتون توضیح بدم
واسه آوردن شماره خطها هم از منو tools برید توی option و بعدش از قسمت سمت چپ گزینهی Text Editor رو باز کنید. حالا تو زیرشاخههاش گزینهی All language رو انتخاب کنید و بعد توی قسمت سمت راست تیک line number رو بزنید و ok کنید.
حسن
4 March 2013
با عرض سلام و تشکر
ببخشید یه سوال: محدوده ای که برای اعداد اعشاری مشخص شده است به صورت دو بازه به نظر می رسد؛ یعنی اینگونه مشخص شده است که از یک عدد (مثبت، منفی) تا یک عدد (مثبت، منفی) دیگر. این به چه معناست؟ ممنون و متشکر از لطف شما
محمد فر
25 March 2013
سلام.میشه در مورد value type ها و ref type ها بیشتر توضیح بدید.مثلا مقدار اولیه انها چیه؟ یا از کجا به انها حافظه تخصیص داده میشه؟ heap یا ….
مسعود درویشیان
25 March 2013
قسمتهای بعدی رو مطالعه بفرمایید متوجه میشید.
Mersad
2 August 2013
سلام
ممنون از آموزش هاتون
من میخوام با استفاده از مقالات این زبون رو یادبگیرم.
به یه مشکل برخوردم. کد زیر پیغام خطا میده و اجرا نمیشه :
float z;
z = 10.3;
Console.WriteLine(z);
لطفا راهنماییم کنید.
مسعود درویشیان
3 August 2013
باید بعد از عددتون F بذارید.
محمد
21 August 2014
نفهمیدم چرا باید F بزارن؟
bahram
19 August 2013
سلام
اقا ممنون من تازه اومدم
اقا برنامرو وقتی اجرا میکنم خیلی سریع میره نمیتونم ببینم خروجی چی بوده
ممنون میشم راهنمایی کنید
مسعود درویشیان
20 August 2013
Ctrl + F5 رو باید بزنید یا از منوی Debug گزینهی start without debugging رو انتخاب کنید.
حمید
26 December 2013
و یا ابنکه در انتها اینو بنویسید:
Console.Read();
در اینصورت با F5 برنامه را با توقف احرا کنید.
آقا مسعود از آموزش خوبتون تشکر می کنم.
محمد
15 November 2013
واقعا عالیه خدا قوت
مرتضی
25 November 2013
سلام
واقعن عالی توضیح میدین.
من نه موقعی که کتاب دیتل اند دیتل رو میخونم و نه موقعی که سر کلاس میرم به این خوبی که شما توضیح میدین متوجه نمیشم. از ته قلبم آرزو میکنم همیشه موفق و سربلند باشید.
امام علی (ع) می فرمایند: هر کس به من کلمه ای بیاموزد مرا بنده خویش ساخته است.
با تشکر فراوان
مینا موسوی
14 December 2013
سلام
خسته نباشید. واقعا زحمت بسیار زیادی کشیدید برای تهیه چنین ماله کاملی
46 قسمت کار بسیار سنگین و زمانبری هست
امید که خداوند متعال توفیق و مددتون کنه
من بتازگی شروع کردم این اموزش و وقتی دیدم خیلی کامله تصمیم گرفتم تا اخر بیام اما یه سری اموزشهایی رو هم در وب میبینم که برای تمرین قصد دارم در کناراموزشهای شما انجام بدم بعنوان مثال این اموزش رو انجام میدم اما نتیجه اشتباهه چرا ؟
شروع اینه :
// cmdline.cs
//arguments: A B C
using System;
public class CommandLine
{
public static void Main(string[] args)
{
// The Length propert is used to obtain the length of the array.
// Notice that Length is read-only property:
Consol.WriteLine(“Number of command line parameters = {0}”, args.Length);
for(int i = 0; i < args.Length; i++)
{
Consol.WriteLine("Arg[{0}] = [{1}]", i, args[i]);
}
}
}
و در نتیجه باید جواب را در سه سطر بده اما فقط یک سطر جواب میده
جواب باید این باشه در نتیجه کنسول :
Number of command line parameters = 3
Arg[0] = [A]
Arg[1] = [B]
Arg[2] = [C]
ولی نتیجه ای از من بدست میاد اینه :
Number of command line parameters = 0
ممنون میشم راهنمایی کنید که کار این دستور چیه و چرا از مال من درست چاپ نمیشه
موفق باشید
مسعود درویشیان
14 December 2013
سلام ممنون از لطفتون. من پیشنهاد میکنم پله پله جلو برید. خیلی چیزا توی این مثال هست که توی مقالات زنگ سیشارپ یکی یکی توضیح داده شده
داود حاجی پور
20 December 2013
سلام و خسته نباشید ، واقعا از درس #C لذت بردم و خیلی بهم کمک کرد و مشتاقانه دارم بقیه درسها رو می خونم ازت متشکرم .
فرزانه
15 February 2014
سلام
من دو سال پیش سی شارپ کار کرده بودم.
اما از اونجایی که خیلی فراره چیزی یادم نمونده بود.
آموزشتون عالیه
توی دانشگاه فرصتی برای بیان جزئیات نیست.
اما شما همه چیزو کامل و با جزئیات شرح دادین.
این عالیه، دست مریزاد، خسته نباشید، یک دنیا تشکر
حسین
16 March 2014
سلام ممنون
این کد رو که اجرا میکنم هر عددی وارد میکنم
یه عددی بین 40 تا 59 چاپ میشه؟
چرا؟
int y,x;
x = Console.Read();
Console.WriteLine(“x Contains ” + x);
y = x / 2;
Console.Write(“y contains x / 2: “);
Console.WriteLine(y);
سعید
1 June 2014
آقا مسعود یه دونه ای
زهرا
25 June 2014
سلام
خسته نباشید
توضیحاتتون عالیه حرف نداره
محمد
21 August 2014
من دقیقا نفهمیدم نوعِ دسیمال با این که بازه ی کمتری نسبت به فلوت داره و نشون می فضاش هم کوچکتره و منفی هارو هم شامل می شه اما دقتش خیلی بیشتره!!!! چطور امکان داره
فاطمه
10 October 2014
با سلام
واقعا بهتون خدا قوت میگم
انشاا… به هر انچه که ارزو میکنید برسید ممنون از اموزش های خوبتون
محمد
15 October 2014
راستش چون خودم وب مستر هستم معمولا توی هیچ سایتی و واسه هیچ مطلبی کامنت نمیزارم . ولی آموزش های شما مجبور میکنه تشکر کنیم .
یه دنــــــــــــــــــیا متشکریم
Console.WriteLine(” ❤ “); | mrc
نعیمه
17 November 2014
سلام آقای درویشیان ممنون از اموزشای عالیتون
یه سوال داشتم اینکه لازمه ما همه Data Tpe ها و RAngeاونا و سایر مشخصاتشونو یاد بگیریم(حفظ کنیم؟)
ممنون از بذل علمتون
reza amin
6 December 2014
سلام اقای درویشیان مرسی از سایت خوبتون.من وقتی میخوام برنامم رو اجرا کنم نمیدونم چرا اجرا نمیشه و این اروور رو میدهError 1 Could not write to output file ‘c:\users\rasam\documents\visual studio 2010\miangin va jam\ConsoleApplication3\ConsoleApplication3\obj\x86\Debug\ConsoleApplication3.exe’ — ‘The directory name is invalid. ‘ ConsoleApplication3
javad
6 January 2015
سلام
سایت عالیه
عباس
20 October 2015
سلام و خسته نباشید خدمت شما آقای درویشیان.
ممنون بابت نوشتن زنگ سی شارپ.
ضمن تشکر مجدد باید بگم توی کدی که اول زنگ سوم نوشتید یه +Y جا افتاده.به شکل زیر:
CONSOLE.WRITELINE(“Y CONTAINS X/2” +Y); KHATE AKHAR
بازم ممنون بابت آموزش ها.
عباس
28 December 2015
سلام درود اقای درویشان عزیز بسیار ممنونم من امروز این سایت خوب تون پیداکردم.واقعا ممنون.
محمد
30 July 2017
سلام خسته نباشید
واقعا عالی توضیح دادید..
فقط یه سوالی که داشتم ایا سی شارپ برای بازی سازی تو یونیتی تفاوت داره با این اموزش های شما یا خیر؟
محمد
19 January 2018
سلام اموزش ها خیلی پایه و عالیه مخصوصا برای کسایی مثل من که تاحالا کار نکردن … ولی یه چیز رو نفهمیدم یعنی وقت دانشگاهم نشده بتونم بعضی چیزارو درک کنم … اون عکسا که قبلش گفتید type value اون عکساش چیه من کلا نفهمیدم ….
mostafa07
11 April 2019
درود بر شما.
بسیار سپاسگزارم از مهر شما
و آرزوی فردوسی تقدیم شما
همه ساله پیروز باشی و شاد
سرت پر زدانش دلت پر زداد.