من می خواهم برنامه نویس شوم - قسمت هفتم

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

در سایت های متعددی بصورت پراکنده نحوه اجرای اولین خط برنامه به زبان java یا php یا دیگر زبان های اشاره شده را آموزش داده اند اما برای انسجام مطلب برای هرکدام از زبان ها و با توجه به سیستم عامل های مختلف مقالاتی برای نصب نرم افزارهای مورد نیاز و اجرای اولین خط برنامه وجود دارد (همچنین آموزش هر زبانی را که شروع کنید از ابتدایی ترین دروس آماده سازی محیط است که در هر سیستم عاملی نصب نرم افزارهای مورد نیاز را به شما خواهند آموخت).

در سری آموزشی پیش رو سعی داریم اجرای اولین برنامه ساده که چاپ کلمه «سلام دنیا» است را در زبان های C++, C#, Java, Python, PHP و swift به شما آموزش دهیم و توضیحات لازم راجع به هر خط آن را نیز اضافه کنیم.

برای شروع سایت های زیادی وجود داشت که بنده سایت ideone.com را انتخاب کردم به دلیل اینکه زبان هایی که برای شروع نیاز داشتم را پشتیبانی می کرد. و دوما کاربری ساده و راحتی دارد. هنگام ورود به سایت یک باکس متنی برای ورود کدهای شما وجود دارد. همچنین چند دکمه در قسمت پایین آن

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

چون پس از کلید run یا اجرا برنامه شما در این سایت ذخیره می شود دکمه کره زمین و عینک برای خصوصی بودن و عمومی بودن کد شما قرار داده شده.

C#:          https://ideone.com/3Zgxtf
C++:        https://ideone.com/aQlhXM
Java:       https://ideone.com/ZC664s
php:         https://ideone.com/Yz0bf9
swift:       https://ideone.com/ccs7Zz
Python3: https://ideone.com/FxIQ4F

در مقابل هر زبان لینک کد اولیه مربوطه وجود دارد که میتوانید بر روی آن کلیک کنید.

در صورتی که دو قسمت قبل را مطالعه نکرده اید و یا فراموش کرده اید حتما یک بار دیگر مطالعه کنید. در قسمت های قبل راجع به کلاس، شی و تابع توضیحاتی داده شده است. و اکنون در لینک های فوق شما نحوه تعریف کلاس، ساخت شی و فراخوانی یک تابع از شی آن کلاس را بصورت عملی مشاهده می کنید.

توضیحات مربوط به مثال های بالا را خواهید خواند اما بصورت کلی تفاوت هایی بین این زبان ها وجود دارد. مثلا در تمام مثال ها بجز swift و python استفاده از سِمی‌کالن ( ; ) اجباری می باشد.

در تمامی آن ها بجز پایتون (توضیح داده خواهد شد) استفاده از کروشه {} برای مشخص کردن محدوده دستورات یک کلاس یا یک تابع و ... اجباری می باشد که بسته به زبانی که دوست دارید با آن کار کنید به روش و ساختار آن عادت خواهید کرد.

توضیح خط using System در سی شارپ و include در سی پلاس پلاس:

زبان های برنامه نویسی شامل کتابخانه های مختلفی (library) هستند که شما از توابع موجود در آن ها استفاده می کنید (البته ذهنتان سمت کتابخانه عمومی نرود. اینجا از کتاب رمان و فلسفه خبری نیست. مجموعه ای از دستورات است که در قالب اسامی دسته بندی شده اند و شما با فراخوانی نام آن مجموعه به دستورات زیر مجموعه آن دسترسی پیدا میکنید)

مثلا چاپ یک کلمه در خروجی، در سی شارپ دستور یا تابع WriteLine است که قرار است یک مقدار را بگیرد و عینا چاپ کند. مثلا در اینجا از کتابخانه System استفاده شده، و شما در داخل برنامه مشاهده می کنید نوشته شده Console.WriteLine یعنی تابع WriteLine از کلاس Console فراخوانی شده است که این کلاس در کتابخانه System قرار دارد. در برخی زبان ها وقتی از دستورات یک کلاس از پیش نوشته شده (مانند console در سی شارپ) استفاده می کنید ابتدا باید مشخص کنید که کلاس های استفاده شده در کد مربوط به کدام کتابخانه ها است و باید کجا به دنبال آن بگردد. شاید خودتان بخواهید کلاسی همنام console ایجاد کنید و دستور WriteLine آن کار دیگری انجام دهد. پس به جای system آدرس مجموعه خود را خواهید داد که از هدف این مقاله خارج است.

پس طبق قرارداد باید بگوییم از کتابخانه System قرار است استفاده کنم. یا در سی پلاس پلاس از تابع Cout استفاده شده که تابعی است در کتابخانه iostream (کتابخانه مجموعه ای از کلاس ها است حتی اگر یک کلاس باشد)

نگران این نباشید که کدام کتابخانه شامل چه کلاس ها و توابعی است شما هرچند قرار نیست آن ها حفظ کنید اما اکثرا چون روتین هستند به مرور در استفاده در خاطر شما خواهند ماند و یا در صورتی که به دنبال دستور خاصی در زبانی که با آن کد میزنید هستید حتما توضیحات کامل راجع به آن دستور وجود دارد از جمله اینکه در کدام کتابخانه است.

همچنین شما قرار است در نرم افزارهایی تحت عنوان محیط های توسعه کد (IDE) معادل کلمه Integrated Development Environment کد بزنید. ساده ترین آن ها نرم افزارهایی مانند notepad++ است (البته نوتپد ide نیست) که صرفا جهت خوانا تر شدن کد بسته به زبانی که کد آن را می نویسید کلمات کلیدی مانند کلمه Class را برای شما با رنگ دیگری نشان می دهد و پیچیده ترین آنها مانند Visual Studio و IntelijIdea و Netbeans و Eclipse و ... می تواند زمانی که نام دستور را وارد می کنید کتابخانه مربوط به آن را بصورت خودکار در ابتدای فایل برای شما وارد کند.

توضیح خط دوم مربوط به using namespace std در سی پلاس پلاس

کلمه namespace را احتمالا در زبان های دیگر نیز مشاهده کنید. و برای ساده تر شدن نوشتن کدهای شماست. زبان برنامه نویسی با توسعه روز افزون سعی میکند کدهای شما را ساده تر. اجرای آن را سریع تر و دستورات بیشتر و در نتیجه امکانات بیشتری به شما دهد. مثلا در مثال قبل اگر چندین کتابخانه دیگر را وارد کنید نیاز نیست بگویید Console مربوط به کدام است. همین که کتابخانه آن بین دیگر کتابخانه ها وارد شده باشد کامپایلر خود مسیر آن را بین آن ها پیدا خواهد کرد.

در زبانهایی که namespace وجود دارد به زبان ساده شما بیان می کنید توابعی که در این فایل استفاده شده است می تواند در کلاسی که نام آن را اینجا می نویسم وجود داشته باشد. مثلا تابع Cout در کلاس استاندارد با نام (std) قرار دارد. اگر در سی شارپ وجود داشت مثلا بجای Console.WriteLine فقط کافی بود بنویسید WriteLine اما باید namespace مربوط که Console است را استفاده میکردین.

شما حتی می توانید تابع Cout خودتان را با هر هدفی بنویسید و از کلاسی که توسعه داده اید بجای std استفاده کنید. اما اکنون این خط را هم به عنوان قرارداد در سی پلاس پلاس بپذیرید برای استفاده از مجموعه دستورات مربوط به iostream باید بگویید فضای نام شما std است و برنامه را شروع به نوشتن کنید.

توضیحات تعریف کلاس:

در قسمت آموزش شی گرایی با کلاس ها آشنا شده اید. در اکثر زبان های برنامه نویسی برای تعریف کلاس از کلمه کلیدی class استفاده می شود و نامی که بعد از آن نوشته میشود اسم کلاس شما خواهد بود که در اینجا به جز جاوا که اسم آن را Main گذاشته ایم بقیه Virgool است، نام گذاری انجام شده برای این است که بدانید هر نامی می تواند باشد. همانطور که قبلا گفته شد بهتر است نامی متناسب با کاری باشد که کلاس شما قرار است انجام دهد.

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

به استثنای پایتون تمام آنچه داخل کروشه {} یا (curly braces) بعد از نام کلاس نوشته می شود متعلق به آن کلاس است. در یک فایل ممکن است شما چندین کلاس تعریف کنید (البته معمولا هر کلاس در یک فایل منحصر به فرد نوشته می شود). و همانطور که قبلا اشاره شد اجزای کلاس شامل متغیر ها و توابع هستند و معمولا هیچ دستوری مستقیما داخل کلاس نمی توان نوشت و باید دستورات در توابع قرار گیرند.

هرچه داخل کروشه باشد را یک بلوک کد (program blocks)‌ می گوییم. کلاس دارای یک بلوک کد است که خود دارای چند بلوک کد می شود (مثلا توابع کلاس) همچنین در زبان هایی مانند جاوا یک کلاس می تواند بلوک کد هایی خارج از توابع و مربوط به خود کلاس هم داشته باشد که فعلا کاری با آن نداریم اشاره شد تا کسانی که با آن برخورد کردند در گوشه ذهن داشته باشند.

هر کروشه باز باید یک کروشه بسته معادل آن داشته باشد. در برنامه های فوق اولین کروشه باز متعلق به کلاس و آخرین کروشه بسته هم برای بستن آن کلاس است. ساختار سلسله مراتبی را تصور کنید که باید رعایت شود و مجموعه یک کروشه باز + کد +‌ کروشه بسته که یک بلوک کد است.

در زبان پایتون این سلسله مراتب و بلوک های کد با ایجاد فاصله (while white space) رعایت می شوند، اگر در حال مطالعه پایتون هستید نگاهی دقیق تر به آن بیاندازید. خط def func با یک فاصله دقیقا بعد از تعریف کلاس آن و تمام کد های متعلق به آن را زیرمجموعه کلاس قرار داده است. و خط بعد دستور print با یک فاصله بیشتر آن را متعلق به تابع کرده است.

توضیح تعریف تابع:

همانطور که پیش تر توضیح دادیم توابع مجموعه ای از فرامین هستند که با فراخوانی نام تابع دستورات آن اجرا می شوند. همانطور که گفته شد بلوک کد اینجا هم باید رعایت شود. تعریف تابع در زبان های مختلف متفاوت است. در زبان های پایتون، سویفت و پی اچ پی مانند تعریف کلاس نیاز به یک کلمه کلیدی است. در پی اچ پی function، در سویفت func و در پایتون def اما در زبان های جاوا و سی پلاس پلاس نیازی نیست.

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

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

به مرور همه آنها را با توجه به زبانی که با آن کار می کنید خواهید آموخت. چون مثلا modifier ها در زبان C# و زبان php متفاوت است و مربوط به سطوح بالاتری هستند که اکنون نیازی به دانستن آن نیست.

تابع را همانطور که تعریف شده اند قبول می کنیم (نحوه تعریف در هر زبان را به آموزش آن زبان واگذار کرده و فقط با نام تابع کار داریم) و داخل آن را بررسی می کنیم. همه این توابع شامل یک خط کد هستند که با استفاده از دستور چاپ مربوط به آن زبان یک مقدار رشته ای (حروف و کلمات - String) را در خروجی نمایش می دهد.

برای نوشتن در خروجی این دستور را در زبانی که قرار است کار کنید حفظ کنید و فرمت آن را آن طور که هست رعایت کنید.

همانطور که در برنامه ها مشاهده میکنید در C# و جاوا با اتمام کلاس برنامه نیز تمام می شود. تنظیمات مربوط به کامپایل به صورت پیش فرض طوری تنظیم شده اند که تابع اصلی داخل کلاس اصلی برنامه را فراخوانی می کنند.

در C++ تابعی با نام main باید وجود داشته باشد بصورت پیش فرض تابع main باید خارج از کلاس نوشته شود و این تابع فراخوانی خواهد شد.

برای بقیه زبان های این مقاله باید یک شی از کلاسی که ساخته ایم ایجاد کنیم و تابع مورد نظرمان را خودمان صدا کنیم. چون در C++ تابعی با نام main باید وجود داشته باشد دستور ایجاد شی و فراخوانی تابع را داخل آن می نویسیم در دیگر زبان ها آنچه خارج از بلوک کد باشد حتما اجرا خواهد شد.

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

https://virgool.io/CodeLovers/%D9%85%D9%86-%D9%85%DB%8C-%D8%AE%D9%88%D8%A7%D9%87%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D8%B4%D8%AA%D9%85-rvnomghvjuwe