Hello, Word! (C++)

قسمت 1 از دوره C++

معرفی

شروع به کار

نوشتن برنامه

حل یک مشکل

جمع بندی

معرفی
شروع به کار
نوشتن برنامه
حل یک مشکل
جمع بندی

در این پروژه قصد داریم اولین برنامه خودمان را بنویسیم که هدف آن نوشتن پیام “!Hello, World” روی صفحه است و می‌توان ادعا کرد که اولین کدی هست که هر برنامه نویسی می‌نویسد.

ابتدا به نصب ابزارهای مورد نیاز می‌پردازیم و بعد به نوشتن مثال اول این دوره که در زیر خروجی آن را مشاهده می‌کنید می‌پردازیم.

#include <iostream>

using namespace std;

int main() {
    cout << "Hello, World!" << endl;
}
Hello, World!

قبل از شروع به نوشتن برنامه باید تصمیم بگیرید که کجا می‌خواهید آن را بنویسید. نهایتا تمام کد های شما به صورت یک فایل متنی ذخیره می‌شوند و واقعیت این است که حتی با Microsoft Word هم می‌توان برنامه نویسی کرد؛ اما خب احتمالا یکی از بدترین انتخاب‌ها برای این کار است چرا که ابزارهایی تخصصی برای برنامه نویسی وجود دارند که آن‌ها را به اسم ادیتور می‌شناسیم. ادیتور پیشنهادی ما VSCode است که می‌توانید از code.visualstudio.com دانلود و نصب کنید.

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

یکی از کامپایلرها که نصب نسبتا راحتی دارد MSys2 هست که میتوانید از msys2.org دانلود و نصب کنید.
بعد از اتمام فرایند نصب MSys2 را باز کنید و دستورهای زیر را در آن اجرا کنید (کامند ها را کپی و در MSys2 با استفاده از رایت کلیک و گزینه پیست یا دکمه های Shift+Ins پیست کنید و بعد اینتر بزنید – دقت کنید که ctrl+v در Msys2 کار نمی‌کند)

pacman -Syu

به سوالات با Y جواب بدهید.
بعد از اجرای این command ترمینال شما بسته میشود. آن را مجدد باز کنید و این کامندها را اجرا کنید.

pacman -Su
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-gdb

حالا با فایل اسکپلورِر درایو سی را باز کنید و وارد فولدر msys64 بشید (یا اگر فولدر جای نصب رو عوض کردید وارد فولدر انتخابی خودتان بشوید)
و بعد فولدر bin را باز کنید.
و بالا در قسمتی که آدرس نوشته شده کلیک کنید تا بتوانید آن را کپی کنید.

C:\msys64\mingw64\bin

حالا وارد Advanced Settings بشید.

وارد تنظیمات Environment Variable ها بشید

و Path را مثل زیر آپدیت می کنیم.

درواقع Path متغیری هست که لیست همه جاهایی که سیستم باید بینشون برای کامندها بگردد را نگه می‌دارد و با اضافه کردن این مقدار ما کامپایلری که نصب کردیم رو به کامند های سیستم اضافه می‌کنیم.

ابتدا از طریق App Store ادیتور اپل یعنی Xcode را دانلود و نصب کنید.

معمولا اگر مراحل نصب Xcode را به درستی طی کنید کار شما همینجا تمام می‌شود ولی ممکن است نیاز باشد که کامند زیر را هم در Terminal اجرا کنید

xcode-select --install

اگر از یک distribution مبتنی بر Debian مانند Ubuntu استفاده می‌کنید، می‌توانید از کامند زیر برای نصب مجموعه‌ای از ابزار‌های کامپایل و بیلد برنامه‌ها استفاده کنید. (البته بهتر است قبل از نصب هر پکیجی لیست پکیج ها را با apt update به‌روز کنید)

sudo apt install build-essential

اگر از Fedora یا هر سیستم عامل دیگر مبتنی بر لینوکس Red Hat مثل CentOS استفاده می‌کنید هم می‌توانید از کامند زیر برای نصب پکیج‌های مربوط به توسعه برنامه استفاده کنید:

sudo dnf -y groupinstall "Development Tools"

بعد از نصب کامپایلر می‌توانید با اجرای کامند g++ --version در ترمینال VSCode از درستی نصب مطمئن شوید.

برای اجرا کدی که می‌نویسید می‌توانید پلاگین C/C++ از مایکروسافت را نصب کنید که یک دکمه run بالای ادیتور هنگام ویرایش فایل‌های سی‌پلاس‌پلاس شما اضافه می‌کند.

یا می‌توانید از همان ترمینال VSCode استفاده کنید و کامند زیر را اجرا کنید (بخش‌هایی که داخل <> نوشته شده‌اند باید بر اساس اسم فایلی که تعیین کرده‌اید تغییر کنند):

 g++ <cpp source file name> -o <file name> ; ./<file name>

یعنی مثلا اگر برنامه‌ای که در این مقاله می‌نویسیم را با نام hello-world.cpp (پسوند کدهای سی‌پلاس‌پلاس cpp است) ذخیره می‌کنید باید کامند زیر را اجرا کنید:

 g++ hello-world.cpp -o hello-world ; ./hello-world

بخش اول این کامند یعنی g++ hello-world.cpp -o hello-world برنامه شما را کامپایل و بخش دوم آن را اجرا می‌کند

اگر هم با گوشی راحت تر هستید، می‌توانید برای اندروید در گوگل پلی سرچ کنید C++ Compiler یا از آنلاین کامپایلرهای زیر استفاده کنید:

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

کل فرایندی که برنامه ما باید انجام بدهد نوشتن متن  “!Hello, World” به عنوان خروجی است؛ به بیانی دیگر باید Hello, World رو پرینت کنیم (این پرینت به معنای چاپ روی کاغذ نیست و منظور از آن خروجی دادن هست)

کل کدی که برای این کار لازم هست:

cout << "Hello, World!"

تقریبا می‌توان فهمید که چه اتفاقی دارد رخ می‌دهد. از cout برای ایجاد output یا نوشتن خروجی استفاده می‌کنیم و داریم Hello World رو میدیم به cout تا پرینتش کند.

شاید برایتان سوال باشد که << نشانه چیست. به گونه‌ای می‌توان ادعا کرد که این علامت کارش در اینجا نمایش دادن جهت جریان دیتا است. مثلا در این مثال می‌خواهیم Hello, World را برای خروجی بفرستیم پس فلش به سمت cout قرار می‌گیره.

سوال دیگه ای که شاید براتون به وجود بیاد این هست که علامت های " برای چی استفاده شدند. هر وقت بخواهید متن به کامپیوتر بدهید و نمی‌خواهید که کامپیوتر آن متن را پردازش کند باید متن را بین دو تا دابل کوتیشن یا همان " قرار بدید. در این مثال هم ما نمی‌خواهیم کامپیوتر خود متن Hello, World را درک کند بلکه می‌خواهیم آن را دقیقا همینطور که هست نگه داشته و در نهایت به کمک cout پرینت کند.

اما خب این کد قرار نیست اجرا بشه و چند تا مشکل داره که باید فیکسشون کنیم.

اولین مورد این که زبان ++C از شما انتظار دارد که آخر هر خط را با ; (semi-colon) مشخص کنید. پس:

cout << "Hello, World!";

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

اما اصلا تابع چی هست؟
در رابطه با توابع در پروژه‌های آینده صحبت می‌کنیم اما فعلا این رو بدونید که برای این که برنامه شما اجرا بشه باید کد اصلی آن را درون

int main() {

}

بنویسید
برنامه ما تا اینجا به شکل زیر در میاد:

int main() {
    cout << "Hello, World!";
}

مشکل دیگر این هست که cout که ما ازش توی کدمون استفاده کردیم بخشی از خود زبان نیست و درواقع بخشی از Standard Libray آن هست.

کتابخانه یا library درواقع کدی هست که یک برنامه نویس دیگر نوشته و در اختیار شما قرار داده‌است تا شما بتوانید با استفاده از آن برنامه خود را راحت تر بنویسید.

استاندارد لایبرری کتابخانه‌ای هستش که همراه زبان  در اختیار شما قرار می‌گیرد و امکانات اولیه لازم برای نوشتن برنامه‌ها به شما ارایه میدهد.

وقتی شما از یک لایبرری استفاده می‌کنید باید فایل‌های آن را در کد خودتون include کنید. cout بخشی از لایبری iostream هست (input/output stream) که خب توی این مثال کد ما فقط از output استفاده می‌کند. با اضافه کردن include مربوط به iostream کد ما به شکل زیر در می‌آید:

#include <iostream>

int main() {
    cout << "Hello, World!";
}

خب برنامه ما تقریبا تکمیل است فقط نکته آخر این که همونطور که کمی قبل گفتیم cout جزئی از استاندارد لایبرری است؛ اکثر مواردی که در استاندارد لایبرری تعریف شده‌اند در یک namespace به نام std تعریف شده اند و برای این که کامپایلر بفهمد که باید در این namespace دنبال این اسم بگردد یا باید قبل از استفاده از اجزای این لایبرری بنویسیم std:: مثل زیر

#include <iostream>

int main() {
    std::cout << "Hello, World!";
}

یا باید اول برنامه مشخص کنیم که می‌خواهیم از موارد داخل این namespace استفاده کنیم و کد رو به شکل زیر در بیاریم:

#include <iostream>

using namespace std;

int main() {
    cout << "Hello, World!";
}

نیم‌اسپیس درواقع ابزاری در زبان  است که به ما کمک می‌کند چیز هایی که تعریف می‌کنیم را در یک فضا جدا قرار دهیم و آن ها را از هم تفکیک کنیم. علت تعریف شدن موارد موجود در standard library در نیم‌اسپیس std نیز همین است تا در پروژه‌های بزرگ با تعاریف خود برنامه نویس قاطی نشوند.

برنامه ما الان بدون error اجرا می‌شود و کاری که باید را تقریبا به درستی انجام میدهد اما یک مشکل ریز دارد.

کامپیوتر های اولیه توان تولید تصویر و گرافیک به شکلی که امروزه ما در کامپیوتر هایمان می‌بینیم نداشتند و برای کار کردن با آن ها٬ شما باید از کامند(command) ها استفاده می‌کردید و با یک محیط متنی و text-based طرف بودید.

توی این Command Line Interface یا به اختصار CLI چیزی به اسم پرامپت (prompt) وجود دارد که از شما می‌خواهد که کامند بعدی رو وارد کنید.

پرامپت (prompt) اول و کامند اولی که وارد شده (ls که کارش لیست کردن فایل هاست)
خروجی کامند
پرامپت دوم و cursor (خط چشمک زنی که موقع تایپ کردن ظاهر میشود) که به ما اجازه نوشتن کامند بعدی را می‌دهد

اما ربط این ها به کد ما چیست؟ برنامه‌ای که تا اینجا نوشتیم هم برنامه‌ای است که در همین محیط CLI اجرا می‌شود و اگر اجراش کنیم می‌بینیم که prompt جلوی خروجی برنامه ما نوشته می‌شود و خروجی آن به شکل زیر خواهد بود:

Hello, Worldbash $

که به طور مشخص خروجی مطلوبی نیست. معمولا برنامه ها برای حل این مشکل یک اینتر (Enter/Return) در آخر پرینت می‌کنند که این پرامپت را به خط بعد بفرستند.

به خط بعد رفتن با کارکتر '\n' نمایش داده می‌شود (درواقع بک اسلش n یک کارکتر استثنایی است) 
که با اضافه شدن این مورد کد نهایی ما به شکل زیر می‌‌شود:

#include <iostream>

using namespace std;

int main() {
    cout << "Hello, World!\n";
}

این کد کاملا درست است ولی شاید بتوان گفت خیلی مرسوم نیست.

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

#include <iostream>

using namespace std;

int main() {
    cout << "Hello, World!" << endl;
}

اگر به برنامه بالا دقت کنید می‌بینید که cout چند ورودی پذیرفته که یکی از آن ها متن "Hello, World!" و دیگری endl هست می‌توانید به همین شکل در یک خط به cout به هر تعدادی که می‌خواهید ورودی بدهید.

در این پروژه اولین برنامه به زبان  خودمان رو نوشتیم که خروجی آن رو در زیر می‌بینید:

#include <iostream>

using namespace std;

int main() {
    cout << "Hello, World!" << endl;
}
Hello, World!

در بخش‌های بعدی این دوره به مفاهیم دیگر مورد نیاز برای برنامه‌نویسی با زبان سی پلاس پلاس می‌پردازیم.

وارد شوید تا پیشرفت خود را ثبت کنید

وارد شوید تا پروژه‌هایی که تکمیل می‌کنید را علامت گذاری کنید و فرایند یادگیری خود را ثبت کنید

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

برای نوشتن نظر٬ اول باید وارد شوید

مرحله بعد

معرفی

اطلاعات شما با موفقیت ثبت شد. کارشناسان ما در اسرع وقت با شما تماس خواهند گرفت.

از شکیبایی شما متشکریم.