<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mehedi Hasan Joy</title>
    <description>The latest articles on DEV Community by Mehedi Hasan Joy (@joy5k).</description>
    <link>https://dev.to/joy5k</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F990041%2F49f754cf-86ab-40a2-8651-d014322df104.png</url>
      <title>DEV Community: Mehedi Hasan Joy</title>
      <link>https://dev.to/joy5k</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joy5k"/>
    <language>en</language>
    <item>
      <title>API in Next.js vs. Separate Backend (Bangla)🚀</title>
      <dc:creator>Mehedi Hasan Joy</dc:creator>
      <pubDate>Mon, 17 Mar 2025 07:58:28 +0000</pubDate>
      <link>https://dev.to/joy5k/api-in-nextjs-vs-separate-backend-bangla-5gna</link>
      <guid>https://dev.to/joy5k/api-in-nextjs-vs-separate-backend-bangla-5gna</guid>
      <description>&lt;p&gt;Next.js-এর &lt;strong&gt;"api"&lt;/strong&gt; ফোল্ডার এবং আলাদা &lt;strong&gt;Node.js + Express.js&lt;/strong&gt; ব্যাকএন্ড রাখার মধ্যে পার্থক্য ও কোনটি বেস্ট প্র্যাকটিস, তা বুঝতে হলে কয়েকটি বিষয় বিবেচনা করতে হবে।  &lt;/p&gt;




&lt;h3&gt;
  
  
  🔹 &lt;strong&gt;Next.js API Routes ("/api" ফোল্ডার)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Next.js-এর &lt;code&gt;/api&lt;/code&gt; ফোল্ডারের মাধ্যমে আপনি সার্ভারলেস ফাংশন তৈরি করতে পারেন। এখানে আপনি এক্সপ্রেস বা অন্য কোনো সার্ভার সেটআপ ছাড়াই API তৈরি করতে পারবেন।&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Next.js API Routes-এর সুবিধা:&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;একই কোডবেসে API এবং UI&lt;/strong&gt; – API আলাদা ব্যাকএন্ড সার্ভার ছাড়াই Next.js-এর মধ্যেই থাকে।
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;সার্ভারলেস ফাংশন সাপোর্ট&lt;/strong&gt; – Next.js API Routes &lt;strong&gt;Vercel&lt;/strong&gt; বা &lt;strong&gt;Netlify&lt;/strong&gt;-তে সহজে ডিপ্লয় করা যায়।
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSR ও API একসাথে ব্যবহার করা যায়&lt;/strong&gt; – আপনি সার্ভার-সাইড রেন্ডারিং (SSR) ও API একত্রে ব্যাবহার করতে পারেন।
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;কম্প্লেক্স ব্যাকএন্ড না থাকলে উপযুক্ত&lt;/strong&gt; – ছোট বা মিডিয়াম লেভেলের প্রোজেক্টের জন্য ভালো।
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;❌ &lt;strong&gt;দুর্বলতা:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;যদি আপনার ব্যাকএন্ড অনেক বেশি কমপ্লেক্স হয় (যেমন: ওয়েবসকেট, ব্যাকগ্রাউন্ড টাস্ক, হেভি অথেন্টিকেশন), তাহলে &lt;code&gt;/api&lt;/code&gt; ফোল্ডার সীমাবদ্ধ হয়ে যাবে।
&lt;/li&gt;
&lt;li&gt;Next.js API Routes সাধারণত &lt;strong&gt;লং রানিং প্রসেস&lt;/strong&gt; (যেমন: ভিডিও প্রসেসিং, ব্যাকগ্রাউন্ড জব) হ্যান্ডেল করতে পারে না।
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔹 &lt;strong&gt;আলাদা Backend (Node.js + Express.js)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;এখানে আপনি সম্পূর্ণ আলাদা একটি &lt;strong&gt;Node.js + Express.js&lt;/strong&gt; সার্ভার তৈরি করেন, যেখানে API এবং ফ্রন্টএন্ড আলাদা থাকে।&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;এর সুবিধা:&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;স্কেলেবল&lt;/strong&gt; – বড় স্কেলের অ্যাপ ডেভেলপমেন্টের জন্য ভালো।
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;সর্বোচ্চ কাস্টমাইজেশন&lt;/strong&gt; – Next.js API Routes-এর তুলনায় Express.js দিয়ে আপনি অনেক বেশি কাস্টম লজিক লিখতে পারবেন।
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;সিকিউরিটি&lt;/strong&gt; – ব্যাকএন্ড আলাদা হলে সিকিউরিটি কনফিগারেশন আরও ভালোভাবে হ্যান্ডেল করা যায়।
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ব্যাকগ্রাউন্ড প্রসেস সহজ&lt;/strong&gt; – ভিডিও প্রসেসিং, ব্যাচ প্রসেসিং, ওয়েবসকেট, জব স্ক্যজ্যুলিং সহজে হ্যান্ডেল করা যায়।
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ডাটাবেস কনফিগারেশন&lt;/strong&gt; – ডেডিকেটেড ব্যাকএন্ড থাকায় ডাটাবেস কানেকশন ও ORM (যেমন Prisma, Mongoose) আরও ভালোভাবে ব্যবহার করা যায়।
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;❌ &lt;strong&gt;দুর্বলতা:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ডিপ্লয়মেন্ট বেশি কষ্টকর&lt;/strong&gt; – Next.js API Routes Vercel বা Netlify-তে সরাসরি হোস্ট করা যায়, কিন্তু Express.js আলাদা সার্ভারে (যেমন: DigitalOcean, AWS, Heroku) হোস্ট করতে হয়।
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;এক্সট্রা মেইনটেন্যান্স দরকার&lt;/strong&gt; – আলাদা সার্ভার মেইনটেন করা লাগবে।
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔥 &lt;strong&gt;তাহলে কোনটি ভালো?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✅ &lt;strong&gt;ছোট প্রোজেক্ট বা MVP (Minimal Viable Product)&lt;/strong&gt; → &lt;strong&gt;Next.js API Routes&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;বড় স্কেলের SaaS, ই-কমার্স, রিয়েল-টাইম অ্যাপ&lt;/strong&gt; → &lt;strong&gt;Express.js + আলাদা Backend&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;আপনার যদি একটা ছোট বা মিডিয়াম-সাইজ প্রোজেক্ট থাকে যেখানে API বেশি কমপ্লেক্স না, তাহলে &lt;strong&gt;Next.js API Routes&lt;/strong&gt; বেস্ট।&lt;br&gt;&lt;br&gt;
কিন্তু যদি বড় স্কেল প্রোজেক্ট বানাচ্ছেন যেখানে &lt;strong&gt;ওয়েবসকেট, ব্যাকগ্রাউন্ড জব, ভিডিও প্রসেসিং, মাল্টিপল সার্ভিস ইন্টিগ্রেশন&lt;/strong&gt; লাগবে, তাহলে &lt;strong&gt;Express.js ব্যাকএন্ড&lt;/strong&gt; ভালো অপশন হবে।  &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>dailydev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Best Practice: API in Next.js vs. Separate Backend</title>
      <dc:creator>Mehedi Hasan Joy</dc:creator>
      <pubDate>Mon, 17 Mar 2025 07:41:33 +0000</pubDate>
      <link>https://dev.to/joy5k/best-practice-api-in-nextjs-vs-separate-backend-3gjg</link>
      <guid>https://dev.to/joy5k/best-practice-api-in-nextjs-vs-separate-backend-3gjg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchz90rzg28j2z3opvere.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchz90rzg28j2z3opvere.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 &lt;strong&gt;Next.js API Routes ("/api" Folder)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Next.js provides an &lt;strong&gt;"/api"&lt;/strong&gt; folder where you can define API routes without needing a separate backend server. These API routes act like serverless functions and can handle requests just like a traditional backend.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Advantages of Next.js API Routes:&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;API &amp;amp; UI in the same codebase&lt;/strong&gt; – You don’t need a separate backend; everything is managed within Next.js.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supports serverless functions&lt;/strong&gt; – Works seamlessly with platforms like &lt;strong&gt;Vercel&lt;/strong&gt; and &lt;strong&gt;Netlify&lt;/strong&gt; for easy deployment.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Combines SSR and API&lt;/strong&gt; – You can use &lt;strong&gt;server-side rendering (SSR)&lt;/strong&gt; and API endpoints together.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Great for simple or medium-level applications&lt;/strong&gt; – If your project doesn't require a complex backend, this is an easy solution.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;❌ &lt;strong&gt;Disadvantages:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not ideal for &lt;strong&gt;complex backend logic&lt;/strong&gt; like WebSockets, background tasks, or advanced authentication.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-running processes&lt;/strong&gt; (e.g., video processing, job scheduling) are difficult to handle with Next.js API Routes.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔹 &lt;strong&gt;Separate Backend (Node.js + Express.js)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This approach involves creating a standalone &lt;strong&gt;Node.js + Express.js&lt;/strong&gt; backend, which operates separately from the frontend.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Advantages of a Separate Backend:&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Highly scalable&lt;/strong&gt; – Ideal for large-scale applications.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More customization&lt;/strong&gt; – Unlike Next.js API Routes, you have full control over backend logic.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better security&lt;/strong&gt; – A dedicated backend allows for more advanced security configurations.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles background processes efficiently&lt;/strong&gt; – Great for &lt;strong&gt;video processing, batch jobs, WebSockets,&lt;/strong&gt; and complex tasks.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better database management&lt;/strong&gt; – Works well with dedicated database connections using &lt;strong&gt;Prisma, Mongoose, PostgreSQL, MongoDB&lt;/strong&gt;, etc.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;❌ &lt;strong&gt;Disadvantages:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More complex deployment&lt;/strong&gt; – Unlike Next.js API Routes (which can be deployed on Vercel/Netlify), a separate backend requires hosting on &lt;strong&gt;DigitalOcean, AWS, Heroku, etc.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional maintenance required&lt;/strong&gt; – You have to manage the backend server separately.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔥 &lt;strong&gt;Which One is Better?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✅ &lt;strong&gt;For small projects or MVPs (Minimal Viable Products)&lt;/strong&gt; → &lt;strong&gt;Next.js API Routes&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;For large-scale SaaS, eCommerce, or real-time applications&lt;/strong&gt; → &lt;strong&gt;Express.js + Separate Backend&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;If you’re building a small or medium-sized application where API logic is simple, &lt;strong&gt;Next.js API Routes&lt;/strong&gt; are a great choice.&lt;br&gt;&lt;br&gt;
However, if you're working on a &lt;strong&gt;large-scale project&lt;/strong&gt; requiring &lt;strong&gt;WebSockets, background tasks, video processing, or multiple services&lt;/strong&gt;, then &lt;strong&gt;a separate Express.js backend&lt;/strong&gt; is the better option.  &lt;/p&gt;

&lt;p&gt;👉 **What kind of project are you working on?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>জাভাস্ক্রিপ্ট ফাংশন কী? (জয়)</title>
      <dc:creator>Mehedi Hasan Joy</dc:creator>
      <pubDate>Fri, 20 Dec 2024 16:47:30 +0000</pubDate>
      <link>https://dev.to/joy5k/jaabhaaskriptt-phaanshn-kii-jyy-1n25</link>
      <guid>https://dev.to/joy5k/jaabhaaskriptt-phaanshn-kii-jyy-1n25</guid>
      <description>&lt;p&gt;জাভাস্ক্রিপ্ট ফাংশন কী? (জয়)&lt;br&gt;
জাভাস্ক্রিপ্ট ফাংশন হলো প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ। আপনি যদি একেবারে নতুন হন এবং কোনো ধারণা না থাকে, তবে চিন্তার কিছু নেই। এরপর আশা করি আপনার কোন ভয় আপনার থাকবেনা!&lt;/p&gt;

&lt;p&gt;ফাংশন কী?&lt;br&gt;
ফাংশন হলো এমন একটি কোডের ব্লক যা একটি নির্দিষ্ট কাজ সম্পন্ন করে। এটিকে আপনি একটি জাদুর বাক্স হিসাবে কল্পনা করতে পারেন, যেখানে আপনি কিছু ইনপুট দিবেন এবং এটি কাজ করে ফলাফল আউটপুট পাবেন।বিষয়টা একটু সহজ ভাবে বলতে গেলে মনে করুন,একবার আপনি বাক্সটি তৈরি করলেন এবং আপনি এটি বারবার ব্যবহার করতে চান।&lt;br&gt;
যেমন: ধরুন, আপনার মা প্রতিদিন সুস্বাদু খাবার রান্না করেন। প্রতিবার, তিনি পেঁয়াজ কাটেন, মশলা মেশান এবং রান্না করেন। এখন, যদি তাঁর কাছে একটি জাদুর বাক্স থাকত যেখানে তিনি শুধু লিখতেন "মুরগির কারি রান্না করো" এবং খাবার প্রস্তুত হয়ে যেত, তাহলে সময় এবং পরিশ্রম কতটা বাঁচত!&lt;br&gt;
জাভাস্ক্রিপ্টে, ফাংশন সেই জাদুর বাক্স।&lt;/p&gt;

&lt;p&gt;জাভাস্ক্রিপ্টে ফাংশন কিভাবে কাজ করে&lt;br&gt;
১. জাদুর বাক্স তৈরি করা(ফাংশন ডিফাইন করা):&lt;br&gt;
প্রথমে, আমরা ফাংশন ডিফাইন করি যেন জাভাস্ক্রিপ্ট জানে কী কাজ করতে হবে।&lt;br&gt;
উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
function sayHello() {
    console.log("হ্যালো, কেমন আছেন?");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে:&lt;br&gt;
function: ফাংশন ডিফাইন করার জন্য কিওয়ার্ড( এটা লিখতে হবেই)।&lt;br&gt;
sayHello: ফাংশনের নাম (আপনি যেকোনো অর্থবহ নাম দিতে পারেন)।&lt;br&gt;
{}: এই কার্লি ব্রেসের ভেতরেই ফাংশনের কি কাজ করবে সেটা লেখা হয়।&lt;/p&gt;

&lt;p&gt;২. ফাংশন কল করা (জাদুর বাক্স খোলা):&lt;br&gt;
ফাংশন ডিফাইন করার পরে, আপনাকে এটি কল করতে হবে যেন এটি কাজ করে।&lt;br&gt;
উদাহরণ:&lt;br&gt;
sayHello(); // আউটপুট: হ্যালো, কেমন আছেন?&lt;br&gt;
যখনই আপনি sayHello() লিখবেন, ফাংশনটি চালু হবে এবং "হ্যালো, কেমন আছেন?" প্রিন্ট করবে।&lt;/p&gt;

&lt;p&gt;ফাংশনের ভিন্ন ধরন&lt;br&gt;
১. প্যারামিটারযুক্ত ফাংশন (ইনপুটসহ জাদুর বাক্স):&lt;br&gt;
যখন ফাংশন কোনো ডেটা নেয় এবং তার উপর কাজ করে।&lt;br&gt;
উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function greet(name) {
    console.log("হ্যালো, " + name + "! কেমন আছো?");
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;greet("রাহুল"); // আউটপুট: হ্যালো, রাহুল! কেমন আছো?&lt;br&gt;
এখানে name হলো প্যারামিটার, যা আপনি ফাংশনে ইনপুট দেন।&lt;br&gt;
২. রিটার্নযুক্ত ফাংশন (ফলাফল দেয়ার জাদুর বাক্স):&lt;br&gt;
যখন ফাংশন কোনো ফলাফল প্রয়োজনীয় জায়গায় ফেরত পাঠায়।&lt;br&gt;
উদাহরণ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function addNumbers(a, b) {
    return a + b;
}
let sum = addNumbers(5, 7);
console.log(sum); // আউটপুট: ১২
return কিওয়ার্ড ফাংশনের ফলাফল ফেরত দেয়।

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ফাংশনের আরেকটি উদাহরণ দিয়ে বোঝার চেষ্টা করি&lt;br&gt;
ধরুন, আপনি একটি চায়ের দোকান চালান। প্রতিবার আপনাকে বলতেই হয়:&lt;br&gt;
চা বানাও&lt;br&gt;
চিনি দাও&lt;br&gt;
দুধ দাও&lt;br&gt;
স্টির করো&lt;/p&gt;

&lt;p&gt;আপনি যদি এটি একটি ফাংশনে লিখে রাখেন, তাহলে কী সহজ হবে না?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example 1:

function makeEasyTea(){
console.log("পানি গরম করো")
console.log("চিনি দাও")
console.log("মসলা দাও")
console.log("চা পাতা দাও")
console.log("আপনার চা হয়ে গেছে")

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;makeEasyTea();// output:
 পানি গরম করো,
 চিনি দাও
 মসলা দাও
 চা পাতা দাও
 আপনার চা হয়ে গেছে
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আপনি শুধু makeEasyTea() কল করবেন এবং এখানে আপনি তাকে বলে দিছেন চা করতে সে তার মতো করে চা তৈরি করে দিবে একটু পরে তারমত করে চা তৈরি হয়ে যাবে। কী মজার, তাই না?&lt;br&gt;
এখন আপনি চাচ্ছেন আমি রং চা খাবোনা আমি খাবো দুধ খাবো,আপনার কোন একব্যক্তি বললো আমি রং চাই খাবো, এমতবস্থায় কি করবেন? এজন্য ও আছে ফাংশনের আরেক মজার উপায়। আপনি জাদুর বাক্সকে বলবেন, চা করে দাও তখন এই জাদুর বাক্স কথাও বলতে পারে প্রতি বার যখন আপনি একে কিছু করতে বলবে তখন সে বলে আমাকে কিছু দাও যদি না দাও তাহলে আমি নিজের মতো করে করব।&lt;br&gt;
কিন্তু আপনি তো তার মতো করে তৈরি করা চা খাবেন না , যে রং চা করে কিন্তু আপনি খাবেন দুধ চা তাই এবার আপনি তাকে বলে দিবেন আমি দুধ চা খাবো ,ব্যাচ। চলুন দেখি&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function makeTea(এইধরনের) {
    console.log(এইধরনের + " চা বানানো হচ্ছে...");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখন আপনি একে কল করার সময় বলে দিবেন কি চা খাবেন যেমন &lt;br&gt;
&lt;code&gt;&lt;br&gt;
makeTea("দুধের") আবার বললেন makeTea("রং")&lt;br&gt;
makeTea("দুধের"); // আউটপুট: দুধের চা বানানো হচ্ছে...&lt;br&gt;
makeTea("রং"); // আউটপুট: রং চা বানানো হচ্ছে...&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;ফাংশন হলো আপনার কোডের মস্তিষ্ক। এটি কাজ সহজ করে, সময় বাঁচায় এবং প্রোগ্রামকে আরও গোছানো করে। আপনি চায়ের দোকান চালান বা যোগফল বের করুন, ফাংশন সবসময় সাহায্য করবে।&lt;br&gt;
তাই, কোডে কোনো কাজ বারবার করতে হলে মনে রাখুন: "হাত দিয়ে করব কেন? ফাংশন ব্যবহার করব!" 😄&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Closure in Javascript(Bangla) With Joy</title>
      <dc:creator>Mehedi Hasan Joy</dc:creator>
      <pubDate>Thu, 22 Aug 2024 19:57:30 +0000</pubDate>
      <link>https://dev.to/joy5k/closure-in-javascriptbangla-with-joy-5hh9</link>
      <guid>https://dev.to/joy5k/closure-in-javascriptbangla-with-joy-5hh9</guid>
      <description>&lt;p&gt;ক্লোজার কি? জাভাস্ক্রিপ্টের কিছু অদ্ভুত আচরণের মধ্যে অসাধারণ একটা কনসেপ্ট হলো ক্লোজার,&lt;/p&gt;

&lt;h4&gt;
  
  
  এ কেমন কথা, অদ্ভুত আবার অসাধারণ হয় কিভাবে ?
&lt;/h4&gt;

&lt;p&gt;চলুন আজকে একটু ক্লোজার নিয়ে গল্প করি, প্রথমে আসি অদ্ভুত আচরণ নিয়ে,জাভাস্ক্রিপ্টে লোকালি ডিক্লেয়ার করা কোন ভেরিয়েবল ততক্ষণ সক্রিয় থাকে যতক্ষণ এটি তার প্যারেন্ট এক্সিকিউশন কন্টেক্সটের অংশ হিসেবে রেফারেন্স করা হয় বা প্রয়োজন হয়। কনসেপ্টটি মাথার উপর দিয়ে গেল? চলুন আমরা আগে একটা কাউন্টার ফাংশন তৈরি করার চেষ্টা করি।&lt;br&gt;
‌‌‌‌&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  function sum(){
    let a=10;
    let b=20
    return a+b
 }
 console.log(sum()) //30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;উপরক্ত ফাংশনের ডিক্লেয়ার করা ‌‌&lt;code&gt;a‌&lt;/code&gt; এবং &lt;code&gt;b&lt;/code&gt; ফাংশন এক্সিকিউশন কন্টেক্সটে এলাইভ ছিল। যখনি ফাংশনের কার্যসম্পাদন শেষ তখনি জাভাস্ক্রিপ্ট ভেরিয়েবল দুটোকে গার্বেজ কালেক্টর দ্বারা অপসারিত করা হয়। চলুন এরকম আরেক ভিন্ন ধর্মি কার্যক্রম দেখি:-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; function sum(){
    let a=10;
    let b=20;
    let c=12;
    return a+b;
}
console.dir(sum()) 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;একটু খেয়াল করলে দেখতে পাবো উপরে আমরা &lt;code&gt;c&lt;/code&gt; শুধু ডিকলার করেই রাখছি এটাকে কোন কাজে লাগাইনি,এখন যেটাকে কাজে লাগালাম না সেটা ডিকলার করে কেন শুধু শুধু মেমোরি দখল করাব? যেহেতু  &lt;code&gt;let c =12&lt;/code&gt;  এর  ব্যবহার হচ্ছেনা জাভাস্ক্রিপ্ট  ইন্টেলিজেন্টলি এটা এটাকে গার্বেজ হিসেবে কাউন্ট করে ডাস্টবিনে ফেলে দেয়। তবে এ ডাস্টবিন দেখা যায় না , এজন্য  জাভাস্ক্রিপ্টকে গার্বেজ কালেক্টর ল্যাংগুয়েজ ও বলে।তবে শুধু &lt;code&gt;let c=12&lt;/code&gt; ই না সকল ভেরিয়েবলই এক্সিকিউট করার পর গার্বেজ কালেক্টর দ্বারা অপসারিত হয়, যদি না ভেরিয়বলকে রেফারেন্স না করে।&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  সবই তো বুঝলাম তাহলে ক্লোজার কি? এটা কখন ব্যবহার করব?
&lt;/h3&gt;

&lt;p&gt;চলুন ক্লোজারকে ওপেন হার্ট সার্জারি করি। যেহেতু প্রোগ্রামেটিক তথ্য গুলো গানিতিক ভাবে ভালো বোঝানো যায় তাই চলুন একটু গানিতিক ভাবে এর মূল উৎপাটন করি।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;মনে করুন আপনি একটি কাউন্টার তৈরি করবেন যেটা প্রতিবার ক্লিক করার মাধ্যমে এর ভ্যালু পরিবর্তন হবে। কথা শুনে মনে হতে পারে এ এমন কি কাজ ? এটাতো খুবই সহজ! হ্যা ক্লোজার ও খুবই সহজ শুধু কনসেপ্টা নিয়েই একটু কনফিউশন।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a=10;

function sum(){
return a=a+1
}
console.log(sum()) // 11
console.log(sum()) // 12
console.log(sum()) // 13


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;কি মনে হয় কাউন্টারেবল ফাংশন হয়েগেছে। আপাত দৃষ্টিতে হলেও &lt;code&gt;a&lt;/code&gt; এর ভ্যালু চাইলেই অন্য কোন ফাংশন বা ম্যানুয়ালি পরিবর্তন করা যাবে, যেমন&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a=10;

function sum(){
return a=a+1
}
console.log(sum()) // 11
console.log(sum()) // 12
console.log(sum()) // 13
 a++
 a++
 a++
 console.log(a) // 16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে ম্যানুয়ালি &lt;code&gt;a&lt;/code&gt; এর মান পরিবর্তন করা হয়েছে চাইলে আরো কয়েকভাবে এটা করা যেত। কিন্তু আপনি চাচ্ছেন কাউন্টার কেবল আপনার নির্দেশে নির্দিষ্ট কোন ফাংশনের ফাংশনালিটির উপর ভিত্তি করে &lt;code&gt;a&lt;/code&gt; এর ভ্যালু পরিবর্তন করবেন।&lt;br&gt;
মানে &lt;code&gt;a&lt;/code&gt; এর অ্যাক্সেস শুধু আপনার কাছেই থাকবে। এমতাবস্থায় আপনার মনে হতে পারে &lt;code&gt;let a =10&lt;/code&gt;  এটাকে ফাংশন স্কোপের মধ্যে নিলেই তো হয়। চলুন দেখি কি হয়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function sum(){
    let a=10;
return a=a+1
}
console.log(sum()) // 11
console.log(sum()) // 11
console.log(sum()) // 11

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;যা ! একি হলো? কেন কাজ করতেছে না? এতশত প্রশ্নের সিম্পল উত্তর হলো ফাংশন এক্সিকিউশন পলিসি। এটা আবার কি? &lt;code&gt;sum&lt;/code&gt; ফাংশন যখন কল করা হয় তখন প্রথমেই দেখে &lt;code&gt;let a =10&lt;/code&gt;  সুতরাং সে &lt;code&gt;a&lt;/code&gt; এর  ভ্যালু &lt;code&gt;১০&lt;/code&gt; সেট করে  এবং পরে যখন &lt;code&gt;a=a+1&lt;/code&gt; লজিক পায়, তখন লজিক অনুযায়ি &lt;code&gt;a&lt;/code&gt; এর ভ্যালু &lt;code&gt;১&lt;/code&gt; বাড়ায় এবং  &lt;code&gt;১১&lt;/code&gt; রিটার্ন করে।  এই কাজটাই ফাংশন রিপিটেডলি করতে থাকে। মনে হতে পারে কেন a এর ভ্যালু জাভাস্ক্রিপ্ট মনে রাখেনা? এবিষয় আমরা প্রথমেই আলোচনা করেছি &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;যখনি ফাংশনের কার্যসম্পাদন শেষ তখনি জাভাস্ক্রিপ্ট ভেরিয়েবল গুলো গার্বেজ কালেক্টর দ্বারা অপসারিত করা হয়। যেকারনে পুন:রায় ভ্যারিয়েবল নতুন করে এক্সিউট হয়।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;এরকম কোন সিস্টেম হলো কেমন হতো, যদি ফাংশনকে একবার কল করব কিন্তু লজিকটা বার বার ব্যবহার করব। বিষয়টা তাহলে মজার হতো না?&lt;/p&gt;

&lt;p&gt;এখন তাহলে উপায়?&lt;br&gt;
এই মহা সমস্যার উপায় নিয়েই হাজির ক্লোজার। প্রথমে নিচের কোড ফলো করুন।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function sum(){
    let a=10;
    function logic(){
        return a=a+1
    }
    return logic
}
const logic=sum()
console.log(logic()) // 11
console.log(logic()) // 12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;আরে বাহ! কোড কাজ করতেছে। কিন্তু কনফিউশন তো দুর হলো না, কিভাবে কাজ করলো? ক্লোজার কোথায়? কোডে মুলত &lt;code&gt;sum&lt;/code&gt; ফাংশনকে কল করে &lt;code&gt;logic&lt;/code&gt;  নামক ভ্যারিয়েবলে স্টোর হচ্ছে । &lt;code&gt;sum&lt;/code&gt;  ফাংশনকে কল করলে মুলত &lt;code&gt;sum&lt;/code&gt; এর মধ্যে থাকা &lt;code&gt;logic&lt;/code&gt; ফাংশনই রিটার্ন করে। &lt;br&gt;
এখন চলুন একটা একটা করে প্রশ্নের উত্তর দেই। কিভাবে কাজ করল?&lt;br&gt;
ক্লোজার ফাংশনটির মধ্যে থাকা লোকাল ভেরিয়েবলগুলি "লক" করা হয় এবং এক্সিকিউশন কন্টেক্সট শেষ হওয়ার পরেও সেই ভেরিয়েবলগুলিকে রেফারেন্স করা যায়। এটিই ক্লোজারের মূল কাজ।&lt;br&gt;
জাভাস্ক্রিপ্টে, আমি স্কোপের যেখানে অবস্থান করছি তার উপরের সকল স্কোপের অ্যাক্সেস থাকে (স্কোপ কি? এবিষয় না হয় আরেকদিন আলোচনা করব) উপরের কোডে &lt;code&gt;logic&lt;/code&gt; ফাংশন &lt;code&gt;let a =10&lt;/code&gt; এর অ্যাক্সেস পাচ্ছে। যেহেতু এটা তার উপরের লোকাল স্কোপে অবস্থান করতেছে।তাই &lt;code&gt;logic&lt;/code&gt; ফাংশন &lt;code&gt;a&lt;/code&gt; এর ভ্যালু পরিবর্তন করতে পারতেছে। এখন  আবার আপনার মাথায় প্রশ্ন আসতে পারে (যেহেতু আপনি ব্রিলিয়েন্ড জাভাস্ক্রিপ্ট লার্নার) যে একটু আগে বললেন ফাংশনের এক্সিকিউশন শেষ হয়ে গেলে ভেরিয়েবল গুলো destroy হয়ে যায়, তাহলে কিভাবে a এর ভ্যালু অপরিবর্তিত থাকছে? এখানেই মুলত ক্লোজার কাজ করছে যা দেখতে হলে আপনাকে &lt;code&gt;console.dir(logic)&lt;/code&gt; করতে হবে।&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jj3bbubgjxje6xetoup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4jj3bbubgjxje6xetoup.png" alt="Image description" width="800" height="287"&gt;&lt;/a&gt;&lt;br&gt;
Scopes এর ভিতরে আমরা দেখতে পাচ্ছি closure নামক এক ভদ্রলোক &lt;code&gt;sum&lt;/code&gt; নামক ফাংশনকে রেফার করে &lt;code&gt;a&lt;/code&gt; এর বর্তমান ভ্যালু দেখাচ্ছে। এতো আলোচনা যাকে নিয়ে সে কিনা এখানে এসে বসে আছে।বুঝলাম! তো এখানে বসে আসলে কি করছে? &lt;br&gt;
সে তেমন কিছুই করতেছেনা শুধু &lt;code&gt;let a&lt;/code&gt; ভ্যারিয়েবলের সাথে সুসম্পর্ক বজায় রেখে তার সাথে গানিতিক হিসাব করতেছে। ক্লোজার মুলত &lt;code&gt;let a&lt;/code&gt; ভেরিয়েবলকে রেফারেন্স করে রাখছে যাতে গার্বেজ কালেক্টর এটাকে destroy না করে।যেহেতু &lt;code&gt;let a&lt;/code&gt; কে নিয়েই logic function কাজ করতেছে তাই ক্লোজার &lt;code&gt;let a&lt;/code&gt; কে রেফারেন্স হিসেবে রেখে প্রতিবার &lt;code&gt;let a&lt;/code&gt; এর ভ্যালু আপডেট করতেছে। এই সিম্পল কাজটাই ক্লোজার।রেফারেন্স করে ভেরিয়বলকে এলাইভ রাখছে।&lt;br&gt;
আর যেহেতু &lt;code&gt;a&lt;/code&gt; কে ফাংশনের মধ্যে ডিকলার করা হয়েছে, তাই চাইলেও তাকে বাইরে থেকে মডিফাই করা যাবে না এবং লজিক অনুযায়ি আমাদের কাউন্টারও তৈরি করা হলো।মেইন ফাংশন বার বার কল না করেও অন্তবর্তি ভ্যারিয়েবলের ভ্যালু পরিবর্তন করতে পারলাম। আমাদের সকল সমস্যা সমাধান করলো &lt;code&gt;Closure&lt;/code&gt;।&lt;/p&gt;

&lt;p&gt;আমাদের আজকের আড্ডাটা এখানেই রাখলাম।অন্যদিন অন্য কোন টপিক নিয়ে আবার আড্ডা দিব।&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
