اگه این مقاله از من رو خونده باشید، تو قسمتی ازش به برنامه نویسی اعلانی (Declarative) و برنامه نویسی دستوری (Imperative) اشاره کردم. تو این مقاله میخوایم درباره این دو الگو (Paradigm) برنامه نویسی به صورت مختصر یاد بگیریم.
در این الگوی برنامه نویسی، برنامهای که نوشته میشه باید دقیقا مرحله به مرحله به کامپیوتر بفهمونه که چه کاری باید انجام بده. در واقع تمرکز بیشتر روی الگوریتمهایی هست که برای رسیدن به هدف خاص نوشته میشن.
برای مثال یه کد جاوا اسکریپتی که با استفاده از این الگو نوشته شده رو با هم ببینیم:
const list = ['a', 'b', 'c', 'd']; let word = '' for(item in list) { word = word + item; } console.log(word); // 'abcd'
همونطور که میبینید، توی این کد ما دقیقا و مرحله به مرحله به کامپیوتر میگیم که چه کارهایی رو انجام بده تا نهایتا مقدار word که مجموع مقادیر عناصر موجود در متغیر list هست رو به دست بیاره و نشون بده.
احتمالا تو اوایل مسیر یادگیری برنامهنویسی بیشتر با این نوع برنامهنویسی سر و کله زدید یا میزنید!
استفاده از این الگوی برنامه نویسی فهمیدن کد رو راحتتر میکنه و همچنین کنترل بهتری رو به توسعهدهنده میده. کاربردش هم بیشتر در زبانهای برنامهنویس سطح پایین (low-level) و برنامههایی هست که نیاز به کنترل و بهینگی بالایی دارن.
در این الگو، ما بیشتر به دنبال این هستیم که نتیجه نهایی از کدی که نوشته میشه بگیریم و خیلی درگیر نوشتن مرحله به مرحله عملیات و الگوریتم برای انجام یه کار خاص نمیشیم. به بیان دیگه، عملیات رو به صورت کلی مشخص میکنیم و انجام مراحل ریز به ریز رو به زبان یا فریمورکی که داریم باش کار میکنیم میسپریم. نمونه کد زیر دقیقا کاری رو انجام میده که کد قبلی انجام میداد و تفاوتش در الگوی برنامهنویسیشه:
const list = ['a', 'b', 'c', 'd']; const word = list.join('') console.log(word); // 'abcd'
توی این کد، ما به جای این که به کامپیوتر مرحله به مرحله بگیم توی لیست پیمایش کن و آیتمها رو دونه به دونه به انتهای متغیر word اضافه کن، از متد join جاوا اسکریپت استفاده میکنیم و درگیر جزئیات الگوریتم نمیشیم.
مزایای استفاده از این الگوی برنامهنویسی:
۱) فهم راحتتر نتیجه نهایی کد
۲) نزدیکی بیشتر کد به موضوع و مشکل به جای راه حل اون
۳) قابلیت بهبود بهینگی بدون تغییر کد (از طریق تغییر در لایههای زیرین زبان، فریمورک یا سیستم)
امروزه تو اکثر زبانهای برنامهنویسی از این دو الگو به صورت همزان پشتیبانی میشه و توسعهدهنده میتونه با توجه به کاری که میخواد انجام بده از هر کدوم از الگوها به صورت جدا گونه و یا حتی مشترک استفاده کنه.
امیدوارم این مقاله براتون مفید بوده باشه.