Code Module | کد ماژول
1.91K subscribers
357 photos
42 videos
6 files
355 links
Hello World 🌎

<> Earth is programmable if you code it </>

Group 👇🏻
@CodeModuleGap

Contact Us 👇🏻
@MrShahiin
@neoMahan
Download Telegram
ویدیو مد نظرتو با هوش مصنوعی ترجمه کن! 😎

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

دیگه نیاز نیست بخاطر بلد نبودن زبان های خارجه، منابعتون رو محدود کنید 🏖️

🔵Website

#ai #tools
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👌3
الگو طراحی سازنده چیه؟ 🧐

الگو طراحی سازنده یا به عبارت دیگه Builder Design pattern یک الگو Creational و همچنین جزو 23 الگو مهم GoF هست.

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

بیاید یک مثال بزنیم!

فکر کنید قرار یک کلاس House بسازیم که این کلاس، یک شبیه ساز از فرایند ساخت خونه هست و قراره در بیشتر موارد ازش استفاده کنیم.
به صورت بیسیک و پایه باید خونه چهاردیوار، یک دَر، یک جفت پنجره و یک سقف داشته باشه. اما اگه یکی مثلا بخواد برای خونه خودش حیاط خلوت، بالکن یا یک طبقه جدید اضافه کنه چی؟

احتملا ساده ترین راه حل گسترش کلاس با پارامتر های زیاده، مثلا :
new House(4،1،true، false......) 

اما در بیشتر موارد پارامتر ها استفاده نمیشن و هر زمان از کلاس House استفاده کنیم کد رو کثیف میکنه.

اینجاست که الگو Builder به کمکمون میاد!

الگو بیلدر میگه فراخوانی متد هارو از constructor به متد build منتقل کنیم، به این صورت :
House builder :

BuildWalls()
BuildDoors()
And....
Build() : House


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

چه زمانی از این الگو استفاده کنیم؟

🔢 ساخت یک شی پیچیده با تعداد پارامتر های بالا.

🔢 هر زمان نیاز به ساخت یک شئ به‌ صورت‌ گام به گام داشتیم.

چه زمانی از این الگو استفاده نکنیم؟

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

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

🔵اگه کلاس Builder با constructor ارتباط داشته باشه، میتونه انعطاف پذیری و نگهداری کد رو کاهش بده که برای نگهداری بهتر از loser coupling استفاد میکنیم.

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


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


#design_pattern #builder
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62
پلاگینی برای مرتب سازی کلاس‌های tailwind 😎

🔵اخیرا یک پلاگین کاربردی و جدید به اسم prettier-plugin-tailwindcss ریلیز شده، که ترکیبی از پلاگین های prettier و tailwindCss هست و کار جفتشون رو یکجا انجام میده.

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

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


🔵Article

#tailwind #plugin #prettier
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤‍🔥2👌2
الهی به امید تو پایتون رو شروع کنیم 😂


#fun
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17❤‍🔥1
استایل‌ دادن به لاگ‌های جاوا اسکریپت در کنسول ✌️

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

کد زیر رو در نظر بگیرید⬇️

console.log("%c%s", 
"color: red; background: yellow; font-size: 24px;",
″CodeModule!");


اولین آرگومان ورودی یعنی (%c%s) استایل متن رو مشخص می‌کنه، دومین آرگومان رنگ رو تنظیم کرده که در کد بالا red (قرمز) تعیین شده. سومین آرگومان بک‌گراند رو مشخص می‌کنه و آرگومان های بعدی، به ترتیب سایز نوشته و خود نوشته هستند. اگه این کد رو در کنسول مرورگر اجرا کنید، کلمه CodeModule به‌ رنگ قرمز، با بک‌گراند زرد و فونت نسبتاً بزرگی چاپ میشه. استایل های دیگه ای هم میتونیم واسه لاگ هامون در نظر بگیریم و ترتیب آرگومان های استایل دهی اصلا مهم نیست.

برای مثال :

let StylesArray=[ 
'background-color: #f0c807',
'border: 1ps solid red',
'padding: 10px 20px',
'font-size: 10px',
].join(';')
console.log('%c CodeModule',StylesArray)

با استفاده از این ترفند، میتونید لاگ های کارآمد تر و زیبا تری داشته باشید 🔥

#javascript
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7😁1👌1
چرا لینوکس رو به ویندوز ترجیح بدیم؟🖼️

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


1️⃣لینوکس پایدار و مستحکمه

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

👌لینوکس خيلی بهتر از ويندوز ميتونه تعداد زیادی از پردازش هارو در يک لحظه اجرا كنه.


2️⃣لینوکس امنه

لینوکس ذاتا امن تر از ویندوزه. چه روی سرور و چه روی دسکتاپ، و به همین دليله که بر اساس يونيكس ساخته شده. در لینوکس فقط مدیر یا کاربر root، دارای اختیارات مدیریتیه، و کمتر به کاربرای معمولی و برنامه های کاربردی اجازه دسترسی به کرنل داده میشه و همین باعث ميشه همه چیز ماژولار و حفاظت شده باشه.

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

3️⃣لینوکس رایگانه

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

4️⃣ لینوکس اوپن سورسه

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

5️⃣لینوکس هر نوع فایلی رو اجرا می‌کنه

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

این سیستم عامل محبوب و دوست داشتنی مزایای دیگه ای هم داره، اما ترجیح دادیم به مهم ترین و حیاتی ترین تفاوت هاشون بپردازیم.امیدوارم لذت برده باشید🔥


#linux #os #windows #different
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥4
Good Night 🌚

به کسانی که بهتون هِیت میدن و حسادت میکنن احترام بذارید، چرا که اون ها از صمیم قلب معتقدند؛ شما بهتر از خودشون هستید.


@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥18👌5🔥4
مفهوم ماژول child_process در Node.js🤟

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

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

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

1️⃣هر فرایند در ابتدا از یک رشته اصلی شروع میشه و ممکنه از یک یا چند رشته دیگر تشکیل بشه.

2️⃣یک فرایند میتونه از فرایند های دیگه ای به نام فرایند فرعی، نمونه سازی کنه.

فرایند فرعی یا Sub process چیه ؟

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

فرایند فرعی از منابعی که توسط فرایند والد به اشتراک گذشته میشه استفاده میکنه.

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

فرایند فرعی در Node.js 🔥

در nodejs ما از ماژول child_process برای تعامل با فرایند ها استفاده می‌کنیم.

فرایند فرزند یا child_process چیه؟

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

🔵این ماژول شامل متد های متعددی مثل exec fork و spawn هست که هرکدوم به ما برای تعامل با سیستم کمک می‌کنند، به طور کلی:

🔵با استفاده از exec میتونیم یک دستور رو در ترمینال خودمون اجرا کنیم.

با استفاده از spawn میتونیم یک فرایند بسازیم و امکان برقراری ارتباط بین ورودی و خروجی و مدیریت کنیم.

‌متد fork یک فرایند فرزند ایجاد میکنه که از فرایند اصلی یا والد جداست.

به صورت کلی دونستن نحوه مدیریت فرایند های ثانویه درمورد عملیات فشرده CPU یا CPU-intensive، کاربردی و مفیده که با توجه به پروژمون میتونیم با استفاده از exec spawn و fork قابلیت های مختلفی برای کنترل فرایند ها ارائه بدیم.


#child_process #nodejs
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👌6
اگه برای تمرین و کدنویسی دنبال ui خاصی میگردید، این طرح فیگما رو به هیچ وجه از دست ندید 💀

(طرح رسپانسیوش هم موجوده)

🔵 Link

#figma
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤‍🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13
🐱 برای گیتهابت پروفایل زیبا و حرفه ای بساز

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

این ابزار به شما این امکان رو میده که یک Readme با آمار کامیت ها، استار ها و همچنین skill هاتون با ظاهر آیکون بسازید، و به عنوان پروفایل گیتهابتون نمایشش بدید ✈️

🔵 Website

#tools #github
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥144❤‍🔥2
سند SRS چیه و چه کاربردی داره؟🧐

سند SRS یا به عبارت دیگه Software Requirements Specification،
یک سند جامع هست که هدف، عملکرد، محیط عملیاتی، اهداف پروژه، سرعت، امنیت و انتظارات عملکردی یک برنامه نرم‌افزاری رو تعریف میکنه و میتونه به سوالاتی مثل اینکه، چجوری کار میکنه، نحوه تعاملش با کاربران و نحوه تعامل با سخت/نرم افزار های دیگه جواب بده. اما این سند قبل از انتشار باید تایید بشه و برای تایید، نیازمند اعتبار سنجی SRS هست.

اعتبار سنجی SRS چیه؟

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

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

1️⃣ آیا سند SRS تمام عملکرد های لازمه تعاملات کاربر و الزامات عملکردی رو در‌ بر می‌گیره؟ یا باگی در سیستم وجوده داره که در آینده منجر به خطا بشه؟

2️⃣تناقض یا ناسازگاری در خود SRS وجود داره؟

3️⃣آیا الزامات ذکر شده در SRS واقع بینانه و در چهارچوب محدودیت پروژه (بودجه، زمان، فناوری) قابل دستیابی هست؟

4️⃣آیا SRS به صورت واضح و مختصر نوشته شده؟ یا اصطلاحات مبهمی داره که توسط توسعه دهنده ها به اشتباه تفسیر یا برداشت میشه؟

5️⃣میشه الزامات موجود در سند رو به صورت عینی آزمایش و اندازه گیری کرد؟

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

برای نوشتن یک سند SRS، ابزار های زیادی وجود داره که من به چند تاشون اشاره می‌کنم.

1) Microsoft work
2) Google Docs
3) JIRA

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

🔵دانلود
🔵دانلود

همچنین برای درک کامل و نحوه پیاده سازی یک سند SRS، میتونید از منابع زیر استفاده کنید.

- Article
- Article
- Article

به صورت کلی، این سند اهمیت بالایی‌ داره و برای پروژه های مهم از اون برای تعامل، وضوح و ابهام زدایی و... استفاده میکنن!
پیشنهاد میکنم به مثال ها و مقاله هایی که بالا معرفی شد، حتما یک سر بزنید🔥


#srs #programing
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64
کدهای CSS اضافه رو پاک کن! 🔵

در واقع Purgecss ابزاریه که کدهای CSS بلااستفاده رو حذف می‌کنه، و شما می‌تونید از این ابزار به عنوان قسمتی از چرخهٔ توسعهٔ پروژتون استفاده کنید.

شما ممکنه به عنوان یک طراح وب‌سایت از فریمورک‌هایی نظیر Bootstrap ،Foundation و ... استفاده کنید، اما در نهایت شما قسمت اندکی از این فریمورک‌ها رو استفاده می‌کنید و قسمت اعظم استایل‌های CSS موجود در این فریمورک‌ها، بلااستفاده میمونن که باعث میشه حجم فایل هاتون زیاد بشه.

اینجا PurgeCSS به شما کمک می‌کنه که کدهای CSS اضافی و غیرضروری، که در فایل‌های CSS شما وجود دارن رو حذف کنید و به این‌ ترتیب، حجم فایل‌های CSS کمتر میشه.

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

Document 🌕

#purgecss #css
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👌3
هر ایرانی یک همستر 😂😂

#fun
@CodeModule
😁152
مفهوم Stream در Node.js 🤟

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

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

🧐اما این درخواست ها چجوری هندل میشن؟

دوتا سناریو مختلف!

1️⃣ سروری که استریم رو پیاده سازی نمیکنه:

به فرض مثال ما یک api برای دریافت فیلم داریم. اگه ما 5 بار درخواست به api ارسال کنیم، سرور فایل رو 5 بار میخونه و مصرف حافظه 5 برابر میشه، و هرچقدر فایل بیشتر باشه مصرف حافظه بیشتر میشه.

2️⃣سروری که استریم رو پیاده سازی میکنه:

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

انواع مختلفی استریم در Node.js وجود داره:

🔵استریم خواندنی (Readable streams):

ساخت استریم برای خوندن، مثلا یک فایل mp4 رو میتونیم به صورت بخش به بخش بخونیم.

🔵استریم نوشتنی (Writable streams):

برای ساخت یک استریم استفاده میشه، مثلا برای ساخت یک فایل با داده های زیاد.

🔵استریم داپلکس(Duplex streams):

ساخت یک استریم که هم میشه خوند و نوشت.

🔵استریم تبدیلی (Transform streams):

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


به صورت کلی استریم ها در nodejs میتونن خیلی مفید باشن، چون به صورت non-blocking یا غیر مسدود کننده هستن و ما میتونیم مجموعه داده های بزرگ رو مدیریت و پردازش کنیم 🏖️


#stream
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👌3
📊 با کتابخانه D3.js بیشتر آشنا بشید

در واقع D3.js که مخفف شده (Data-Driven Documents) هست، یک کتابخانه جاوااسکریپتی برای ایجاد data visualization های تعاملی بر اساس داده ها هست. این کتابخانه به عنوان یک ابزار قدرتمند برای ایجاد نمودارها، نقشه‌ها، چارت‌ها و دیگر data visualization ها با استفاده از HTML، SVG و CSS شناخته میشه.

مزایای استفاده از D3.js چیه ?

🟢قابلیت کاستومایز سازی

🟢امکان تعامل با کاربر

🟢امکان ادغام با داده‌های مختلف

🟢پشتیبانی از مجموعه وسیعی از نوع‌های visualization و امکانات بسیار قدرتمند، برای کنترل دقیق و نمایش داده‌ها.

معایب کتابخانه D3.js چیه ?

🔴یادگیری زمان بر

🔴نیازمند دانش قوی جاوااسکریپتی

🔴پیچیدگی بیش از حد برای پروژه های کوچیک


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

برای یادگیری این کتابخانه خفن و کاربردی میتونید به داکیومنتش مراجعه کنید.

Document 🌕

#d3js #library #js
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥122
با تکنیکی به نام Memoization آشنا بشید ✌️

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

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

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

🔵Closures
🔵Higher Order Functions

برای روشن تر شدن موضوع، مثال کلاسیک دنباله فیبوناچی رو با ممورازیشن پیاده سازی میکنیم⬇️

const fib = (n, memo) => { 
memo = memo || {}

if (memo[n]) {
return memo[n];
}

if (n <= 1) {
return n;
}

memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
return memo[n];
}


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

memo = memo || {} 


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

if (memo[n]) {
return memo[n]
}


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

memo[n] = fib(n - 1, memo) + fib(n - 2, memo);  
return memo[n];


و تمام، با دو خط کد memoization رو پیاده سازی کرده ایم و عملکرد پروژه رو به طور قابل توجهی بهبود بخشیدیم.

🔵تکنیک Memoization تنها در مورد تابع‌های محض(pure functions) قابل اجرا هست.

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

#memoization #js
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥72