آموزش استفاده از Composer در PHP

مقدمه

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

مدیریت وابستگی

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

بروزرسانی پکیج ها

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

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

پکیج های مورد نیاز پروژه ما (وابستگی های سطح یک) برای ارائه کاربرد مورد نظر ممکن است از دیگر پکیج ها استفاده کنند و اصطلاحا خود وابستگی هایی که آنرا وابستگی های سطح دو می نامیم داشته باشند، این داستان ممکن است حتی ادامه دار باشد و وابستگی های سطح سوم، چهارم و … هم به وجود بیایند. برای مدیریت این مسئله دو راهکار را می توان درنظر گرفت: ۱) برای هر پکیج وابستگی های آن را در دایرکتوری همان پکیج قرار بدهیم و سلسله مراتبی از وابستگی ها به وجود بیاوریم. ۲) همه پکیج ها از همه سطوح وابستگی بدون اینکه تفاوتی برای سطح آنها قائل شویم را در کنار هم قرار دهیم.

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

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

ابزار مدیریت وابستگی

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

برای زبان های مختلف ابزار های مختلفی طراحی شده است، برای مثال Maven و Gradle برای جاوا، pip برای Python، SBT برای اسکالا و Dep برای Go را می توان نام برد. برای زبان PHP در گذشته از ابزار Pear استفاده می شد اما سالهاست که Composer نه به عنوان ابزار رسمی اما به عنوان محبوب ترین ابزار مدیریت وابستگی در پروژه های PHP استفاده می شود.

قرارداد نامگذاری نسخه

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

MAJOR.MINOR.PATCH

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

بخش MAJOR در نسخه

بخش اول در نام نسخه Major نام دارد که نسخه اصلی پکیج به حساب می آید و تغییر آن به معنی تغییرات بنیادی یا مهم در پکیج است و لزوما با نسخه قبلی سازگار نمی باشد. در صورتی که ما توسعه دهنده پکیج هستیم و در نسخه جدید تغییراتی در API پکیج ایجاد کرده ایم که کاربران نسخه قبلی بدون تغییر نمی توانند از این نسخه استفاده کنند ما این بخش از نسخه را یک واحد افزایش می دهیم. برای مثال اگر نسخه قبلی پکیج ما v2.6.1 بوده نسخه جدید را باید v3.0.0 نامگذاری کنیم. در صورتی که ما کاربر یک پکیج هستیم باید به هنگام بروزرسانی پکیج توجه کنیم که با بروزرسانی به نسخه Major جدید ممکن است به تغییراتی در پروژه برای سازگاری با نسخه جدید نیازمند باشیم و حتی ممکن است از بروزرسانی منصرف شویم.

بخش MINOR در نسخه

بخش دوم در نام نسخه Minor نام دارد که نسخه فرعی پکیج به حساب می آید و تغییر آن به معنی معرفی شدن فیچر جدید یا بهبود قابل توجه با حفظ کامل سازگاری با نسخه قبلی است. برای مثال اگر نسخه پکیج v2.6.1 است چنین تغییری می تواند به نسخه v2.7.0 منجر شود. با توجه توضیحات ذکر شده می توان با خاطری نسبتا آسوده پکیج ها را به نسخه های فرعی جدید بروزرسانی کنیم.

بخش PATCH در نسخه

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

ابزار Composer

همانطور که اشاره کردیم Composer محبوب ترین ابزار مدیریت وابستگی برای پروژه های به زبان PHP می باشد که فریم ورک های معروف PHP از جمله Laravel، Symfony و Zend Framework همگی از این ابزار استفاده می کنند. این ابزار یکی از قویترین ابزار های مدیریت وابستگی می باشد که امکانات بسیاری را در اختیار توسعه دهنده ها قرار می دهد و ما سعی کردیم در این مقاله تعدادی از آنها را معرفی کنیم.

کمپوزر بطور پیشفرض از مخزن packagist.org برای دانلود پکیج ها استفاده می کند و می توانید پکیج های قابل استفاده را در این سایت ببینید.

نصب Composer

کومپوزر را به عنوان یک ابزار Command Line می توانید از سایت getcomposer.org دانلود و نصب کنید. پس از نصب می توانید صحت نصب را با اجرای دستور زیر در خط فرمان (ترمینال) بررسی کنید.

composer --version

و برای افزودن پکیج های مورد نیاز به پروژه می توانید دستوری مشابه دستور زیر را در دایکتوری پروژه اجرا کنید.

composer require miladrahimi/phpconfig

در صورتی که مشکلی رخ ندهد، پس اجرای دستور بالا Composer پکیج مورد نظر را دانلود در دایرکتوری your-project/vendor قرار می دهد و همچنین فایل composer.json و composer.lock را هم در دایرکتوری پروژه ایجاد می کند. کاربرد این فایل را در ادامه توضیح می دهیم.

فایل composer.json

فایل composer.json پس از اجرای دستور init یا تعریف اولین وابستگی برای پروژه در دایرکتوری ریشه (root) پروژه ایجاد می شود. این فایل را که می توان به طور دستی و با یک Text Editor هم ساخت شامل لیست وابستگی ها (پکیج ها مورد نیاز پروژه)، مخزن ها، Auto-loader ها و همه اطلاعاتی است که Composer نیاز دارد تا درباره پروژه شما بداند می باشد.

در این فایل نسخه پکیج ها را می توان بصورت انعطاف پذیر همانند v3.* یا v3.6.* نوشت تا بروزرسانی پکیج ها و همچنین جلوگیری از نصب نسخه غیر قابل سازگار ممکن باشد.

فایل composer.lock

فایل composer.lock که در کنار فایل composer.json قرار می گیرد شامل اطلاعات دقیق تر (نسخه دقیق پکیج ها) می باشد. این فایل به هنگام اجرای دستور install مورد استفاده قرار می گیرد تا از بروزرسانی ناخواسته وابستگی ها در محیط های حساس جلوگیری شود. پیشنهاد می شود این فایل به همراه پروژه به سرور منتقل شود تا با نصب وابستگی ها در سرور مطمئن باشیم همان نسخه استفاده شده در محیط تست و یا توسعه بر بروی سرور نصب می شود.

دایرکتوری vendor

این دایرکتوری شامل تمام پکیج های دانلود شده توسط Composer می باشد که مورد نیاز پروژه است. علاوه بر پکیج های نصب شده، اطلاعات مربوط به نحوه بارگذاری آنها و همچنین فایل autoload.php در این دایرکتوری نگهداری می شود.

با توجه به اینکه با استفاده از اطلاعات موجود در فایل های composer.json و composer.lock و نرم افزار Composer هر زمان و هر کجا می توان مجددا تمام پکیج های مورد نیاز پروژه را نصب کرد به هنگام به اشتراک گذاری، آپلود به سرور یا مخزن Git و Deploy این دایرکتوری را ignore کرد.

تعریف وابستگی ها

در صورتی که در پروژه خود به یک پکیج نیاز دارید ابتدا باید آنرا در مخزن packagist.org پیدا کنید. در صفحه مربوط به پکیج در سایت Packagist می توانید روند افزودن آن به پروژه مشاهده کنید. برای مثال برای افزودن پکیج PhpRouter به پروژه می توانید دستور زیر را در دایرکتوری پروژه اجرا کنید.

composer require miladrahimi/phprouter

با افزودن اولین وابستگی به پروژه، Composer دو فایل composer.lock و composer.json و همچنین دایرکتوری vendor را به پروژه شما اضافه می کند و در صورت وجود این فایل ها و دایرکتوری بروزرسانی می شود.

پس از افزودن وابستگی به پروژه، Composer آنرا دانلود کرده و در دایرکتوری vendor قرار می دهد و همچنین وابستگی مورد نظر را به بخش require در فایل composer.json اضافه می کند و نهایتا composer.lock را هم بروزرسانی می کند.

در صورتی که پکیج مورد نظر تنها کاربرد تستی دارد و در سرور اصلی نیازی به نصب آن نیست می توانید با دستوری مشابه دستور زیر آنرا به پروژه اضافه کنید.

composer require phpunit/phpunit --dev

دستور بالا پکیج PhpUnit را به بخش require-dev در composer.json اضافه خواهد کرد.

چنانچه نسخه خاصی از پکیج مد نظرتان هست می توانید همانند دستور زیر آنرا به پروژه به اضافه کنید:

composer require miladrahimi/phprouter:"3.0"

با اجرای دستور بالا نسخه v3.0.* از پکیج را نصب می شود. به مثال دیگری که در ادامه آورده ایم هم توجه کنید.

composer require miladrahimi/phprouter:"3.*"

با اجرای این دستور نسخه v3.* از پکیج نصب خواهد شد. Composer جدیدترین نسخه از پکیج که بخش Major آن ۳ می باشد را نصب خواهد کرد.

برای مشاهده دیگر فرمت های نوشتن نسخه که توسط Composer معرفی شده است می تواند به مقاله رسمی سایت Composer با نام Versions and constraints مراجعه کنید.

بارگذاری پکیج ها

همانطور که قبلا گفتیم Composer پکیج های مورد نیاز پروژه (و دیگر پکیج ها) را پس از دانلود در دایرکتوری vendor قرار می دهد. Composer همچنین فایلی به نام autoload.php در این دایرکتوری ایجاد میکند. این فایل حاوی Auto-loader برای تمام پکیج های نصب شده توسط Composer است و با include کردن آن در پروژه می توان از پکیج های نصب شده استفاده کرد. مثال زیر نحوه استفاده از پکیج PhpRouter را نشان می دهد:

include "vendor/autoload.php";
use MiladRahimiPhpRouterRouter;
$router = new Router();
$router->get('/', function () {
    return 'This is home page!';
});
$router->dispatch();

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

پس از نصب وابستگی ها ممکن است نیاز باشد که آنها را بروزرسانی کنیم که در آن صورت می توانید از دستوری مشابه دستور زیر استفاده کنید.

composer update miladrahimi/phprouter

پس از اجرای دستور بالا جدیدترین نسخه سازگار از پکیج مورد نظر توسط Composer دانلود و جایگزین نسخه قبلی آن در دایرکتوری vendor می شود. همچنین فایل composer.lock هم بروزرسانی می شود اما هیچ تغییر در فایل composer.json نخواهیم داشت.

در صورتی که می خواهید همه وابستگی ها را بروزرسانی کنید می توانید از دستور زیر استفاده کنید.

composer update

این دستور تمام وابستگی ها، دایرکتوری vendor و فایل composer.lock را بروزرسانی می کند. این دستور را با دستور زیر که خود نرم افزار Composer را بروزرسانی می کند اشتباه نگیرید.

composer self-update

نصب وابستگی ها

همانطور که قبلا توضیح دادیم بهتر است دایرکتوری vendor را به هنگام آپلود پروژه در سرور یا در مخزن هایی مانند گیتهاب ignore کرد. همچنین در صورتی که بطور کلاسیک برای Deploy پروژه روی سرور آنرا آپلود می کنید در این صورت به هنگام دریافت پروژه از مخزن دایرکتوری vendor را نداریم اما می توان با دستور زیر مجددا وابستگی ها را نصب کنیم.

composer install

دستور بالا در صورتی که فایل composer.lock در دسترس باشد، پکیج ها را مطابق با نسخه تعریف شده در آن نصب می کند و در غیر این صورت با استفاده از اطلاعات موجود در فایل composer.json آخرین نسخه سازگار با پروژه را نصب خواهد کرد.

در محیط هایی همانند سرور اصلی با استفاده از پارامتر —no-dev می توانید از نصب پکیج های مورد نیاز محیط های تستی جلو گیری کنید.

composer install --no-dev

افزودن autoload

یکی از قابلیت های مفیدی که Composer ارائه می دهد که البته ممکن است فراتر از وظایف یک ابزار مدیریت وابستگی باشد، امکان تعریف autoload برای پروژه است. در بخش های قبل متوجه شدیم که برای بارگذاری پکیج های دانلود شده توسط Composer باید فایل vendor/autoload.php در پروژه خود include کنید. از طرفی پروژه شما هم به یک Auto-loader برای بارگذاری کلاس های پروژه نیاز دارد. با قابلیت مورد نظر نیاز نیست که شما به طور جداگانه یک. Auto-loder طراحی کنید تنها کافیت تا اطلاعات بارگذاری پروژه را به composer.json اضافه کنید تا همان autoload موجود در دایرکتوری vendor کلاس های پروژه شما را هم بارگذاری کند.

"autoload": {
    "psr-4": {"App": "app/"}
}

مخزن ها

سرور Packagist مخزن رسمی و عمومی Composer است و Composer برای نصب پکیج ها به این مخزن رجوع می کند. با وجود مخزن Packagist برای پکیج های خصوصی و یا پکیج هایی که در این مخزن رجیستر نشده اند ما به مخزن های ثانویه نیازمندیم که خوشبختانه Composer به راحتی به ما اجازه می دهد تا این مخزن ها را برای پروژه تعریف کنیم.

در صورتی که مخزن مورد یک مخزن خصوصی در یک سرور Git همانند GitHub یا GitLab است می توانید با آنرا همانند کد زیر به فایل composer.json اضافه کنید.

"repositories": [
    {
        "type": "git",
        "url": "https://github.com/private-company/foo"
    }
],
"require": {
    "private-company/foo": "1.*"
}

در صورتی که پکیج مورد نظر شما فقط در قالب تعدادی فایل در دسترس است می توانید به شکل زیر آنرا در composer.json اضافه کنید.

"repositories": [
    {
        "type": "path",
        "url": "../../packages/my-package"
    }
],
"require": {
    "my/package": "*"
}

برای اطلاعات بیشتر در زمینه مخزن ها می توانید بخش Repositories از مستندات رسمی Composer را مطالعه کنید.

گفتار پایانی

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

نسخه PDF مقاله آموزش استفاده از Composer در PHP

نوشته آموزش استفاده از Composer در PHP اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

Full Stack چیست و به چه کسی برنامه نویس فول استک میگویند؟

در مقالات قبلی درباره برنامه نویسی، طراحی وب، برنامه نویسی وب و مفاهیم مختلف صحبت کردیم و به سوالات بسیاری پاسخ دادیم. در این مقاله و فایل ویدئویی میخواهیم درباره‌ی فول استک یا Full Stack صحبت کنیم و یاد بگیریم که Full Stack چیست . در این مقاله با من همراه باشید.

Full Stack چیست

اگر به دنبال یک پاسخ خیلی ساده ولی کاربردی برای سوال Full Stack چیست هستید، فیلم زیر را مشاهده کنید

https://www.aparat.com/v/yqi3X

مقدمه

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

Front End چیست و به چه کسی برنامه نویس فرانت اند میگویند؟

Back End چیست و به چه کسی برنامه نویس بک اند میگویند؟

بعد از مطالعه و مشاهده‌ی مطالب بالا، حالا میتوانید ادامه‌ی این مطلب را مطالعه بفرمایید.

همه چیز درباره برنامه نویس فول استک یا Full Stack Developer

همانطور که گفتیم، در دنیای طراحی سایت،‌ گروهی از افراد هستند که چیزهایی که کاربر میبیند را طراحی و کدنویسی میکنند و گروهی دیگر هستند که روی پشت صحنه (Back End) متمرکز میشوند و کدهای سمت سرور را مینویسند.

اما یک گروه دیگر نیز از برنامه نویسان سمت وب وجود دارد که مارا به پاسخ سوال Full Stack چیست می‌رساند:

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

عبارت بالا شاید بتواند یک تعریف خیلی ساده برای برنامه نویس Full Stack باشد. برنامه نویس فول استک، همانطور که از واژه‌ی Full پیداست، همه مهارت‌های لازم برای انجام یک پروژه را دارد. به این معنا که:

یک برنامه نویس فول استک، هم میتواند ظاهرهای بسیار خوبی را برای سرویس های آنلاین طراحی کند و هم میتواند برنامه نویس سمت سرور خوبی باشد.

یک مثال برای جواب دادن به سوال Full Stack چیست

همانطور که در مقالات دیگر مثال‌های متعددی زدیم، وقتی میخوایم یک سرویس آنلاین را طراحی و برنامه نویسی کنیم، حداقل به ۲ فرد نیاز داریم:

  • یک شخص که بتواند ظاهر سایت را با تکنولوژی هایی مثل HTML, CSS, Javascript و… طراحی کند.
  • و شخص دومی که بتواند کدهای بک اند و سمت سرور را با زبانی مثل PHP بنویسد و به پایگاه داده (دیتابیس) متصل شود و اطلاعات را از دیتابیس بخواند و اطلاعات جدید را وارد آن کند.

همانطور که گفتیم، هرکدام از این افراد، یک تخصص دارند و برای ساخت یک سایت، به ۲ فرد نیاز داریم.

اما در دنیای طراحی و برنامه نویسی وب اشخاصی هستند که به دلیل تجربه بالا در هرکدام از قسمت‌های Front End و Back End، میتوانند هر دو بخش ظاهر و سرور یک وبسایت را طراحی و برنامه نویسی کنند. برنامه نویسان Full Stack کسانی هستند که به تنهایی برای ساخت یک سرویس آنلاین خوب، کافی هستند و میتوانند یک نفره یک پروژه‌ی تقریبا بزرگ را مدیریت کنند.

آیا واقعا میتوان یک برنامه نویس فول استک واقعی بود؟

اما در پاسخ به سوال Full Stack چیست باید حواسمان به این نکته باشد که اگر مثلا ما میتوانیم هم با HTML-CSS کد بزنیم و هم PHP میدانیم، به این معنا نیست که از الان میتوانیم به خودمان یک Full Stack بگوییم.

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

معمولی کسی میتواند یک برنامه نویس Full Stack باشد که چندین سال سابقه‌ی کار در هر ۲ زمینه‌ی طراحی وب و برنامه نویسی وب را داشته باشد و به این راحتی‌ها نمیتوان در همان چند ماه ابتدای برنامه نویس بودمان، به خودمان یک Full Stack Developer بگوییم.

علاوه بر این، در پاسخ به سوال Full Stack چیست ، باید حواسمان به این نکته هم باشد:

یک برنامه نویس Full Stack علاوه از تسلط بر طراحی و برنامه نویسی وب، باید بتواند یک پیدا کننده‌ی مشکل حرفه‌ای (Debuger) باشد. همچنین باید توانایی بسیار خوبی در مدیریت سرور داشته باشد و همچنین از مدیریت پروژه نیز اندکی بداند. صرفا دانستن HTML,CSS,PHP, MySQL نمیتواند شما را یک برنامه نویس Full Stack کند!

در انتهای این مقاله‌ درباره مهارت های یک Full Stack Developer بیشتر صحبت خواهیم کرد.

آیا Full Stack Developer ها همه کارِ و هیچ کارِ هستند؟

تا الان به یک پاسخ خوبی درباره‌ی سوال Full Stack چیست رسیدیم. اما الان ممکن است این سوال برایتان پیش بیاید:

آیا میتوان هم طراحی وب را انجام داد و هم به برنامه نویسی آن مسلط شد و در کنار آن کلی مهارت دیگر مثل کار و مدیریت سرور، مدیریت پروژه و… را نیز دارا بود؟

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

در خصوص پاسخ به این سوال، باید چند نکته را بررسی کنیم:

Full Stack کارها با تجربه هستند

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

بسیار از طراحان و برنامه نویسان وب که حرفه‌ای هستند و عمق داستان را میدانند، از اینکه خودشان را یک برنامه نویس Full Stack بخوانند میترسند و از عنوان کردن اینکه «من یک برنامه نویس Full Stack هستم» ترس دارند. زیرا تبدیل شدن به یک برنامه نویس Full Stack، کاری زمان بر است و حاصل تجربیات چندین ساله‌ی شما خواهد بود.

پس به راحتی و صرفا به دلیل دانستن HTML, CSS, Javascript, PHP, MySQL و… نمیتوانید به خودتان یک برنامه نویس فول استک بگویید. ماجرا خیلی پیچیده تر از این حرف‌هاست

اما نهایتا …

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

من دوستان برنامه نویس Full Stack زیادی دارم و با برنامه نویسان Full Stack بسیار زیادی نیز همکاری داشته ام. اما آن‌ها نهایتا در یکی از زمینه‌ها قوی تر بوده‌اند. به این معنا که:

  • یا طراحان وب بهتری بودند، یعنی قسمت هنری مغزشان فعال‌تر بود و میتوانستند رابط های کاربری (UI) بسیار حرفه‌ای و چشم نوازی طراحی کنند.
  • یا برنامه نویسان سمت سرور فوق العاده‌ای بودند و بخش منطقی مغزشان فعال تر بوده است و میتوانستند منطق‌ها و الگوریتم های بسیار پیچیده و کدهایی بسیار تمیز بنویسند.

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

مهارت‌های یک برنامه نویس فول استک (Full Stack)

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

  • طراحی وب
  • طراحی رابط کاربری
  • برنامه نویسی وب
  • کار با پایگاه داده
  • هاست و سرور
  • توانایی کار با API ها
  • آشنایی با Version Controll System ها
  • توانایی مدیریت پروژه‌های نرم افزاری

در این مقاله و فایل ویدئویی سعی کردیم به سوال Full Stack چیست پاسخ دهیم. نظر شما چیست؟ طراح وب بودن بهتر است؟ یا برنامه نویس بودن؟ یا تبدیل شدن به یک Full Stack Developer؟ کدام یک آسان تر است؟

منبع: یادیفای

نوشته Full Stack چیست و به چه کسی برنامه نویس فول استک میگویند؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

Back End چیست و به چه کسی برنامه نویس بک اند میگویند؟

در مقاله ای دیگر در یادیفای درباره‌ی Front End و یا طراحی سمت وب صحبت کردیم. در این مقاله میخواهیم درباره برنامه نویسی سمت وب، یا برنامه نویسی بک اند یا Back End Development صحبت کنیم و تمام آن چیزی که نیاز دارید را بررسی کنیم. این مقاله و فایل آموزشی میتواند به سوال Back End چیست پاسخ دهد و شما را برای تبدیل شدن به یک برنامه نویس وب (یا برنامه نویس سمت وب یا برنامه نویس Server Side) آماده کند.

https://www.aparat.com/v/yTC1G

Back End چیست

اگر بخواهیم به سوال Back End چیست پاسخ دهیم، در مرحله‌ی اول خیلی خوب است که به دنبال معنی واژه‌ی Back در دیکشنری باشیم. در فست دیک، واژه‌ی Back اینگونه معنا شده است:

Back: عقب، پشت (بدن)، پس، عقبی، گذشته، پشتی، پشتی کنندگان، تکیه گاه، به عقب، درعقب، برگشت (و…)

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

وقتی از برنامه نویسی بک اند صحبت میکنیم، منظورمان تمام آن کارهایی است که در پشت صحنه انجام میشود و کاربر آن‌ها را نمیبیند.

ما در تعریف طراحی/برنامه نویسی فراند اند گفتیم:

طراحی یا کدنویسی هر آن چیزی که مربوط به جلوی وبسایت میشود. در واقع یک طراح وب یا یک Front End Developer، کسی است که چیزی را طراحی میکند کاربر آنرا میبیند.

اما برنامه نویسی بک اند (Back End)،‌ دقیقا آن سوی ماجرا قرار دارد. اگر بخواهیم به سوال Back End چیست خیلی ساده پاسخ دهیم، میتوانیم بگوییم:

برنامه نویسی بک اند (Back End) مربوط به کدنویسی و برنامه نویسی هر آن چیزی است که کاربر آن را مشاهده نمیکند و مربوط به کارهای پشت صحنه وب سایت است. برای مثال وقتی که یک وبسایت، مقالات را از دیتابیس دریافت میکند، یک امر مربوط به بک اند است. وظیفه‌ی یک برنامه نویس بک اند، برنامه نویسی چیزهایی است که هسته اصلی یک وبسایت هستند و کاربر کدهای آن‌را بصورت مستقیم مشاهده نمیکند.

مقایسه با فرانت اند

یک نکته‌ی خیلی جالب در تفاوت برنامه نویسی فرانت اند (Front End) و برنامه نویسی بک اند (Back End) وجود دارد. و آن هم نمایان بودن یا نبودن کدهای آن برای کاربران سایت شماست.

وقتی که شما در حال طراحی وب با تکنولوژی هایی مثل HTML, CSS, Javascript و… هستید، تمام کدهایی که نوشتید را کاربر میتواند به راحتی ببیند. زیرا آن کدها مربوط به کاربر هستند و به آن‌ها دسترسی مستقیم دارد.

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

برای اطلاعات بیشتر و درک بهتر سوالBack End چیست پیشنهاد میکنیم این مقاله را حتما مطالعه کنید: Front End چیست و به چه کسی برنامه نویس فرانت اند میگویند؟

Server Side و Client Side به چه معنا هستند.

در آینده حتما در خصوص تفاوت Server Side و Client Side بیشتر صحبت خواهیم کرد. اما برای اینکه بتوانیم به سوال Back End چیست بهتر پاسخ دهیم، خیلی خوب است که این دو مفهوم را کمی توضیح دهیم.

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

Client Side

از آن‌جایی که Client به معنای مشتری است، Client Side هم به معنی زبان‌هایی است که سمت کاربر کار میکنند. برای مثال میتوان به HTML, CSS, Javascript و… زبان‌های سمت کاربر و Client Side نیز بگوییم. و به مجموع کاری که این زبان‌ها انجام میدهند، طراحی وب یا Front End Development میگوییم.

Server Side

همانطور که از اسم این عبارت پیداست، زبان‌هایی که در این دسته بندی قرار میگیرند، روی سرور اجرا میشوند و برای اجرا شدن به یک سرور نیاز دارند. برای مثال زبان‌هایی مثل PHP یا ASP.NET برای اجرا حتما به یک سرور نیاز دارند،‌ که این سرور هم میتواند یک سرور واقعی در دنیای آنلاین باشد و هم یک شبیه ساز سرور یا لوکال هاست (Localhost). به زبان‌های برنامه نویسی‌ای که سمت سرور اجرا میشوند، زبان‌های Server Side و به مجموع کاری که این زبان‌ها انجام میدهند، برنامه نویسی بک اند یا Back End Development میگویند

همان مثال تئاتر

در مطلبی که به سوال Front End چیست پاسخ دادیم، گفتیم که طراحی وب و برنامه نویسی وب را میتوانیم به یک سالن تئاتر تشبیه کنیم. حالا دوباره همان مثال را میزنیم که پاسخ سوال Back End چیست برایمان واضح تر شود

تمام آن‌ کسانی که در صحنه فعالیت میکنند و نقش آفرینی میکنند و تماشاچیان آن‌ها را میبینند را میتوانیم بگوییم Front End  یک اجرای تئاتر.

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

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

مهارت‌های یک برنامه نویس Back End چیست

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

زبان برنامه نویسی سمت سرور

برای برنامه نویسی سمت سرور یا برنامه نویسی بک اند، اولین چیزی که نیاز دارید، یک زبان برنامه نویسی‌ای است که سمت سرور اجرا شود. برای مثال زبانی مثل PHP یک زبان برنامه نویسی Back End است که باید روی سرور اجرا شود. پر در اولین قدم شما به یک زبان برنامه نویسی نیاز دارید.

پایگاه داده

دومین چیزی که حتما و قطعا به آن نیاز دارید، پیدا کردن تسلط به یک دیتابیس (Database) یا پایگاه داده است.

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

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

مباحث پیشرفته زبان برنامه نویسی

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

برای مثال در برنامه نویسی PHP،‌ شما اگر بتوانید کدتان را به شیوه‌ی شی گرایی (Object Oriented) بنویسید، کد شما میتواند خیلی تمیزتر، سریع‌تر و حرفه‌ای تر باشد.

توانایی حل مسئله

وقتی در خصوص برنامه نویسی سمت سرور یا Back End  صحبت میکنیم، یکی از چیزهایی که برای شما ضروری است،‌توانایی حل مسئله و داشتن یک ذهن تحلیل‌گر است.

داشتن ذهن تحلیلگر، یکی از مهم‌ترین ویژگی هایی است که هر برنامه نویسی باید از آن بهره ببرد.

خبر خوب این است که این ذهن تحلیلگر،‌ ارثی نیست و میتوان آن‌را بدست آورد!

در آینده حتما در خصوص توانایی حل مسئله صحبت خواهیم کرد.

سوال پرسیدن

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

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

در این مقاله بصورت کامل سعی کردیم به سوال Back End چیست پاسخ دهیم و تمام آن چیزی که نیاز دارید را در اختیارتان قرار دهیم.

نظر شما چیست؟ به نظر شما برای تبدیل شدن به یک برنامه نویس وب خوب،‌ به چه مهارت‌هایی نیاز داریم؟

منبع: یادیفای

نوشته Back End چیست و به چه کسی برنامه نویس بک اند میگویند؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

Front End چیست و به چه کسی برنامه نویس فرانت اند میگویند؟

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

Front End چیست

اگر به دنبال یک پاسخ خیلی ساده ولی کاربردی برای سوال Front End چیست هستید، فیلم زیر را مشاهده کنید

https://www.aparat.com/v/wfMmO

تعریف طراحی وب

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

اما در دنیای طراحی وب،‌ واژه ای مثل Front End یا Back End ممکن است زیاد به گوش شما بخورد. در این مقاله میخواهیم درباره‌ی Front End صحبت کنیم و بگوییم که فرانت چیست،‌ چه تفاوتی با بک اند (Back End) دارد و برای تبدیل شدن به یک طراح وب یا Front End Developer, به چه مهارت هایی نیاز داریم.

تعریف واژه‌ی فرانت اند

Front End چیست: در عبارت Front End، هماxنطور که میبینید واژه‌ی Front وجود دارد. و در انگلیسی یکی از معانی Front،‌ به معنای «جلو» می‌باشد.

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

با توجه به تعریفی که از این واژه دیدیم، میتوانیم در پاسخ به سوال Front End چیست بگوییم:

طراحی یا کدنویسی هر آن چیزی که مربوط به جلوی وبسایت میشود. در واقع یک طراح وب یا یک Front End Developer، کسی است که چیزی را طراحی میکند کاربر آنرا میبیند.

مقایسه با بک اند

در ادامه‌ی پاسخ به سوال Front End چیست ، خوب است که یک مقایسه‌ای هم از فرانت اند و بک اند داشته باشیم.

در نقطه‌ی مقابل Front End، واژه و مفهوم Back End وجود دارد که اینگونه معنا میشود:

برنامه نویسی بک اند (Back End) مربوط به کدنویسی و برنامه نویسی هر آن چیزی است که کاربر آن را مشاهده نمیکند و مربوط به کارهای پشت صحنه وب سایت است. در واقع وقتی که یک وبسایت، مقالات را از دیتابیس دریافت میکند، یک امر مربوط به بک اند است. وظیفه‌ی یک برنامه نویس بک اند، برنامه نویسی چیزهایی است که هسته اصلی یک وبسایت هستند و کاربر کدهای آن‌را بصورت مستقیم مشاهده نمیکند.

یک تئاتر را در نظر بگیرید!

برای اینکه این دو مفهوم را بهتر متوجه شوید، یک اجرای تئاتر را در نظر بگیرید. اگر یک تئاتر بخواهد اجرا شود، به دو گروه از افراد نیاز دارد:

  • بازیگرهایی که اجرای صحنه‌ی تئاتر را بر عهده دارند
  • نویسنده، کارگردان، تهیه‌کننده، نورپردازی و… که بصورت مستقیم روی صحنه نمی‌آیند، ولی تاثیر کار آن‌ها در اجرای تئاتر موثر است.

دو حیطه‌ی مختلف Front End و Back End نیز دقیقا به همین صورت است:

  • تمام آن چیزی که مربوط به ظاهر سایت می‌باشد (مثل بازیگران در صحنه تئاتر) مربوط به اجرای Front End.
  • و تمام آن چیزی که مربوط به کارهای پشت صحنه سایت می‌باشد (مثل کارگردان و تهیه‌ کننده که در پشت صحنه هستند) با نام Back End شناخته میشود

تفاوت برنامه نویس فرانت اند با UI Designer

در ادامه‌ی پاسخ به سوال Front End چیست میخواهیم کمی ریز تر به این مفهوم نگاه کنیم.

اگر بخواهیم در دنیای طراحی وب کمی ریز تر و عمیق تر شویم، باز با ۲ مفهوم دیگر مواجه میشویم:

  • برنامه نویس فرانت اند یا Front End Developer
  • طراح رابط کاربری یا UI Designer (Ui مخفف User Interface میباشد)

اما طراح رابط کاربری، کار متفاوتی انجام میدهد. کسی که با عنوان UI Designer کار میکند، کارهای مربوط به کدنویسی را انجام نمیدهد و هرگز خودش دست به کد نمیشود.

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

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

مهارت های یک طراح وب فرانت اند چیست

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

لیست مهارت‌هایی که یک Front End Developer باشد داشته باشد:

  • HTML
  • CSS
  • Javascript
  • کتابخانه‌ها و فریمورک های جاوا اسکریپت (مثل جی کوئری)
  • کتابخانه‌های CSS مثل بوت استرپ (Bootstrap)
  • پردازنده‌های CSS مثل Sass یا Less
  • طراحی وب واکنش گرا (Responsive Web Design)
  • نرم افزارهای گرافیکی (فتوشاپ و شاید کمیIllustrator)
  • تست و آزمون خطا
  • و مهارت‌جانی دیگری

این لیست، یک لیست بسیار کلی است که در آینده حتما در مورد آن مفصل صحبت خواهیم کرد. در این مقاله توضیحات بسیار خوبی درباره‌ی فرانت اند ارائه دادیم و به خوبی به سوال Front End چیست پاسخ دادیم.

نظر شما درباره‌ی طراحی وب چیست؟ دوست دارید یک طراح وب باشید، یا یک برنامه نویس وب؟

منبع: یادیفای

نوشته Front End چیست و به چه کسی برنامه نویس فرانت اند میگویند؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

برنامه نویسی بدون ریاضی درسته یا نه ؟

اگه در مورد خطا های مغزی و قواعدش بدونید همیشه میدونید تیتر های اینطوری همیشه پاسخش نه هست

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

درود ریاضی و درود فلسفه

برای تصور فضای فعلی اگر مکعبی چهار بعدی را در نظر بگیریم آن وقت میتوانیم زمان را هم یک نقطه از فضا در نظر بگیریم و انوقت میتوانیم بپرسیم چه مسائلی در مورد آن مطرح هست

اگر فضای ما چهار بعدی بود چه میشد ؟ باید به فکر فرو رفت

در قرن های پیش اکثر نقاشان ریاضی دانانی نابغه بودند حتما لئوناردو داوینچی را میشناسید . مرد آینه ای

نقاشان ریاضی دان با استفاده از قوانین حاکم بر تقارن اثار هنری بسیار زیبایی را خلق کرده اند

هرگاه در اثار ادبی قواعد ریاضی رعایت شده است ، نوشته ای باور پذیر تر – زیبا تر و ماندگار تری را خلق کرده است

استفاده از قوائد ریاضی در خلق اثار هنری از گذشته های مورد توجه بسیاری از هنر مندان بوده است و همین معقوله باعث خلق هندسه تصویری شد از ریاضیات در هنر که گذر کنیم

لئوناردو داوینچی ریاضی دانی هنرمند و مهندسی نابغه بود . گونه ی کوچکی از رفتار لئوناردو داوینچی امروزه در برنامه نویسان فول استک مشاهده میشود

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

دانش پایه ای ریاضیات و دیگر علوم

حقیقتا امروزه برنامه نویسی که در مورد ریاضی و نحوه اجرا شدن یک برنامه و الگوریتم های بهینه بداند کم پیدا میشود

حتی برنامه نویسان فعلی نمیدانند که html/css تورینگ کامل است

برنامه نویسان امروزه فقط به سمت یادگیری چیز هایی میروند که اساسا برای رفع نیاز های یک شرکت طراحی شدند و همین اساس است که برنامه ها روز به روز بی کیفیت تر میشوند و برنامه نویس ها چیز هایی میسازند که فقط همه چیز را پیچیده میکند

همین الان ما چه کار کرده ایم ؟ react/reactnative رسما فقط برای رفع نیاز های فیسبوک و اینستاگرام طراحی شدند در صورتی که در ایران ما برنامه نویس اندرویدی میخوایم که با react کد نویسی کند

روشی به شدت غیر نرمال که هر برنامه نویس حرفه ای آن را رد میکند . البته اساسا وجود برنامه نویس حرفه ای = مهندس برنامه نویس یا برنامه نویس ریاضی دان در ایران معنی نمیدهد

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

امروز برنامه نویس های متخصص زیاد هستند من دوست ندارم برنامه نویسی برایم کار کند که در مورد big O نمیداند اما ادعا دارد با تقریبا تمام فریم ورک های جاوا اسکریپت کار کرده است

اساسا من نه تنها یک برنامه نویس ریاضی دان حتی برنامه نویسی که در مورد نقشه کشی بداند را نیز دوست دارم

برنامه نویسی تخصصی میان رشته ای و نیازمند بررسی شاخه های بسیار زیادی از علوم است

لری وال ، خالق زبان برنامه نویسی پرل یک ریاضی دان – مهندس – نویسنده و نظریه پرداز زبان های طبیعی بود‌(زبان شناس)

و امروزه وردپرس و php و cgi و البته زبان های برنامه نویسی زیادی منجمله ruby – javascript-python و حتی زبان اسکریپت نویسی ویندوز یعنی پاور شل مدیون پرل هستند

فرق نمیکند یک برنامه نویس هنرمند (فرانت اند) هستید

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

شما به ریاضیات نیاز دارید

مهندسی بدون دانش ریاضی = علمی بیهوده و پوچ = زنبور بی عسل

نوشته برنامه نویسی بدون ریاضی درسته یا نه ؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

برنامه نویسی وب چیست؟ درباره‌ی برنامه نویسی وب

در گذشته در مقاله ای جداگانه به سوال طراحی وب چیست پاسخ دادیم و به صورت کامل بررسی کردیم که طراحی وب سایت یا Web Design چیست و چگونه انجام میشود. اما در کنار طراحی وب، مفهوم دیگری با نام برنامه نویسی وب یا Web Development وجود دارد و این سوال پیش می‌آید که برنامه نویسی وب چیست . در این مقاله و فایل ویدئویی بصورت کامل میخواهیم به این سوال پاسخ دهیم. با من همراه باشید

برنامه نویسی وب چیست

اگر به دنبال یک پاسخ خیلی ساده ولی کاربردی برای سوال برنامه نویسی وب چیست هستید، فیلم زیر را مشاهده کنید

https://www.aparat.com/v/k2f95

فرق طراحی و برنامه نویسی

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

  1. طراحی وب یا Web Design
  2. برنامه نویسی وب یا Web Development

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

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

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

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

اما برنامه نویسی وب، متفاوت با طراحی وب میباشد. اگر بخواهیم بگوییم که برنامه نویسی وب چیست میتوانیم آن‌را اینگونه تعریف کنیم:

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

چند مثال از برنامه نویسی وب

در بالا یک تعریف بسیار ساده از برنامه نویسی وب ارائه دادیم و کم کم داریم به پاسخ سوال برنامه نویسی وب چیست نزدیک میشویم. در اینجا میخواهیم چندکاری که برنامه نویسی وب برایمان میتواند انجام دهد را مثال بزنیم:

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

قدرت صفحات اینترنتی

اگر بخواهیم صادق باشیم، قدرت صفحات اینترنتی به برنامه نویسی سمت وب است. اگر برنامه نویسی سمت وب نباشد، بیش از ۹۵ درصد وبسایت ها (آمار غیردقیق) تمام کارایی خود را از دست میدهند.

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

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

طراح وب و برنامه نویس وب به هم وابسته هستند

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

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

البته که بسیاری از افراد خودشان هم میتوانند طراح وب باشند و هم برنامه نویسی وب. به این معنا که هم شکل و ظاهر وبسایت را طراحی کنند، و هم کدهای پشت صحنه‌ی آن‌را بنویسند. به این افراد اصطلاحات برنامه نویسی Full Stack یا FullStack Developer میگوند که حتما در آینده در مقالات سایت درباره‌ی آن‌ها صحبت میکنیم.

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

اگر بخواهیم بدانیم که برنامه نویسی وب چیست ، باید با زبان های برنامه نویسی وب آشنا شویم. همانطور که برای طراحی وب میتوانیم از HTML5, CSS3, Javascript و… استفاده کنیم، برنامه نویسی وب را نیز زبان های بسیار زیادی میتوانیم انجام دهیم انجام دهیم. برخی از این زبان ها عبارتند از:

البته با استفاده از روش هایی میتوان جاوا اسکریپت را برای برنامه نویسی وب نیز استفاده کرد. مثلا شما با استفاده از تکنولوژی ای به نام Node.js که بر پایه جاوا اسکریپت است، میتوانید برنامه نویسی وب را نیز با آن انجام دهید. که در آینده حتما در مورد آن‌ها صحبت میکنیم.

به چه ابزارهایی نیاز دارید

در فیلم آموزشی طراحی وب چیست، گفتیم که برای طرحی وب به چه ابزارهایی نیاز داریم. برای برنامه نویسی وب نیز، شما به ۳ ابزار مختلف نیاز دارید که در زیر آن‌ها را آورده‌ایم:

  1. یک نرم افزاری که بتوانید کدهایتان را در آن بنویسید، مثل Notepad ویندوز (و یا نرم افزارهای حرفه‌‌ای تر و پیشرفته تر)
  2. یک سرور یا شبیه ساز سرور که بتواند کدهای شما را پردازش کند (کدهایی مثل PHP برای اجرا شدن نیاز به پردازش دارند)
  3. یک مرورگر (Browser) که بتواند نتیجه‌ی پردازش کدها را به شما (یا کاربر) نشان دهد. مثل گوگل کروم، فایرفاکس یا …

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

منبع: یادیفای

نوشته برنامه نویسی وب چیست؟ درباره‌ی برنامه نویسی وب اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

طراحی وب چیست؟ همه چیز درباره‌ی طراحی وب سایت (web design)

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

طراحی وب چیست

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

اگر به دنبال یک پاسخ خیلی ساده ولی کاربردی برای سوال طراحی وب چیست هستید، فیلم زیر را مشاهده کنید

https://www.aparat.com/v/3VbeP

وب چیست؟

اگر بخواهیم به سوال طراحی وب چیست پاسخ بدهیم، اول باید بدانیم که وب چیست و به چه چیزی وب میگویند. در زیر یک تعریف بسیار ساده (و شاید تا حدودی اشتباه از لحاظ فنی) از وب ارائه میدهیم:

وب یا همان شبکه جهانی یا World Wide Web که به اختصار www نامیده میشود، همان چیزی است که امروزه به آن اینترنت میگوییم. امروزه از طریق یک مرورگر و با اتصال به این شبکه‌ی جهانی، میتوانیم به تمام اطلاعات درون آن دسترسی داشته باشیم.

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

وب سایت چیست؟

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

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

طراحی وب چیست؟

با مفهوم وب سایت نیز آشنا شدیم. حالا میخواهیم برسیم به سوال اصلی خودمان: طراحی وب چیست .

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

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

پس در پاسخ به سوال طراحی وب چیست میتوانیم بصورت بسیار ساده بگوییم: هر آن چیزی که کمک میکند وبسایت ما بهتر و زیباتر دیده شود را طراحی وب میگوند.

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

طراحی وب را با برنامه نویسی وب اشتباه نگیرید!

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

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

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

طراح وب کیست و چه وظایفی دارد؟

تا اینجا درباره‌ی طراحی وب صحبت کردیم و الان پاسخ دادن به سوال « طراحی وب چیست » برایمان کار زیاد سختی نیست. حالا میخواهیم درباره‌ی وظایف یک طراح وب صحبت کنیم و بگوییم که یک طراح وب چه کاری باید انجام دهد.

طراح وب یا به اصطلاح Front End Designer کسی است که با استفاده از تکنولوژی‌های مختلف (مثل HTML – CSS – Javascript و … ) ظاهر یک سایت را طراحی میکند و کاری به کدهای پشت صحنه ندارد.

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

زبان های طراحی وب

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

یک طراح وب، برای اینکه بتواند یک صحفه‌ی وب را طراحی کند، از تکنولوژی های زیر استفاده میکند:

  • HTML (یا HTML5)
  • CSS (یا CSS3)
  • جاوا اسکریپت
  • جی کوئری
  • و…

۴ موردی که در بالا نام بردیم، حداقل دانشی است که شما برای طراحی صفحات وب و تبدیل شدن به یک طراح وب نیاز دارید. البته میتوانید فقط با ۲ مورد اول یعنی HTML و CSS نیز سایت هایی را طراحی کنید،‌ ولی جاوا اسکریپت و جی کوئری میتوانند به کار شما بسیار قدرت دهند.

باید به این نکته توجه کنیم که به دلایلی نمیتوانیم به HTML و CSS زبان های برنامه نویسی بگوییم. زیرا اصلا ویژگی های زبان های برنامه نویسی را ندارند. بلکه آن‌ها را  زبان های نشانه گذاری یا تگ گذاری میدانیم.

برای طراحی وب به چه ابزارهایی نیاز داریم

تا اینجا سعی کردیم به سوال طراحی وب چیست پاسخ دهیم. حالا میخواهیم ببینیم که برای طراحی وب به چه ابزارهایی نیاز داریم.

برای طراحی صفحات اینترنتی، نیاز به داشتن امکانات پیچیده نیست. حداقل هایی که نیاز داریم را در زیر مشاهده میکنید:

  • یک محیطی که بتوانیم کدهایمان را در آن بنویسیم. این محیط میتواند Notepad ویندوز باشد و یا یک Text Editor یا IDE حرفه‌ای تر(مثل phpStorm)
  • یک مرورگر اینترنتی (Browser) که بتوانیم کدهایمان را از طریق آن اجرا کنید (مثل فایرفاکس، گوگل کروم و…)

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

منبع: یادیفای

نوشته طراحی وب چیست؟ همه چیز درباره‌ی طراحی وب سایت (web design) اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

شروع برنامه نویسی با زبان دارت Dart – بخش دوم


قسمت اول این آموزش را میتوانید در شروع برنامه نویسی با زبان دارت Dart – قسمت اول مشاهده نمایید.


در بخش اول این آموزش، با مقدمات زبان دارت یا همان Dart، متغیرها، انواع داده، عملگرهای اصلی و کنترل جریان در این زبان آشنا شدیم. همانطور که مشخص شده است، این زبان شباهت بسیار زیادی به زبان هایی چون c++، جاوا اسکریپت و … دارد و اگر شخصی با زبان های مشابه کار کرده باشد مشکلی در روند یادگیری دارت نخواهد داشت.

اکنون میخواهیم به توابع، کنترل خطا و کلاس ها بپردازیم.


توابع Functions

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

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

returnType functionName(inputs){
    ...
    return ...
}

اگر تابعی خروجی نداشته باشد returnType برابر void یا خالی بوده و خط return … حذف میگردد. برای مثال در کد زیر تابع main هیچ ورودی و خروجی ای ندارد ولی تابع sum سه عدد گرفته و مجموع آنها را برمیگرداند.

 int sum(int x, int y, int z){
  return x+y+z;
}
void main() {
  print(sum(1,2,3));
} 

پارامترهای اختیاری و مقادیر پیشفرض

میرسیم به یکی از نقاط قوت زبان دارت به نام optional parameters and defaults. در ورودی توابع میتوانیم پارامترهایی را بصورت اختیاری تعریف کنیم. به این مفهوم که این پارامتر میتواند به تابع ارسال شود یا نشود، و اگر ارسال نشود مقدار پیشفرضی که در نظر گرفتیم استفاده خواهد شد. مثال زیر را ببینیم:

 // named parameters
int sumNamed(int x, int y, {int z=1, int a=2}){
  return x + y + z + a;
}

// positional parameters
int sumPostitional(int x, int y, [int z=1, int a=2]){
  return x + y + z + a;
}

void main() {
  // named parameters usage
  print(sumNamed(2, 3)); // 8
  print(sumNamed(2, 3, z:9)); // 16
  print(sumNamed(2, 3, a:10)); // 16
  print(sumNamed(2, 3, a:4, z:5)); // 14
 
  // positional parameters usage
  print(sumPostitional(2,3)); // 8
  print(sumPostitional(2,3,5)); // a=5 -> return 12
  print(sumPostitional(2,3,5,7));// a=5, z=7 -> return 12

} 

در مثال فوق، پارامترهای مصطلح به named parameters داخل { } قرار میگیرند، و مفهومشان این است که هنگام صدا زدن تابع، میتوانند مقداری برایشان در نظر گرفته نشود(که در این صورت مقدار پیشفرض در تعریف بدنه ی تابع درنظر گرفته میشود)، ولی برای مقداردهی باید نام پارامتر به همراه مقدارش ذکر شود.

همچنین پارامترهای مصطلح به positional parameters داخل [ ] قرار میگیرند، و مفهومشان این است که هنگام صدار زند تابع، میتوانند مقداری برایشان در نظر گرفته نشود (که در این صورت مقدار پیشفرض در تعریف بدنه ی تابع درنظر گرفته میشود)، ولی برای مقداردهی، با توجه به ترتیبِ قرار گیری، مقادیر برای پارامترها در نظر گرفته میشوند.

توابع به عنوان پارامتر

از دیگر ویژگی های مثبت زبان دارت Functions as parameter میباشد. به این مفهوم که استفاده از تابع میتواند به عنوان پارامتر در نظر گرفته بشود. در مثال زیر این مفهوم را بررسی میکنیم:

void printElement(int element){
    print('n');
    print(element);
}

main(){
    var list = [1,2,3];
    print(list);
 
    // به ازای هر کدام از مقادیر موجود در لیست، تابع پرینت صدا زده میشود
    list.forEach(printElement);
 
    var printEl = printElement;
    // پارامتر فوق حکم تابع را دارد و هربار استفاده شود به معنی صدا زده شدن تابع میباشد
    list.forEach(printEl);
}

توابع بدون نیاز به تعریف

گاهی اوقات نیاز است که بدنه ی تابعی بدون نیاز به تعریف تابع، یا به عنوان ورودی، یا به هرصورتی دیگری نیاز به استفاده داشته باشد. در دارت به این مفهوم را با مثال زیر بررسی میکنیم:

 main(){
    var list = ['a', 'bb', 'ccc'];
 
    // anomumouse function
    list.forEach((item){
        // به ازای تمامی مقادیر روی لیست این بدنه اجرا خواهد شد
        print('${list.indexOf(item)}: $item');
        print('n');
    });
 
    // اگر نیاز به بدنه و کروشه نداشته باشیم =>
    // fat arrow version
    list.forEach((item) => print('${list.indexOf(item)}: $item'));
} 

مفهوم Lexical closures

یکی دیگر از نقاط جذاب زبان دارت. اجازه دهید این مفهوم را با مثال زیر متوجه شویم:

Function makeAdder(num addBy){
    return (num i) => addBy + i;
}

main(){
    var add2 = makeAdder(2);
    print(add2(1)); // 3
    print(makeAdder(4)(1)); // 5
} 

در خروجی تابع makeAdder خط زیر را میبینیم:

return (num i) => addBy + i;

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

var add2 = makeAdder(2);

پارامتر add2 در حقیقت تابعی است که میخواهد مقداری گرفته و با ۲ جمع کند. بنابراین زمانی که (۱)add2 صدا زده میشود، ورودی جدید (که عدد ۱ میباشد) با عدد ۲ (که قبلاً به تابع makeAdder داده شده است) جمع شده و خروجی ۳ مشاهده میگردد.

از طرف دیگر هنگام صدا زدن (۱)(۴)makeAdder ، قسمت (۴)makeAdder تابعی میسازد که آماده است هر ورودی ای گرفته و با عدد ۴ جمع کند. و با مشاهده ی (۱) عدد ۱ را با ۴ جمع کرده و خروجی ۵ را میبینیم.

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

توابع بدون خروجی

اگر تابعی داریم که صرفاً عملیاتی را انجام داده و خروجی ای ندارد، هنگام تعریف نوعی برای خروجی مشخص نمیکنیم:

 foo(){}
 
main(){
    print(foo()); // null
} 

استثناها Exceptions

زبان دارت قابلیت ایجاد و کنترل کردن Exceptionها را دارد.

واژه throw

ایجاد یک استثنا

int sum(int x, int y){
    if(x==null || y==null){
        throw new FormatException('argument is null');
    }
    return x+y;
}

main(){
    print(sum(2,3));
    print(sum(null,3)); 
    //Uncaught exception:
    //FormatException: argument is null
} 

بدنه try-catch

کنترل استثنا. به کمک بدنه ی {…}try و catch میتوان استثناها را کنترل کرد (اگر کنترل نشود برنامه به اصطلاح کِرَش خواهد کرد).

int sum(int x, int y){
    if(x==null || y==null){
        throw new FormatException('argument is null');
    }
    return x+y;
}

main(){
    try{
        sum(2,null);
    } on FormatException catch(e, s){
        print(e);    
        print(s);
    }
} 

همچنین میتوان برای Exceptionهای مختلف بدنه ی catchهای مختص خودش را پیاده کرد.

واژه Finally

اگر Exceptionی رخ دهد و خطای رخ داده به هیچ کدام از catchهای پیاده سازی شده ارتباطی نداشته باشد، به عنوان آخرین قدم به سراغ Finally میرود:

try{
    sum(null, 32);
} finally{
    print('could not add');
} 

کلاس ها در دارت Class

کلاس ها در دارت با واژه ی class شناخته میشوند.

class className{
        ....
}

مثال زیر را ببینیم:

 // class definition تعریف کلاس
class Point{
    num x, y, z=0;
}

در مثال فوق، با واژه ی class به زبان دارت میگوییم که یک کلاس تعریف میکنیم. پس از آن نام کلاس را گفته و بدنه ی کلاس را پیاده سازی میکینم. در مثال فوق (میخواهیم مختصات یک نقطه را پیاده سازی کنیم)، کلاس ما نامش Point بوده و دارای سه عضو به نام های x و y و z میباشد. هر هر شیء ای از این کلاس تعریف شود دارای این سه عضو است.

مثالی از نحوه ی تعریف یک شیء از کلاس میبینیم:

main(){
    // initialize and usage
    var point = new Point();
    print(point.x); // null
    print(point.z); // 0
} 

در زبان دارت به کمک واژه ی new میتوان یک شیء جدید از کلاس ایجاد کرد. خط زیر یک نقطه ی جدید به نام point از کلاس Point ایجاد میکند.

var point = new Point();

توابع سازنده Constructors

همانطور که در مثال قبل دیدیم، point.x خروجی null برمیگرداند که منطقی هم هست (زیرا مقداردهی نشده است). توابع سازنده به این نیست استفاده میشوند که هنگام تعریف یک شیء از یک کلاس، مواردی که کلاس نیاز دارد را بگیرد. ساختار زیر یک تابع سازنده برای کلاس Point است که مقادیر x و y را موقع تعریف شیء میگیرد.

class Point{
    num x, y, z=0; 
    Point(num x, num y){
        this.x = x;
        this.y = y;
    }
}

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

Point(this.x, this.y); 

توابع سازنده پیشفرض

یکی دیگر از ویژگی های زیان دارت این است که میتوانید توابع سازنده ی داخلی برای کلاس پیاده سازی کنید. برای مثال فرض کنید میخواهد هر زمان که خواستید به نقطه ی مبدأ مختصاب بروید. برای این کار کافیست تابع زیر را به کلاس خود اضافه کنید:

Point.origin(){
    this.x=0;
    this.y=0;
    this.z=0;
} 

یا اگر بخواهید بروید روی محور z ها کافیست تابع زیر را به کلاس خود اضافه کنید (مقدار z تغییر نکرده و مقادیر x و y صفر میشوند):

Point.originZ(){
    this.x=0;
    this.y=0;
} 

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

Point.originZ(num z){
    this.x=0;
    this.y=0;
    this.z = z;
} 

کلاسی نسبتاً کامل با موارد فوق بصورت زیر پیاشده میشود:

// class definition
class Point{
    num x, y, z=0;
 
    // constructor definition
    Point(this.x, this.y);

    Point.origin(){
        this.x=0;
        this.y=0;
    }
  
    Point.originZ(num z){
        this.x=0;
        this.y=0;
        this.z = z;
    }
} 

برای استفاده از کلاس فوق کافیست به شکل زیر عمل کنید (new Point شیء جدیدی از کلاس ایجاد میکند):

main(){
    print(new Point.origin().x); // 0
    print(new Point.originZ(10).z); // 10
} 

توابع در کلاس

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

 import 'dart:math'; // برای استفاده از توابه ریاضیات در دارت باید کتابخانه اش را اضافه کنیم

class Point{
    num x, y, z=0;
 
    Point(this.x, this.y);
 
 // این تابع فاصله میان نقطه ی فعلی تا نقطه ای که دریافت میکند را برمیگرداند
    num distance(Point other){
        var dx = this.x - other.x;
        var dy = this.y - other.y;
        return sqrt(dx*dx+dy*dy); // sqrt از زیرمجموعه توابع کتابخانه ی ریاضیات دارت میباشد
    }
}

main(){
    var point1 = new Point(1,2); 
    var point2 = new Point(4,3);
    print(point1.distance(point2)); // 3.1622776601683795
} 

خط زیر را ببینیم:

point1.distance(point2)

این قسمت، به تابع point1 میگوید که تابع distance خود را صدا بزن و به عنوان ورودی point2 را در نظر بگیر. اگر قبلا تجربه ی برنامه نویسی شیء گرا و کلاس ها را دارید که با این مفهوم مشکلی نخواهید داشت، اما اگر تجربه ی زیادی در این زمینه ندارید حتما با پیاده سازی مثال های متخلف این مفهوم ها را بررسی کنید و اجازه بدهید به خوبی برایتان جا بیفتد.

کلاس های انتزاعی Abstract classes

این کلاس ها، کلاس هایی هستند که توابعی درونشان وجود دارد که پیاده سازی نشده است. به عبارتی توابعشان باید بعداً (مثلاً هنگامی که بقیه کلاس ها از آنها ارثبری میکنند) پیاده سازی گردند. برخی زبان های اجازه ی تعریف مستقیم یک شیء از یک کلاس انتزاعی را نمیدهند ولی دارت این اجازه را میدهد. کلاس های انتزاعی با واژه کلیدی abstract تعریف میشوند:

abstract class AbstractClass{
    void updateChildren();
}

main(){
    var x = new AbstractClass();
} 


برای مشاهده ی ادامه ی آموزش به شروع برنامه نویسی با زبان دارت Dart – بخش سوم مراجعه کنید. ( به زودی )

نوشته شروع برنامه نویسی با زبان دارت Dart – بخش دوم اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

شروع برنامه نویسی با زبان دارت Dart – بخش اول

دارت یا همان Dart (در صورت علاقه میتوانید سایت رسمی این زبان را مشاهده نمایید) زبان برنامه نویسی ای است که حدود ۶ سال از معرفی آن میگذرد، گوگل آن را توسعه میدهد و گفته میشود این زبان به عنوان راه حلی برای مشکلات موجود در جاوا اسکریپت (به‌طور مثال مشکل حافظه) معرفی شده است. نظرات متفاوتی در رابطه با این زبان و آینده ی آن مطرح شده که جای تأمل دارد. از تعریف و تمجیدها گرفته و استفاده در Flutter به عنوان نکات مثبت، تا ابراز تأسف برخی از برنامه نویسان و ابراز تعجب اشخاص معروفی در حوزه آی تی و برنامه نویسی بابت حمایت گوگل از توسعه ی این زبان نظیر Brendan Eich (کسی که جاواسکریپت را توسعه داد و در زمان نوشتن این مقاله دیدی منفی نسبت به این زبان مطرح کرده است).

اینکه نهایتاً سرنوشت این زبان چه خواهد شد و پیشبینی برخی که اعتقاد دارند در آینده برای توسعه ی نرم افزارها و خودِ سیستم عامل فیوژا Fuchsia استفاده خواهد شد یا خیر جای بحث دارد، اما بصورت کلی یادگیری زبانی که شروعش ساده است و شرکتی مانند گوگل از آن حمایت میکند برای برنامه نویسان (مخصوصاً اشخاصی که بخواهند در حال حاضر با کمک Flutter اقدام به توسعه ی نرم افزار های موبایل برای هر دو سیستم عامل اندروید و iOS نمایند) عملی توجیه پذیر است. به همین دلیل در ادامه با سینتکس این زبان آشنا خواهیم شد.

از آنجا که بهترین کار برای یادگیری یک زبان برنامه نویسی تمرین است، حین خواندن این مقاله میتوانید اینجا نمونه کدهای خود را تست کنید (که البته در زمان نوشتن این مقاله، با ip ایران کدنویسی در لینکِ گفته شده امکان پذیر نیست و مجبور به تغییر ip میباشد).

همچنین توجه کنید که این آموزش مربوط به نسخه ۲٫۰٫۰ ورژن استیبل این زبان میباشد.


متغیرها Variables

با ابتدائی ترین موارد در هر زبان برنامه نویسی شروع میکنیم، متغیرها. تمامی متغیرها در دارت زیرمجموعه ی کلاس Object هستند.

در زبان دارت (همانند بسیاری از زبان های سطح بالا نظیر جاوااسکریپت، کاتلین، سوئیفت و…) هنگام تعریف یک متغیر نیازی نیست حتماً نوع آن را مشخص کرد و بصورت زیر میتوانید هر متغیری از هر نوعی تعریف کنید (در زبان دارت باید از سمیکالن یا همان ; استفاده کنید):

 var myNubmer = 123;
 var myString = 'test';

در مثال های بالا با واژه var میگوییم یک متغیر داریم، پس از آن اسم متغیر، و در نهایت مقدار آن را مشخص میکنیم. اگر میخواهید انواع ثابتی از داده را تعریف کنید نگاهی به final و const بیندازید. بصورت خلاصه به شکل زیر میتوانید انواع ثابت را تعریف کنید:

final name = 'Mohammad';
final nickName = 'Misagh';
const age = 27;
var foo = const [];
final bar = const [];
const baz = [];

انواع متغیر dynamic

نوع دیگری که در دارت وجود دارد dynamic میباشد. به این معنی که نوع خاصی برای آن در نظر گرفته نمیشود و میتواند هر نوعی از داده را داشته باشد:

dynamic testDynamic = 10;
testDynamic = 'salam'; 
testDynamic  = 12.5;

انواع متغیر صریح explicit types

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

 String str = 'test'; 

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


انواع داده Data types

بصورت پیشفرض این زبان شامل انواع زیر میباشد:

اعداد Numbers

  • اعداد صحیح int شامل ۶۴ بیت (زبان دارت در برخی موارد تبدیل به جاوااکریپت میشود که در این صورت این مقدار به رنج کوچکتری که جاوااکریپت ساپورت میکند کاهش میابد)
  int x=1;
  // خط زیر مقدار عدد تعریف شده را نشان میدهد
  print(x);
  
  // زبان دارت از اعداد هگز پشتیبانی میکند
  int hex = 0xABEDA;
  print(hex); 
  • اعداد اعشاری double شامل ۶۴ بیت
  double y = 1.4;
  double exponent = 1.24e-5;
  print(y);
  print(exponent); 

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

رشته Strings

رشته ها بصورت “…” یا ‘…’ تعریف میشوند.

// single quotes
var s1 = 'hello';
print(s1);
 
// double quotes
var s2 = "hi misagh";
print(s2); 
  
// interpolation
var y1 = 2;
var z1 = 5;
// میتوانید هر پارامتر، متغیر یا فرمولی را به این صورت در رشته مستقیماً بکار ببرید ${...}
var sum = 'The sum is ${y1+z1*2}';
print(y1); // 2
print(z1); // 5
print(sum);  // The sum is 12
  
// همچنین اگر با یک پارامتر کار داریم میتوانیم بدون هیچ آکولادی از مقدار پارامتر استفاده کنیم
var number = 12;
print('$number is a number'); // 12 is a number

کدهای زیر مثالی از تبدیل رشته و عدد است:

   // Srring -> int
  var one = int.parse('1');
  print(one); // 1
  
  // اعمال محدودیت روی تعداد ارقام عدد اعشاری
  String pi = 3.1415.toStringAsFixed(2);
  print(pi);  // 3.14

بولین Booleans

متغیرهای بولین شامل true یا false.

 bool b1 = false;
 bool b2 = true;
 bool b3 = 3==4;
 bool b4 = b1==b1;
 bool b5 = b1==b2;
 print(b1); // false
 print(b2); // true
 print(b3); // false
 print(b4); // true
 print(b5); // false
 print(0==false); // false
 print(1==false);  // false

لیست List

مثالی از تعریف یک لیست بصورت زیر میباشد:

var list = [1, 2, 3];
 
// element access
print(l1[1]);
 
// element assignment
l1[2] = 9;
 
// lenght
print(l1.length);

// insertion
l1.add(55);
 
// constant list
var lConst = [1,2,3,4];
l2[2] = 20; // error
l2.add(123); // error 

در یک لیست میتان با صدا زدن (…)list.forEach عملیاتی را روی کل مقادیر انجام داد که در بخش توابع این مورد را خواهیم دید.

مپ Map

مپ ها مجموعه ای هستند از تعدادی عنصر کلید و مقدار ( keys and values ) که بصورت زیر تعریف میشوند:

var rates = {
  // Key:    Value
  'first': 'one',
  'second': 'two',
  'third': 'three'
};

var numbers = {
  ۱: 'one',
  ۳: 'three'
};

همچنین بصورت زیر نیز میتوان مپ ها را تعریف کرد:

var rates = Map();
// خط بالا یک شی از کلاس مپ ایجاد میکند. در ادامه ی آموزش با کلاس ها و اشیا آشنا خواهیم شد
rates['first'] = 'one';
rates['second'] = 'two';
rates['fifth'] = 'five';

var numbers = Map();
numbers[1] = 'one';
numbers[3] = 'three';
// با اجرای خط زیر مقدار مرتبط با کلید ۱ تغییر میکند
numbers[1] = 'NEW ONE';

// اگر بصورت زیر تعریف کنیم نمیتوان مقدار کلیدی را تغییر داد
 final finalNumbers = const {
   ۱: 'one',  
   ۳: 'three' 
};
var vcs = const[1, 'three']; 

مثال دیگری از استفاده ی map ها را ببینیم:

 // map creation
  var m1 = {
    ۲:'test',
    ۱۰:'hehe'
  };
  var m2 = new Map();
  print(m1);
  print(m2);
 
  // element access
  print(m1[2]); // test
 
  // missing keys
  print(m1[3]); // null
 
  // setting values
  m1[10] = 'changeTen';
  m1[100] = 'changeHundred';
 
  // length
  print(m1.length); 

سایر موارد

خوب است به (Symbol (compile-time constants و Runes (رشته های UTF-32) هم نگاهی بندازید.


اپراتورها

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

 main(){
  var a = 5;
  var b = 3;
 
  // add جمع
  print(a+b); // 8
 
  // subtract تفریق
   print(a-b); // 2
 
  // multiply ضرب
   print(a*b*0.5); // 7.5
 
  // division تقسیم
   print(a/b); // 1.6666666666666667
 
  // quotient خارج قسمت
  print(a ~/ b); // 1
 
  // reminder باقیمانده
  print(a % b); // 2
 
  // increment
  a++;
  ++a;
  print(a); // 7
} 

برابری و رابطه

زبان دارت از اعمال برابری و رابطه ای پشتیبانی میکند. کد زیر را ببینیم:

 main(){
  var a = 5;
  var b = 3;
 
  // Equal برابری
  print(a==b);
  // Not equal نابرابری
  print(a!=b);
  // Less than کوچکتر
   print(ab);
  // Greater than بزرگتر
   print(a<=b);
  // Greater than or equal بزرگتر یا مساوی
   print(a>=b);
} 

بررسی نوع Type test operator

مواقع زیادی ممکن است نیاز داشته باشیم نوع یه متغیر را چک یا تبدیل کنیم. بصورت زیر میتوان این کار را انجام داد:

 main(){
  var list = ["hi", "hello"];
 
  // is
  print(list is List); // true

  // is!
  print(list is! String); // true
  print(list is! List); // false
 
  // as
  print(list as  List); // [hi, hello]
  print((list as  List).length); // 2
  print((list as int) + 4); // Error: Uncaught ...
} 

تخصیص Assignment

حالت عادی مقدار دهی را در کدهایی که تا کنون مرور کردیم، دیدیم. مثالی دیگر را بررسی میکنیم (از ویژگی های زبان دارت =?? است که عملکرد آن را خواهیم دید):

 main(){
 
  // assign
  num a = 5;
  print(a); // 5
 
  // assign if null مقداردهی در صورتی که پارامتر مقداردهی نشده باشد
  var b;
  print(b); // null
  b ??= '6';
  print(b); // 6
  b ??= a;
  print(b); // 6
 
  // compound assignment *= /= += -= ...
  a *= 2;
  print(a); // 10
} 

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

دارت عملگرهای منطقی را نیز پشتیبانی میکند. مثالی از or، and و not را ببینیم:

 main(){
 // میتوان در یک خط چند متغیر تعریف کرد
  var a = true, b = false;
 
  // or
  print(a || b); // true
 
  // and
  print(a && b); // false
 
  // not
  print(!a); // false
} 

عملگرهای bitwise و shift

از دیگر ویژگی های زبان دارت، عملگرهای بیتی و شیفت میباشد. ببینیم این عملگرها به چه صورت تأثیر گذار خواهند بود:

 main(){
  var x = 1, y = 9;
 
  // Bitwise OR
  print(x | y); // 9
 
  // Bitwise AND
  print(x & y); // 1
 
  // Bitwise XOR
  print(x ^ y); // 8
 
  // Bitwise NOT
  print(~x); // 4294967294
 
  // Shift left
  print(1<<2); // 4
 
  // Shift right
  print(3>>1); // 1
} 

عملگرهای شرطی

زبان دارت از عملگرهای شرطی تک خطی نیز پشتیبانی میکند. دو نوع از پیاده سازی را بررسی میکنیم. یکی بصورت condition ? expr1 : expr2 (اگر condition برابر true بود expr1 و در صورت false بودن expr2) و دیگری بصورت expr1 ?? expr2 (اگر expr1 برابر null نبود خودش، در صورت null بودن expr2)

 main(){
  // condition ? expr1 : expr2
  var numbers = [2,3,5];
  // میتوانیم بفهمیم عضوی در یک آرایه وجود دارد یا خیر .contains
  print(numbers.contains(4) ? 'prime' : 'not prime'); // not prime
  print(numbers.contains(3) ? 'prime' : 'not prime'); // prime
 
  // expr1 ?? expr2
  var nobleGases = { 2:'helium', 10:'neon', 18:'aragon' };
  print(nobleGases[2] ?? 'not a noble gas'); // helium
  print(nobleGases[3] ?? 'not a noble gas'); // not a noble gas
} 

جریان کنترل Control Flow

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

شرط if-else

در زبان دارت میتوان هم بصورت if بدون else و هم بصورت if همراه با else و هم بصورت ترکیبی و تو در تو شرط ها را پیاده سازی کرد. برای مثال:

var x = 5;
 
if(x<5){
    print('less than 5');
}else if (x<10){
    print('less than 10');
}else{
    print('greater or equal to 7');
    if(x%2==0){
        //...
    }else{
        //...
    }
} 

شرط switch-case

حالت دیگری از شرط ها، استفاده از switch-case میباشد:

switch(day){
    case 'test':
      print('test');
      break; // این عبارت برای اتمام کار در هر قسمت باید نوشته شود
    case 'testDay':
      print('testDay');
      break;
    default: // اگر هیچ کدام از موارد بالا اجرا نشود این قسمت اجرا میشود
      print('noDay');
  } 

حلقه for

این زبان همانند اکثر زبانهای برنامه نویسی متعارف از حلقه ها پشتیبانی میکند. در مثال زیر یک لیست تعریف کرده و دو مدل for را بررسی میکنیم. یکی حالت standard و دیگری با استفاده از واژه ی کلیدی in:

var list = ['one', 'two', 'three'];
 
// standard for
for(var i=0; i

حلقه های while و do-while

همانند سایر زبانها، تنها تفاوت میان دو حلقه، در این است که حلقه do-while حدأقل یکبار اجرا میشود و پس از آن قبل از هربار اجرای بدنه شرط چک میشود، در صورتی که حلقه ی while از همان ابتدا هربار قبل از اجرای بدنه، شرط را چک میکد.ساختار حلقه ی while به صورت زیر میباشد:

while(شرط){
    // تا زمانی که شرط برقرار است بدنه اجرا میگردد
}

مثالی از پیاده سازی حلقه while

// while loop
var x=0;
while(x<2){
    print(x);
    x++;
}
// خروجی این حلقه نمایش اعداد 0 و 1 میباشد

x=0;
while(x<0){     
    print(x);     
    x++;
 } 
  // حلقه اجرا نمیشود

ساختار حلقه ی do-while به صورت زیر میباشد:

do{
    // بدنه یکبار اجرا شده و تا زمانی که شرط برقرار است مجدد اجرا میگردد
}while(شرط);

مثالی از حلقه ی do-while

// do-while loop   
var y=0;   
do{     
    print(y);     
    y++;   
}while(y<5);
// خروجی این حلقه نمایش اعداد 0 تا 4 میباشد

y=0;
do{
    print(y);
    y++;
}while(y<0); 
// حلقه فقط یکبار اجرا شده و عدد 0 نشاغن داده میشود

خروج یا ادامه ی حلقه break and continue

main(){
    // break
    for(var i=1; i<10; i++){
        if(i%5==0)
            break; // زمانی که شرط برقرار باشد از حلقه خارج میشویم
        print(i);
    }
    // اعداد 1 تا 4 نشان داده میشوند
 
    // continue
    for(var i=0; i<10; i++){
        if(i%2==0)
            continue; // زمانی که شرط برقرار باشد ادامه ی این قسمت بدنه ی حلقه اجرا نشده و مرحله ی بعدی حلقه اجرا میشود
        print(i);
    }
    // اعداد فرد 1 تا 9 نشان داده میشوند
} 

تا اینجا با مقدمات زبان دارت، متغیرها، انواع داده، عملگرهای اصلی و کنترل جریان این زبان آشنا شدیم. ادامه ی این آموزش (توابع، کنترل خطا و کلاس ها) را میتوانید در شروع برنامه نویسی با زبان دارت Dart – بخش دوم مشاهده کنید.

نوشته شروع برنامه نویسی با زبان دارت Dart – بخش اول اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

نوشتن اولین api با فریم ورک express در Node.js به همراه آموزش mongodb با متد mvc قسمت اول

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

نصب Visual Studio Code: برای نصب کافیست از این لینک برنامه را دانلود کنید و نصب را کامل انجام بدهید.

ادیتور Vscode یکی از بهترین ادیتور ها برای نوشتن کد های جاوا اسکریپتی که من به شما پیشنهاد می دم هم اینکه اکستنشن های فراوانی داره و کار رو راحت می کنه براتون و هم اینکه بسیار سبک است و مهمتر از همه این موارد این است که Open Source هست.

نصب node.js: برای نصب اول باید به این لینک رفته و آخرین نسخه را دریافت و نصب نماییم.

نصب mongodb: اول به سایت mongodb.com بروید و طبق مراحل تصویری زیر کار را ادامه دهید.

وارد سایت شده و بر روی دکمه Get MongoDB کلیک کنید.
در مرحله بعد از بخش Tools گزینه Compass را انتخاب کنید تا GUI دیتابیس را نصب کنیم.
حالا با انتخاب نسخه و مورد نیاز جهت دانلود و سیستم عاملی که قرار است بر روی آن نصب شود عملیات دانلود را آغاز میکنیم.

پس از دانلود مراحل نصب را از طریق داکیومنت خود mongodb ادامه دهید.

نصب express: برای نصب اول باید ترمینال ادیتور خودتو رو باز کنید و با دستورات CMD به پوشه مورد نیاز جهت نصب بروید و یا ادیتور را در مسیری که پروژه قرار است فعال شود باز کنید. در ترمینال ابتدا با package.json را ایجاد کنیم برای این کار و برای اینکه سریعتر کار را به اتمام برسانیم از دستور زیر استفاده می کنیم.

npm init --y 

or

npm init --f

بعد از این که نصب رو انجام دادیم با وارد کردن دستور زیر در ترمینال express را نصب میکنیم.

npm install express

البته در زمانی که شما قصد نصب یک پکیج رو دارید می توانید به جای استفاده از کلمه install از مخفف آن یعنی i استفاده کنید

نصب middleware: برای تکمیل کار و همچنین استفاده بهتر از express ما نیاز داریم یکسری پکیج های اضافه نیز نصب کنید برای این منظور دستور زیر را در ترمینال وارد کنید.

npm install mongoose nodemon body-parser cors 

شما با نصب پکیج mongoose امکان اتصال node.js را با دیتابیس mongodb را دارید همچنین برای اجرای بلادرنگ کد بر روی سرور (با هر تغییر در کد شما بلافاصله می توانید خروجی را مشاهده کنید) از nodemon استفاده میکنیم دو مورد دیگر هم در ادامه توضیح خواهم داد.

اگر فایل package.json را باز کنید مشاهده خواهید کرد در بخش dependencies مواردی که در بالا نصب کرده ایم در این بخش قرار گرفته است.

تکمیل نصب dependencies

برا نوشتن کد ها باید یک فایل جدید با نام index.js ایجاد کنید و در داخل آن کد های زیر را وارد نمایید.

برای تست نصب و راه اندازی express کد زیر را ابتدا جهت معرفی express و راه اندازی آن اضافه میکنیم.

const express = require('express');
const app = express();

بعد از افزودن کد بالا نیاز داریم تا سرور را راه اندازی و اجرا کنیم برای این کار با استفاده از دستور listen باید سرور را راه اندازی کنیم، کد زیر را در ادامه فایل index.js اضافه کنید.

app.listen(3000 , () => {
 console.log(`Server running at Port 3000`)
});

حالا برای اجرا کافی است در ترمینال خود دستور nodemon index.js را وارد نمایید تا استارت سرور آغاز شود.

به جای nodemon میتوانید از پیش فرض خود node.js یعنی node index.js استفاده کنید.

پس از اجرا با دستور nodemon index.js

سرور ما شروع به کار کرد بر روی پورت ۳۰۰۰ ولی هنوز امکان مشاهده بر روی مرورگر را نداریم.

نکته: میتوانیم برای استفاده راحت تر و سریع تر از nodemon کد زیر را در بخش scripts فایل package.json به جای test اضافه کنیم و با دستور npm run start سرور را راه اندازی کنیم.

"start": "nodemon index.js"

همانند تصویر زیر:

خروجی با استفاده از دستور npm run start

ادامه دارد…


نوشته نوشتن اولین api با فریم ورک express در Node.js به همراه آموزش mongodb با متد mvc قسمت اول اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی