فصل اول: مبانی برنامه نویسی

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

شروع این سفر نه تنها شما را به مهارت‌های ارزشمندی مجهز می‌کند، بلکه قلمرو جدیدی از خلاقیت و حل مسئله را نیز باز می‌کند. چه هدف شما دنبال کردن حرفه‌ای در فناوری باشد یا صرفاً بخواهید نحوه ایجاد محصولات دیجیتال را کشف کنید، برنامه‌نویسی مسیری ارزشمند را ارائه می‌دهد.

به یاد داشته باشید، هر برنامه‌نویس ماهری روزی یک مبتدی بوده است. سفر شما از هم اکنون آغاز می‌شود و من اینجا هستم تا در هر مرحله شما را راهنمایی کنم.

مقدمه‌ای بر زبان‌های برنامه‌نویسی (Programming Languages)

زبان‌های برنامه‌نویسی ابزاری هستند که به ما امکان می‌دهند ایده‌های خود را به مجموعه‌ای از دستورالعمل‌ها (Instructions) تبدیل کنیم، به طوری که یک کامپیوتر بتواند آنها را اجرا کند. هر زبان دارای دستور زبان (Syntax) و ساختار (Structure) ویژهٔ خود است. هدف همهٔ آنها، هر چند به شکل‌های متفاوت، این است که اطلاعات ما را برای ماشین قابل فهم کنند.

در دنیای برنامه‌نویسی، زبان‌های گوناگونی وجود دارند که هرکدام ساختار، هدف و نحوهٔ اجرای خاص خود را دارند. برای یک برنامه‌نویس تازه‌کار، درک این تفاوت‌ها می‌تواند به انتخاب زبان مناسب برای یک پروژه و همچنین درک بهتر فرایند اجرای کد کمک زیادی کند. در این فصل، ما به دسته‌بندی‌های رایج زبان‌های برنامه‌نویسی می‌پردازیم و اصطلاحات فنی را به انگلیسی (English) بیان می‌کنیم تا درک شما از مفاهیم عمیق‌تر شود. این دسته‌بندی‌ها شامل «Compiled Languages»، «Interpreted Languages» و «Markup Languages» هستند.

STOP IT! There are no Compiled and Interpreted Languages! | by Skrew  Everything | From The Scratch | Medium

زبان‌های کامپایل‌شونده (Compiled Languages)

Compiled Languages زبان‌هایی هستند که ابتدا کد منبع (Source Code) آنها توسط یک برنامهٔ ویژه به نام «Compiler» به زبان ماشین (Machine Code) تبدیل می‌شود. زبان ماشین مستقیماً توسط واحد پردازنده مرکزی (CPU) قابل درک و اجرا است. فرآیند تبدیل از یک زبان سطح بالا (High-Level Language) به زبان ماشین، «Compilation» نام دارد.

نحوهٔ اجرا:

  1. نوشتن کد منبع (Source Code): شما کدتان را با دستور زبان یک زبان سطح بالا نظیر C یا C++ می‌نویسید.
  2. کامپایل کردن (Compilation): Compiler کد شما را بررسی کرده، خطاهای نحوی (Syntax Errors) را گزارش و در نهایت فایل اجرایی (Executable) یا کد ماشین تولید می‌کند.
  3. اجرا (Execution): فایل اجرایی تولید شده مستقیماً توسط سیستم عامل و CPU اجرا می‌شود.

مزایا:

  • سرعت بالا: به دلیل تبدیل شدن کامل به کد ماشین، اجرای برنامه بسیار سریع است.
  • بهینه‌سازی (Optimization): Compiler می‌تواند کد را برای عملکرد بهتر، بهینه کند.

معایب:

  • فرآیند طولانی‌تر توسعه: هر بار که کد را تغییر دهید، باید دوباره آن را کامپایل کنید.
  • وابستگی به پلتفرم (Platform Dependency): کدی که برای یک سیستم عامل کامپایل شده است، معمولاً روی سیستم عامل دیگر اجرا نمی‌شود مگر این که دوباره کامپایل گردد.

مثال‌ها:

  • C
  • C++
  • Rust
  • Go

کامپایل کردن یعنی چی؟

کامپایل یک فرآیند اساسی در توسعه نرم افزار است که کد نوشته شده در یک زبان برنامه نویسی سطح بالا (کد منبع) را به کد ماشین (کد باینری) تبدیل می کند که پردازنده کامپیوتر می تواند مستقیماً آن را اجرا کند. ابزار مسئول این تبدیل کامپایلر نامیده می شود.

در اینجا خلاصه ای از آنچه کامپایل شامل می شود آورده شده است:

    • تجزیه و تحلیل واژگانی – Lexical Analysis: کامپایلر کد منبع را می خواند و آن را به عناصر معنی دار به نام نشانه ها تقسیم می کند. این نشانه ها می توانند کلمات کلیدی، نمادها، عملگرها، شناسه ها و غیره باشند.
    • تجزیه و تحلیل نحو (تجزیه) – (Syntax Analysis (Parsing: در این مرحله، کامپایلر نشانه ها را در برابر قوانین نحوی زبان برنامه نویسی بررسی می کند تا یک نمایش درخت مانند از ساختار کد منبع ایجاد کند. این درخت به درخت نحو انتزاعی (AST) معروف است.
    • تجزیه و تحلیل معنایی – Semantic Analysis: کامپایلر AST را برای سازگاری معنایی تأیید می کند، و اطمینان حاصل می کند که کد منبع به قوانین معنایی زبان پایبند است. این شامل بررسی نوع، وضوح محدوده، و شناسایی استفاده از متغیرهای اعلام نشده است.
    • بهینه سازی – Optimization: کامپایلر ممکن است بهینه سازی های مختلفی را برای افزایش کارایی کد ماشین حاصل انجام دهد. این می تواند شامل حذف کد اضافی، به حداقل رساندن استفاده از حافظه و بهینه سازی مسیرهای اجرا باشد.
    • تولید کد – Code Generation: کامپایلر AST بهینه شده را به کد ماشین مخصوص معماری پردازنده هدف تبدیل می کند. این کد ماشین همان چیزی است که کامپیوتر می تواند اجرا کند.
    • پیوند – Linking: در بسیاری از موارد، به ویژه برای برنامه های پیچیده، کامپایلر نیاز دارد تا کدهای ماشین را از فایل های منبع و کتابخانه های مختلف به یکدیگر پیوند دهد. این مرحله مراجع خارجی را حل می کند و یک فایل اجرایی یا باینری نهایی تولید می کند.

نمونه ای از کامپایل

یک برنامه ساده را در نظر بگیرید که به زبان C نوشته شده است:

#include <stdio.h>

int main() {

   printf(“Hello, world!n”);

   return 0;

}

وقتی این برنامه را با استفاده از یک کامپایلر C کامپایل می‌کنید (مانند gcc برای مجموعه کامپایلر گنو)، کامپایلر مراحل ذکر شده در بالا را طی می‌کند تا این کد C سطح بالا را به کد ماشینی تبدیل کند که رایانه می‌تواند اجرا کند. دستور کامپایل این برنامه ممکن است به صورت زیر باشد:

gcc hello.c -o hello

این به gcc می گوید که فایل منبع hello.c را بگیرد، آن را کامپایل کند و یک فایل اجرایی به نام hello را خروجی دهد. اجرای ./hello در ترمینال، کد دستگاه را اجرا می کند و “Hello, world!” به کنسول

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

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

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

زبان‌های مفسری (Interpreted Languages)

 

Compiled Language and an Interpreted Language

Interpreted Languages زبان‌هایی هستند که کد منبع آنها مستقیماً توسط یک برنامه به نام «Interpreter» اجرا می‌شود. در این زبان‌ها، برخلاف زبان‌های کامپایل‌شونده، کل کد ابتدا به صورت کامل به زبان ماشین تبدیل نمی‌شود. بلکه Interpreter خط به خط یا دستور به دستور کد شما را می‌خواند، تحلیل می‌کند و بلافاصله اجرا می‌نماید.

نحوهٔ اجرا:

  1. نوشتن کد منبع: شما کدی را در زبانی مانند Python یا JavaScript می‌نویسید.
  2. تفسیر (Interpretation): Interpreter کد را خط به خط می‌خواند و همان لحظه اجرا می‌کند.
  3. اجرا: نتیجه بلافاصله نمایش داده می‌شود و نیازی به مرحلهٔ جداگانهٔ Compilation نیست.

مزایا:

  • توسعهٔ سریع (Rapid Development): تغییرات کوچک در کد را می‌توانید فوراً آزمایش کنید.
  • مستقل از پلتفرم (Platform Independence): تا زمانی که Interpreter برای یک پلتفرم وجود داشته باشد، کد شما روی آن اجرا خواهد شد.

معایب:

  • سرعت پایین‌تر: به دلیل نبود مرحلهٔ کامپایل و تحلیل هم‌زمان، اجرای برنامه‌ها کندتر از زبان‌های کامپایل‌شونده است.
  • مصرف منابع بیشتر: پردازش خط به خط معمولاً به منابع بیشتری نیاز دارد.

مثال‌ها:

  • Python
  • JavaScript
  • Ruby
  • PHP

فصل: فرآیند اجرای کد در زبان‌های مفسری و نقش Interpreter در تبدیل به سطوح اجرایی

در زبان‌های مفسری (Interpreted Languages)، برخلاف زبان‌های کامپایل‌شونده (Compiled Languages)، کد منبع (Source Code) nicht توسط سیستم‌عامل selbst in Maschinencode übersetzt wird. در عوض، یک برنامهٔ واسط به نام Interpreter مسئولیت خواندن، درک و اجرای مستقیم کد را بر عهده دارد. این رویکرد باعث می‌شود که چرخهٔ تغییر و آزمایش کد بسیار ساده‌تر و سریع‌تر شود، اما از طرفی اجرای نهایی نسبت به زبان‌های کامپایل‌شونده کندتر است.

اجرای کد در زبان‌های مفسری

  1. وجود Interpreter:
    برای اجرای یک اسکریپت در یک زبان مفسری، ابتدا باید Interpreter مخصوص آن زبان روی سیستم‌عامل نصب باشد. این Interpreter پیش‌تر با استفاده از یک زبان کامپایل‌شونده (مانند C یا C++) به صورت یک برنامهٔ باینری (Binary) قابل اجرا کامپایل شده است. زمانی که شما اسکریپت خود را اجرا می‌کنید، در واقع Interpreter را فراخوانی می‌کنید که خود یک فایل اجرایی مستقل است.

  2. ترجمه در لحظه (On-the-Fly Interpretation):
    در این حالت، Interpreter کد شما را به صورت خط به خط یا بلوک به بلوک می‌خواند. برخلاف کامپایلرها که ابتدا کل کد را به یک فایل اجرایی تبدیل می‌کنند، Interpreter دستورات را گرفته، آنها را تفسیر و بلافاصله اجرا می‌کند. این بدان معنی است که نیازی به یک مرحلهٔ جداگانهٔ کامپایل قبل از اجرا ندارید.

  3. نحوهٔ ارتباط با Maschinencode:
    CPU تنها Maschinencode را می‌فهمد. Interpreter که خود یک باینری کامپایل‌شده است، شامل توابع و روتین‌هایی است که هر دستور زبان مفسری را به عملیات‌های داخلی قابل فهم برای CPU تبدیل می‌کنند. به عبارت دیگر، Interpreter همانند یک لایهٔ میانی عمل می‌کند:

    • کد منبع شما (مثلاً در Python یا JavaScript) مستقیماً به Maschinencode تبدیل نمی‌شود.
    • در عوض، Interpreter وظایف نوشته‌شده در کد را با توابع داخلی خود (که از قبل در Maschinencode کامپایل شده‌اند) تطبیق می‌دهد و آن‌ها را اجرا می‌کند.
  4. Bytecode و Virtual Machine (VM):
    بسیاری از زبان‌های مفسری ابتدا کد شما را به یک قالب میانی به نام Bytecode تبدیل می‌کنند. Bytecode برخلاف Maschinencode، به پلتفرم خاصی وابسته نیست. سپس یک Virtual Machine (VM) – که خود در Maschinencode کامپایل شده است – این Bytecode را تفسیر یا اجرا می‌کند. این VM شبیه یک مینی-پردازندهٔ نرم‌افزاری عمل می‌کند که دستورالعمل‌های Bytecode را قدم به قدم می‌خواند و با کمک توابع داخلی خود، آنها را روی سخت‌افزار واقعی اجرا می‌کند.

زبان‌های نشانه‌گذاری (Markup Languages)

Markup Languages مانند HTML یا XML در اصل زبان‌های برنامه‌نویسی به معنای سنتی نیستند، زیرا قرار نیست دستورات محاسباتی را اجرا کنند. آنها بیشتر برای ساختاردهی (Structuring) و نمایش محتوا (Content) به کار می‌روند. در این زبان‌ها، تگ‌ها (Tags) و اِلِمان‌ها (Elements) برای مشخص کردن چیدمان متن، تصاویر و سایر عناصر استفاده می‌شوند.

نحوهٔ استفاده:

  1. نوشتن مستندات (Documents): شما یک فایل HTML می‌نویسید که شامل تگ‌هایی مانند <html>، <head>، <body> و … است.
  2. تفسیر توسط مرورگر (Browser Interpretation): مرورگر وب (Web Browser) به عنوان یک Interpreter ساده عمل می‌کند و تگ‌ها را خوانده و بر اساس آنها محتوای بصری را نمایش می‌دهد.
  3. بدون محاسبات پیچیده: HTML کدی را اجرا نمی‌کند، بلکه ساختار و طرح اطلاعات را مشخص می‌نماید.

مزایا:

  • سادگی: یادگیری آنها آسان است.
  • وضوح ساختار: محتوا را از نمای ظاهری جدا می‌کنند.

معایب:

  • فاقد منطق محاسباتی: نمی‌توانید الگوریتم‌های پیچیده را مستقیماً در آنها پیاده‌سازی کنید.

مثال‌ها:

  • HTML (HyperText Markup Language)
  • XML (eXtensible Markup Language)
  • Markdown

زبان‌های Hybride یا نیمه‌کامپایل‌شونده (Just-In-Time Compilation)

compilation - Is Java a Compiled or an Interpreted programming language ? -  Stack Overflow
برخی از زبان‌ها، مانند Java، رویکردی میان کامپایل و تفسیر دارند. آنها ابتدا به یک کد میانی (Intermediate Code) یا «Bytecode» کامپایل شده و سپس با یک Interpreter یا با استفاده از «JIT Compiler» (Just-In-Time Compiler) اجرا می‌شوند. نتیجه این است که این زبان‌ها می‌توانند از مزایای هر دو جهان بهره ببرند؛ یعنی سرعت بهتر از زبان‌های کاملاً مفسری و انعطاف‌پذیری بیشتر از زبان‌های کامپایل‌شوندهٔ سنتی.

به عنوان یک برنامه‌نویس خوب، باید بدانید که هر زبان برای چه کاری مناسب است. اگر برنامه‌ای دارید که باید خیلی سریع اجرا شود و نیاز به کارایی (Performance) بالا دارد، یک زبان کامپایل‌شونده انتخاب خوبی است. اگر می‌خواهید سریع نمونه‌سازی (Prototyping) کنید و تغییرات را بی‌درنگ ببینید، یک زبان مفسری مناسب‌تر است. برای ساختاردهی محتوای یک وب‌سایت، زبان‌های نشانه‌گذاری بهترین گزینه هستند.

درک تفاوت بین Compiled Languages، Interpreted Languages و Markup Languages از مهم‌ترین دانسته‌هایی است که یک برنامه‌نویس نیاز دارد تا انتخاب‌های هوشمندانه‌تری داشته باشد. با آشنایی با «Compiler»، «Interpreter» و نحوهٔ کارکرد آنها، می‌توانید چرخهٔ توسعه، آزمایش، بهبود، و در نهایت ارائهٔ نرم‌افزار را بهتر مدیریت کنید. همچنین با فهم کاربرد زبان‌های نشانه‌گذاری، می‌توانید با ساختاردهی مناسب محتوا، وب‌سایت‌ها و مستندات بهتری بسازید. به این ترتیب، مسلح به این دانش اولیه، آماده‌اید تا گام‌های بعدی را در مسیر برنامه‌نویسی بردارید.

آشنایی با محیط‌های توسعهٔ یکپارچه (Integrated Development Environment – IDE)

What is an IDE? Guide to Integrated Development Environment

یک IDE (مخفف Integrated Development Environment) مجموعه‌ای از ابزارها و امکانات نرم‌افزاری است که برای کمک به برنامه‌نویسان در فرآیند توسعهٔ کد طراحی شده است. در حقیقت، IDE‌ها شبیه به یک جعبه‌ابزار کامل برای یک نجار هستند؛ آنها تمام وسایل مورد نیاز جهت نوشتن، مدیریت و رفع اشکال (Debugging) نرم‌افزار را در یک محیط مجتمع ارائه می‌کنند.

برخلاف استفادهٔ جداگانه از یک Text Editor ساده برای نوشتن کد، یک IDE معمولاً شامل امکانات زیر است:

  1. Code Editor: ویرایشگر کد پیشرفته با قابلیت‌هایی نظیر برجسته‌سازی نحو (Syntax Highlighting)، تکمیل خودکار (Auto-completion) و قالب‌بندی (Formatting).
  2. Compiler / Interpreter Integration: ادغام‌شده با Compiler یا Interpreter زبان هدف، به صورتی که نیاز نیست از ابزارهای خارجی برای کامپایل یا اجرای کد استفاده کنید.
  3. Debugger: ابزاری برای یافتن و رفع خطاها، که امکان توقف اجرای برنامه در نقاط خاص (Breakpoints) و بررسی مقادیر متغیرها را فراهم می‌کند.
  4. Build Tools: ابزارهای مدیریت پروژه که وظیفهٔ ساخت (Build)، تست و پکیج کردن نرم‌افزار را ساده‌تر می‌کنند.
  5. Version Control Integration: پشتیبانی از سیستم‌های کنترل نسخه (Version Control Systems) مثل Git، برای مدیریت تغییرات در کد و همکاری گروهی.

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

مثال‌های رایج از IDE

IDEs and Code Editors. Top IDEs and Code Editors for Software… | by Kasun  Weerasinghe | Medium

  • Visual Studio: محصول شرکت مایکروسافت، پشتیبانی قوی از زبان‌هایی مانند C++، C# و Visual Basic دارد.
  • IntelliJ IDEA: انتخابی محبوب برای توسعه‌دهندگان Java که توسط شرکت JetBrains ارائه شده و امکانات هوشمندی برای کدنویسی ارائه می‌کند.
  • Eclipse: یک IDE متن‌باز (Open-Source) برای Java و بسیاری زبان‌های دیگر، با پلاگین‌های فراوان.
  • PyCharm: مختص زبان Python که انواع ابزارهای پیشرفته برای تست، اشکال‌زدایی و توسعهٔ سریع را ارائه می‌دهد.
  • Android Studio: برای توسعهٔ اپلیکیشن‌های Android با امکانات ویژهٔ موبایل و شبیه‌ساز (Emulator).

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

 

مفاهیم برنامه نویسی

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

در اینجا چند مفهوم پایه‌ای وجود دارد که می‌توانند در شروع به شما کمک کنند:

    1. متغیرها / Variables:

 یک متغیر در برنامه نویسی شبیه به جعبه ای در دنیای واقعی کار می کند که می توانید چیزی را در آن قرار دهید. در این حالت، شما اشیاء فیزیکی را در آن قرار نمی دهید، بلکه اطلاعات یا داده ها را در آن قرار می دهید. در برنامه نویسی به فرآیند «قرار دادن چیزی» می گویند.

برای اینکه بتوانید به این کادر (متغیر) ارجاع دهید، نامی به آن می دهید. این نام به شما کمک می کند بعدا به راحتی به اطلاعات ذخیره شده در آن دسترسی داشته باشید. به عنوان مثال، اگر متغیری به نام سن دارید، مانند این است که یک جعبه با برچسب “سن” دارید که می توانید سن یک فرد را در آن ذخیره کنید.

مثال:

تصور کنید می خواهید سن یک فرد را در برنامه خود ذخیره کنید. ابتدا یک متغیر ایجاد می‌کنید و نامی برای آن می‌گذارید که آنچه را که ذخیره می‌کند، به عنوان مثال سن، توصیف می‌کند. سپس به این متغیر یک مقدار اختصاص می‌دهید، مثلاً 30. در بسیاری از زبان‌های برنامه‌نویسی به این صورت است:

age = 30;

در این مثال:

age نام متغیر است مانند برچسب روی جعبه ما.

= عملگر( Operator) انتساب است که برای تخصیص یک مقدار به متغیر استفاده می شود مانند قرار دادن یک آیتم در کادر.

30  مقداری ( Value) است که به متغیر اختصاص می دهیم مانند موردی که در کادر قرار داده ایم.

بعد از اینکه یک مقدار را به یک متغیر اختصاص دادید، می توانید آن مقدار را بعداً با استفاده از نام متغیر در برنامه بازیابی کنید. بنابراین اگر بعداً می خواهید بررسی کنید که آیا فرد بالای 18 سال دارد، می توانید از شرایطی استفاده کنید که به این صورت است:

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

در برنامه ها می توانید با مقادیر موجود در متغیرها محاسبه کنید، آنها را مقایسه کنید، از آنها در شرایط / Conditions استفاده کنید و موارد دیگر. متغیرها برای ایجاد انعطاف پذیری و پویایی برنامه ها بسیار مفید هستند. شما می توانید مقدار یک متغیر را در طول زمان اجرای برنامه خود تغییر دهید، به این معنی که رفتار برنامه شما می تواند مطابق با آن سازگار شود.

    1. انواع داده / Data:

 این‌ها انواع مختلفی از اطلاعاتی هستند که می‌توانید در متغیرها ذخیره کنید، مثل اعداد، متن (همچنین شناخته شده به عنوان رشته‌ها) یا مقادیر بولی (درست/غلط). البته، بیایید نگاهی دقیق‌تر به انواع مختلف داده‌های موجود در بیشتر زبان‌های برنامه‌نویسی بیندازیم و نمونه‌ای از هر کدام را ذکر کنیم:

    •  اعداد صحیح (Integer, Int)
        • اعداد صحیح اعداد بدون اعشار هستند. آنها می توانند مثبت یا منفی باشند.
        • – مثال: `42`، `-7`
    • اعداد ممیز شناور (Float)
        • اعداد ممیز شناور یا به سادگی شناور اعدادی هستند که اعشار دارند. آنها برای مقادیر دقیق تر استفاده می شوند.
        • – مثال: `3.14`، `-0.001`
    • رشته های کاراکتر ( Strings)
        • رشته ها دنباله ای از کاراکترها هستند که متن را نشان می دهند. آنها در گیومه قرار می گیرند.
        • – مثال: “سلام جهان”، “1234”`
    • ارزشهای حقیقت (بولیان Boolean)
        • بولی ها مقادیر حقیقت را نشان می دهند و فقط می توانند دو مقدار بگیرند: true یا false.
        • – مثال: “درست”، “نادرست”.
    • فهرست Arrays
        • لیست ها مجموعه های مرتب شده ای از عناصر هستند که میتوانند انواع مختلفی از داده ها را در بر گیرند. آنها قابل تغییر هستند، یعنی محتوای آنها قابل تغییر است.
        • – مثال: `[1، 2، 3]`، `[“سیب”، “موز”، “گیلاس”]`
    • تاپل ها (Tuple)
        • تاپل ها شبیه به لیست ها هستند، اما تغییر ناپذیر. پس از ایجاد، عناصر در یک تاپل قابل تغییر نیستند.
        • – مثال: `(1، “سلام”، درست است)”.
    • فرهنگ لغت ( Dictionaries)
        • دیکشنری ها جفت کلیدها و مقادیر را ذخیره می کنند. هر کلید به یک مقدار اشاره می کند و کلیدها منحصر به فرد هستند.
        • – مثال: `{“name”: “Emma”، “age”: 30}`
    • تعداد (مجموعه Set)
        • مجموعه ها مجموعه ای از عناصر منحصر به فرد بدون ترتیب خاصی هستند. آنها برای جلوگیری از تکراری و انجام تست های عضویت سریع مفید هستند.
        • – مثال: «{1، 2، 3، 4}».

هر یک از این نوع داده ها حوزه های کاربردی و ویژگی های خاص خود را دارند. هنگام برنامه نویسی، انتخاب نوع داده مناسب برای اطلاعات ذخیره شده به منظور نوشتن کد کارآمد و خوانا مهم است.

3. عملگرها (Operators):

 این نمادها به رایانه می‌گویند که چگونه با داده‌ها تعامل داشته باشد:

    • * حسابگری: (+، -، *، /) برای محاسبات.
    • * مقایسه: (==، !=، >، <) برای مقایسه مقادیر.
    • * منطقی: ( و and، یا or، نه not) برای ترکیب شرایط.

4. شرط‌ها / (Conditional Statements (If-Else:

شرایط یک عنصر کلیدی در برنامه‌نویسی هستند، زیرا به برنامه اجازه می‌دهند تا بسته به اینکه معیارهای خاصی برآورده شده باشند یا نه، رفتارهای متفاوتی داشته باشد. دستورالعمل “if” اساسی‌ترین ابزار برای کنترل جریان برنامه بر اساس شرایط است. بیایید این مفهوم را با چند جزئیات و مثال بررسی کنیم:

ساختار پایه دستورالعمل “if”

نحو پایه ای یک دستورالعمل “if” در اکثر زبان های برنامه نویسی مشابه است و از این اصل پیروی می کند:

شرط ارزیابی می شود و اگر true باشد، دستورات داخل بلاک اجرا می شوند. اگر شرط false باشد، بلاک نادیده گرفته می شود.

دستورالعمل های “if” پیشرفته

برای تصمیم گیری های پیچیده تر، می توان “if” را با “else” و “else if” گسترش داد که چندین شرط و اقدامات مربوطه را امکان پذیر می کند:

مثال

فرض کنید می خواهیم برنامه ای بنویسیم که بر اساس دما، نوع لباس مناسب را انتخاب می کند:

در این مثال، برنامه ابتدا بررسی می کند که آیا دما بالاتر از 25 درجه است یا خیر. در صورت مثبت بودن، پوشیدن تی شرت را توصیه می کند. اگر دما بین 15 تا 25 درجه باشد، پوشیدن پیراهن را توصیه می کند. برای دمای 15 درجه و پایین تر، پوشیدن ژاکت توصیه می شود.

عملگرهای منطقی

برای بیان شرایط پیچیده تر، می توانید از عملگرهای منطقی مانند && (و)، || (یا) و ! (نه) برای ترکیب چندین شرط استفاده کنید:

در اینجا، برنامه می گوید که اگر هوا گرم (بالای 20 درجه) و آفتابی باشد، روز perfectی برای ساحل است.

استفاده از شرایط با دستورات “if”، “else if” و “else” به شما امکان می دهد برنامه هایی بنویسید که به طور هوشمندانه به موقعیت های مختلف پاسخ می دهند. درک و استفاده ماهرانه از این مفاهیم گامی اساسی در جهت توسعه برنامه های موثر و مفید است.

5. حلقه‌ها / Loops:

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

1. حلقه‌های For

یک حلقه For زمانی استفاده می‌شود که دقیقاً می‌دانید چند بار باید یک بلوک از دستورات اجرا شود. این حلقه برای پیمایش در لیست‌ها (آرایه‌ها) یا سایر مجموعه‌ها بسیار مفید است.

مثال عملی:

فرض کنید می‌خواهید اعداد 1 تا 5 را روی صفحه نمایش دهید:

در این مثال، متغیر i از 1 شروع می‌شود و تا زمانی که i کوچکتر یا مساوی 5 باشد، حلقه اجرا می‌شود. بعد از هر بار اجرا، i به اندازه 1 افزایش می‌یابد.

2. حلقه‌های While

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

مثال عملی:

فرض کنید یک شمارنده دارید که تا زمانی که یک عدد تصادفی بزرگتر از 0.8 باشد، افزایش می‌یابد:

در این مثال، یک عدد تصادفی تولید می‌شود و با 0.8 مقایسه می‌شود. تا زمانی که این عدد کوچکتر یا مساوی 0.8 باشد، حلقه ادامه می‌یابد.

3. حلقه‌های Do-While

حلقه Do-While شبیه به حلقه While است، با این تفاوت که دستورات حداقل یک بار قبل از بررسی شرط اجرا می‌شوند.

مثال عملی:

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

حلقه‌ها ابزاری قدرتمند در برنامه‌نویسی برای جلوگیری از تکرار کد و کنترل اجرای دستورات بر اساس شرایط هستند. انتخاب بین حلقه‌های For، While و Do-While به موقعیت خاص و نوع شرطی که تکرار باید تحت آن انجام شود بستگی دارد.

6. توابع / Functions:

 یک تابع ( Function) مجموعه‌ای از انجام دستورالعمل‌ها است که برای دادن یک کار خاص جمع‌آوری شده‌اند. می‌توان یک تابع را مثل یک برنامه کوچک درون برنامه‌ای خود تصور کرد. اگر بخواهید یک کار را چند بار انجام دهید، می‌توانید یک تابع بنویس و هر زمانی که نیاز دارید، آن را فراخوانی کنید.

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

تعریف تابع

تعریف یک تابع معمولاً شامل یک نام، لیست پارامترها و بلوکی از دستورات است که منطق واقعی تابع را شامل می‌شود.

    • نام: نامی که به تابع خود می‌دهید. باید وظیفه تابع را منعکس کند.
    • پارامترها: متغیرهایی که هنگام فراخوانی تابع مقادیر دریافت می‌کنند. آنها به تابع اجازه می‌دهند تا با ورودی‌های مختلف کار کند.
    • دستورات: کدی که وظیفه واقعی تابع را انجام می‌دهد.
    • Return: کلمه کلیدی که برای بازگرداندن یک مقدار از تابع استفاده می‌شود. این اختیاری است و به وظیفه تابع بستگی دارد.

فراخوانی تابع

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

مثال:

در این مثال، یک تابع ساده addiere تعریف می‌شود که دو عدد را به عنوان پارامتر می‌گیرد و مجموع آنها را برمی‌گرداند. سپس تابع با مقادیر 5 و 3 فراخوانی می‌شود و نتیجه چاپ می‌شود.

پارامترها و آرگومان‌ها

    • پارامترها متغیرهایی هستند که در تعریف تابع مشخص شده‌اند.
    • آرگومان‌ها مقادیر واقعی هستند که هنگام فراخوانی به یک تابع ارسال می‌شوند.

مزایای توابع

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

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

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

    1. رسیدگی به استثناء / Exception Handling مدیریت خطا برای پاسخ به خطاها یا موقعیت های غیرمنتظره ای که ممکن است در حین اجرای یک برنامه رخ دهد، مهم است. با استفاده از بلوک های try-catch، می توانید برنامه خود را قوی تر و پایدارتر کنید.
    1. برنامه نویسی شی گرا / Objektorientierte Programmierung برنامه نویسی شی گرا الگوی مبتنی بر مفاهیمی مانند کلاس ها، اشیا، وراثت، چندشکلی و کپسوله سازی است. OOP به سازماندهی کد به شیوه ای ساختاریافته و مدولار کمک می کند که قابلیت نگهداری و توسعه پذیری برنامه ها را بهبود می بخشد.
    1. ساختارهای داده / Data Structures علاوه بر انواع داده های اساسی، درک ساختارهای داده پیچیده تر مانند پشته ها، صف ها، لیست های پیوندی، درختان و نمودارها برای ذخیره سازی، مدیریت و پردازش کارآمد داده ها مهم است.
    1.  الگوریتم / Algorithms مطالعه الگوریتم‌ها، از جمله الگوریتم‌های مرتب‌سازی و جستجو، برای بهبود استراتژی‌های حل مسئله و کارایی کد شما بسیار مهم است.
    1.  پایگاه های اطلاعاتی / Databases درک پایگاه های داده و SQL (زبان پرس و جوی ساختاریافته) برای ذخیره، پرس و جو و مدیریت موثر داده ها ضروری است. این شامل پایگاه های داده رابطه ای، پایگاه های داده NoSQL و مفاهیم تراکنش ها و عادی سازی می شود.
    1. نسخه و گیت / Versioning and Git نسخه کد، به ویژه استفاده از Git، در توسعه نرم افزار مدرن ضروری است. این به شما امکان می دهد تغییرات کد خود را ردیابی کنید، با دیگران همکاری کنید و پروژه ها را به طور موثر مدیریت کنید.
    1.  تست / Test  تست کد شما، از جمله تست های واحد، تست های یکپارچه سازی، و تست های سیستم، برای اطمینان از صحت، قابلیت اطمینان و کیفیت برنامه های شما حیاتی است.
    1. اصول توسعه نرم افزار / Software Development Principles  درک اصول اولیه توسعه نرم افزار مانند DRY (تکرار نکنید)، KISS (ساده، احمقانه نگه دارید)، و YAGNI (به آن نیاز ندارید) می تواند به شما در برنامه نویسی موثرتر و نوشتن کد بهتر کمک کند.

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

راه‌اندازی جعبه ابزار

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

انتخاب یک ویرایشگر متن یا ویرایشگر کد

Visual Studio Code: Microsoft-IDE funktioniert komplett im Browser

قبل از اینکه بتوانید شروع به نوشتن کد کنید، به یک ویرایشگر متن نیاز دارید- جایی که بیشتر وقت خود را به عنوان یک توسعه‌دهنده در آن می‌گذرانید. در اینجا چند گزینه‌ی محبوب وجود دارد:

    • Visual Studio Code (VS Code): رایگان، متن‌باز، و در دسترس برای لینوکس، ویندوز، و macOS. VS Code بسیار قابل سفارشی‌سازی است و دارای یک کتابخانه بزرگ از افزونه‌ها برای پشتیبانی از زبان‌ها و ابزارهای برنامه‌نویسی مختلف است.
    • Sublime Text: این برنامه به دلیل سرعت و کارایی خود شهرت دارد، رابط کاربری براق و ویژگی‌های قدرتمندی را ارائه می دهد. دانلود و ارزیابی آن رایگان است، اما برای استفاده مداوم به مجوز نیاز دارد.
    • Atom: یک ویرایشگر رایگان و متن‌باز که توسط GitHub ایجاد شده، که پشتیبانی عالی برای همکاری و کنترل نسخه ارائه می‌کند.

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

مرورگرهای وب و نقش آنها

The most popular mobile browsers

مرورگرهای وب پنجره شما به اینترنت هستند و نقش مهمی در توسعه وب ایفا می‌کنند. آنها کدهای HTML، CSS، و JavaScript را برای نمایش صفحات وب تفسیر می‌کنند. مرورگرها برای توسعه‌دهندگان همچنین ابزارهایی (اغلب «ابزارهای توسعه‌دهنده» یا «DevTools» نامیده می‌شوند) را برای تست و اشکال‌زدایی پروژه‌های وب ارائه می‌دهند.

    • Google Chrome: به طور گسترده استفاده می شود، با DevTools قوی برای اشکال زدایی و آزمایش برنامه های وب.
    • Mozilla Firefox: ابزارهای جامعی را برای توسعه‌دهندگان ارائه می‌دهد، از جمله ویژگی‌های منحصر به فردی که در سایر مرورگرها یافت نمی‌شوند.
    • Safari: برای آزمایش وب‌سایت‌ها در دستگاه‌های اپل با مجموعه‌ای از DevTools های خودش، ترجیح داده می شود.