شنبه ۲۹ دي ۱۴۰۳
Tut24 آموزش برنامه نویسی و مجله تخصصی فناوری ورود/عضویت

آموزش مبانی برنامه نویسی - نحو نگارش اولیه

بیایید با یک کم کدنویسی شروع کنیم که واقعا شما را یک برنامه‌نویس کامپیوتر می‌کند. ما قصد داریم یک برنامه کامپیوتری خطی برای نوشتن Hello World! روی صفحه نمایش شما بنویسیم. بیایید ببینیم چگونه می‌توان این کار را با استفاده از زبان‌های برنامه‌نویسی مختلف نوشت.

برنامه Hello World در زبان C

این کدها را می توانید در کامپایلرهای آنلاین امتحان کنید

سعی کنید محتوای printf() را تغییر دهید، به عبارت دیگر، هر چیزی را جایگزین Hello World! بنویسید و سپس نتیجه آن را بررسی کنید. این تابع هر چیزی را که در دو نقل قول دوتایی قرار دهید، چاپ می‌کند.


#include <stdio.h>

int main() {
   /* printf() function to write Hello, World! */
   printf( "Hello, World!" );
}

که نتیجه زیر را ایجاد می کند -


Hello, World!

این برنامه Hello World کوچک به ما کمک می‌کند تا مفاهیم اساسی مختلفی را که به برنامه‌نویسی زبان C مرتبط هستند، فهمیده شوند.

نقطه ورودی برنامه

در حال حاضر از دستور #include <stdio.h> صرف نظر کنید، فقط در بدانید که شما باید این دستور را در بالای یک برنامه C قرار دهید.

هر برنامه C با main()، که تابع اصلی نامیده می‌شود، شروع می‌شود و سپس به دنبال آن، یک پرانتز و آکولاد باز قرار می‌گیرد. بقیه دستورات برنامه در بین این دو آکولاد نوشته می‌شود و در نهایت، یک آکولاد بسته برنامه را خاتمه می‌دهد.

بخش کدنویسی درون این دو آکولاد باز و بسته، بدنه برنامه نامیده می‌شود. آکولاد باز می‌تواند در همان خطی که main(){ قرار دارد یا در خط بعدی مثل برنامه بالا قرار گیرد.

توابع

توابع (Functions) واحدهای کوچکی از برنامه ها هستند و برای انجام یک وظیفه خاص استفاده می شوند. به عنوان مثال، برنامه بالا از دو تابع استفاده می کند: main() و printf(). در اینجا، تابع main() نقطه ورود برای اجرای برنامه را فراهم می کند و تابع دیگر printf() برای چاپ اطلاعات روی صفحه نمایش کامپیوتر استفاده شده است.

شما می توانید توابع خودتان را بنویسید که در یک درس جداگانه به آنها می پردازیم، اما خود زبان برنامه نویسی C توابع داخلی مختلفی مانند main()، printf() و غیره را ارائه می دهد که ما می توانیم در برنامه های خود بر اساس نیازمان استفاده کنیم.

برخی از زبانهای برنامه نویسی به جای کلمه تابع از عبارت زیربرنامه (sub-routine) استفاده می کنند، اما عملکرد آنها بیشتر یا کمتر یکسان است.

نظرات (Comments)

یک برنامه C می تواند دستوراتی را داخل /*.....*/ قرار دهد. اینگونه دستورات نظرات یا کامنت ها نامیده می شوند . این نظرات برای ساخت برنامه ها کاربرپسند و آسان قابل فهم هستند. خوبی نظرات این است که توسط کامپایلرها و مفسرها به طور کامل نادیده گرفته می شوند. بنابراین شما می توانید هر زبانی را برای نوشتن کامنت خود استفاده کنید.

فضاهای سفید (Whitespaces)

زمانی که یک برنامه را با استفاده از هر زبان برنامه نویسی می نویسیم، از کاراکترهای چاپی مختلف برای آماده سازی دستورات برنامه نویسی استفاده می کنیم. این کاراکترهای چاپی شامل a، b، c، ...... z، A، B، C، ...... Z، 1، 2، 3، ...... 0،!، @، #، $، %، ^، &، *، (، )، -، _، +، =، \، |، {، }، [، ]، :، ؛، <، >،؟، /، \، ~،. "، ' می باشند. امیدوارم هیچ کاراکتر قابل چاپی از صفحه کلید شما را فراموش نکرده باشم.

علاوه بر این حروف، برخی حروف وجود دارند که ما از آن‌ها بسیار استفاده می‌کنیم اما در برنامه شما قابل رؤیت نیستند و این حروف فاصله، تب (\t) و خطوط جدید (\n) هستند. این حروف، به عنوان فضاهای سفید شناخته می‌شوند.

این سه حرف فضای سفید مهم در تمام زبان‌های برنامه‌نویسی معمولی هستند و در سند متنی شما نامرئی باقی می‌مانند -

فضای سفید توضیحات نمایش
خط جدید برای ایجاد یک خط جدید \n
تب برای ایجاد یک تب \t
فاصله برای ایجاد یک فاصله فضای خالی

یک خط که تنها شامل فاصله‌های خالی است، ممکن است با یک کامنت همراه باشد، به عنوان یک خط خالی شناخته می‌شود و کامپایلر C کاملاً آن را نادیده می‌گیرد. فضای خالی، عبارتی است که در C برای توصیف فاصله‌های خالی، تب، کاراکترهای جدید خط و کامنت ها استفاده می‌شود. بنابراین می‌توانید به شکل زیر printf("Hello, World!" ); را بنویسید. در این مثال، همه فضاهای ساخته شده در اطراف "Hello, World!" بی‌معنی هستند و کامپایلر در زمان کامپایل آنها را نادیده می‌گیرد.


#include <stdio.h>

int main() {

   /* printf() function to write Hello, World! */
   
   printf(    "Hello, World!"      );
   
}

که نتیجه زیر را ایجاد می کند -


Hello, World!

اگر همه این کاراکترهای فضای سفید را قابل مشاهده کنید، برنامه‌ی بالا به این شکل خواهد بود و شما نمی‌توانید آن را کامپایل کنید −


#include <stdio.h>\n
\n
int main()\n
{
   \n
   \t/* printf() function to write Hello, World! */
   \n 
   \tprintf(\t"Hello, World!"\t);\n
   \n
}\n

نقطه‌ویرگول‌ها (Semicolons)

هر دستور در یک برنامه‌ی C باید با یک نقطه‌ویرگول (;) به پایان برسد. برای مثال، اگر می‌خواهید دوبار عبارت "Hello World!" را نمایش دهید، به صورت زیر باید آن را بنویسید:


#include <stdio.h>

int main() {
   /* printf() function to write Hello, World! */
   printf( "Hello, World!\n" );
   printf( "Hello, World!" );
}

این برنامه نتیجه زیر را ایجاد می کند -


Hello, World! 
Hello, World!

در اینجا، ما از کاراکتر خط جدید \n در تابع printf() استفاده کرده‌ایم تا یک خط جدید ایجاد کنیم. بیایید ببینیم اگر از این کاراکتر خط جدید استفاده نکنیم چه اتفاقی می‌افتد −


#include <stdio.h>

int main() {
   /* printf() function to write Hello, World! */
   printf( "Hello, World!" );
   printf( "Hello, World!" );
}

این برنامه نتیجه زیر را ایجاد می کند -


Hello, World! Hello, World!

در چند درس بعدی، شناخت شناسه ها و کلمات کلیدی را خواهیم داشت.

توضیح برنامه

بیایید بفهمیم چگونه برنامه C بالا کار می کند. در ابتدا، برنامه فوق با استفاده از کامپایلر C به یک فرمت باینری تبدیل می شود. پس بیایید این کد را در فایل test.c قرار دهیم و آن را به شرح زیر کامپایل کنیم:


$gcc test.c -o demo

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


$./demo

که نتیجه زیر را ایجاد می کند -

Hello, World!

در اینجا، هنگامی که ما فایل باینری را اجرا می‌کنیم، کامپیوتر با ورود به برنامه از main() شروع می‌شود و با یک دستور printf() مواجه می‌شود. توجه داشته باشید که خط داخل /*....*/ یک کامنت است و در زمان کامپایل فیلتر می‌شود. بنابراین تابع printf() به کامپیوتر دستور می‌دهد تا خط داده شده را در صفحه نمایش کامپیوتر چاپ کند. در نهایت، با یک آکولاد بسته که نشانگر پایان تابع main() است، برنامه خاتمه می‌یابد.

خطای نحوی (Syntax Error)

اگر قوانین تعریف شده توسط زبان برنامه‌نویسی را رعایت نکنید، در زمان کامپایل خطاهای نحوی (Syntax errors) دریافت می‌کنید و برنامه کامپایل نمی‌شود. از نظر نحوی، حتی یک نقطه یا کاما یا یک علامت‌ نیز مهم است و باید از چنین نکات نحوی کوچکی نیز مراقبت کرد. در مثال زیر، یک علامت‌گذاری نقطه ویرگول را نادیده گرفته‌ایم، بیایید سعی کنیم برنامه را کامپایل کنیم −


#include <stdio.h>

main() {
   printf("Hello, World!")
}

این برنامه نتیجه زیر را ایجاد می کند -


main.c: In function 'main':
main.c:7:1: error: expected ';' before '}' token
 }
 ^

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

برنامه Hello World در جاوا

برنامه معادل زیر در جاوا نوشته شده است. این برنامه همچنین نتیجه مشابه Hello, World! را تولید می‌کند.


public class HelloWorld { 
   public static void main(String []args) {
      /* println() function to write Hello, World! */
      System.out.println("Hello, World!");     
   }
}

که نتیجه زیر را ایجاد می کند -


Hello, World!

برنامه Hello World در پایتون

در زیر برنامه معادل نوشته شده برای پایتون آمده است. این برنامه همچنین نتیجه Hello, World! را به نمایش می‌گذارد.


#  print function to write Hello, World! */
print "Hello, World!"

که نتیجه زیر را ایجاد می کند -


Hello, World!

امیدواریم که توجه کرده باشید که در مثال‌های C و Java، ابتدا برنامه‌ها را کامپایل می‌کنیم و سپس فایل‌های باینری تولید شده را اجرا می‌کنیم، اما در برنامه Python، مستقیماً آن را اجرا می‌کنیم. همانطور که در فصل قبل توضیح داده شد، Python یک زبان تفسیری است و نیازی به یک مرحله واسط به نام کامپایل ندارد.

در Python، برای پایان دادن به یک دستور، نیازی به نشانه سمیکولن (;) نیست و هر بار که یک خط جدید وارد شود به معنای پایان دستور است.