Javascript Refresher
Scope in JavaScript , Primitive and Reference types Value
Basic Javascript You Need to Know
প্রিমিটিভ এর বাংলা অর্থ হলো আদিম।
জাভাস্ক্রিপ্টের জগতে বিভিন্ন ধরনের ডেটা টাইপ রয়েছে, যেগুলোকে আমরা প্রাথমিক বা আদিম ডেটা টাইপ হিসেবে চিহ্নিত করি। এখানে যেসব ডেটা টাইপ রয়েছে:
- String: এটি পাঠ্য ডেটা ধারণ করে।
- Number: এটি সংখ্যা সংরক্ষণ করে।
- Boolean: এটি সত্য (true) অথবা মিথ্যা (false) হতে পারে।
- Null: এটি একটি খালি বা অনুপস্থিত মান বোঝায়।
- Undefined: যখন কোন মান নির্ধারিত করা হয়নি।
এই প্রিমিটিভ ডেটাগুলো মূল ভ্যালু হিসেবে কাজ করে এবং এগুলোকে ব্যবহার করে অন্যান্য ডাটা তৈরি করা হয়। তাই এগুলোকে বলা হয় প্রিমিটিভ ডাটা বা ভ্যালু।
উদাহরণ:
References
জাভাস্ক্রিপ্টের মধ্যে Array এবং Object রয়েছে, যেগুলোকে বলা হয় রেফারেন্স টাইপ ডাটা। এই ডেটাগুলোর মধ্যে ডেটার ভ্যালু মেমোরির রেফারেন্স হিসেবে রাখা হয়।
উদাহরণ:
প্রিমিটিভ এবং রেফারেন্স টাইপ ডাটার পার্থক্য
প্রিমিটিভ এবং রেফারেন্স টাইপ ডাটার মধ্যে মূল পার্থক্য হলো এর ডেটার বিহেভিয়ার। আসুন নিচে উদাহরণের মাধ্যমে বিষয়টি আরও পরিষ্কার করি।
প্রিমিটিভ টাইপ

এখানে দেখা যাচ্ছে, প্রিমিটিভ ডাটা শুধুমাত্র ভ্যালুটি শেয়ার করে। ডাটার রেফারেন্স শেয়ার না করার কারণে a এর মান অপরিবর্তিত থাকে।
রেফারেন্স টাইপ

এখানে দেখা যাচ্ছে, arr2 তে নতুন মান যোগ করার পর arr1 তেও সেই পরিবর্তন ঘটেছে, কারণ এখানে রেফারেন্স শেয়ার হয়েছে।

এভাবেই প্রিমিটিভ এবং রেফারেন্স ভ্যালুর মধ্যে মূল পার্থক্য প্রকাশ পায়।
Shallow Copy Vs Deep Copy
জাভাস্ক্রিপ্টে "শ্যালো কপি" (Shallow Copy) এবং "ডিপ কপি" (Deep Copy) হল দুটি আলাদা প্রক্রিয়া, যা ব্যবহার করে একটি Object বা Array'র কপি তৈরি করা হয়। তবে এদের মধ্যে মূল পার্থক্য হলো কিভাবে ডেটা কপি করা হয়।
শ্যালো কপি (Shallow Copy)
শ্যালো কপিতে কেবলমাত্র অবজেক্টের প্রথম লেভেলের ভ্যালুগুলি কপি করা হয়। এর মানে হলো, যদি অবজেক্ট বা আরে'র মধ্যে নেস্টেড অবজেক্ট থাকে, তাহলে সেগুলি রেফারেন্স হিসেবে কপি হয়।
উদাহরণ:
এখানে দেখা যাচ্ছে, নেস্টেড অবজেক্টের রেফারেন্স কপি হওয়ার কারণে, কপি ডাটাতে পরিবর্তন করলে তা মূল ডাটাতেও প্রভাব ফেলে।
ডিপ কপি (Deep Copy)
ডিপ কপিতে একটি অবজেক্টের প্রতিটি লেভেলের কপি তৈরি করা হয়, এমনকি নেস্টেড অবজেক্টেরও আলাদা কপি করা হয়।
উদাহরণ:
এখানে deepCopy[2].a পরিবর্তন করার পরেও originalArray অপরিবর্তিত থাকে, কারণ এটি একটি ডিপ কপি।
Advanced JavaScript
this এর ব্যাবহার কোথায় এবং কিভাবে
this কি নির্দেশ করছে তা বুঝতে পারা খুবই গুরুত্বপূর্ণ, কারণ এটি কার্যকরী কোড লেখার ক্ষেত্রে অনেকটা প্রভাব ফেলে।
Implicit Binding
এখানে this নির্দেশ করছে player অবজেক্টকে, কারণ printPlayerName ফাংশনটি player অবজেক্টের মধ্যে কল করা হয়েছে। এটি সহজ এবং সাধারণ ব্যবহারের জন্য উপযুক্ত।
Explicit Binding - .call()
.call() মেথডটি ফাংশনকে নির্দিষ্ট একটি অবজেক্টের সাথে যুক্ত করতে ব্যবহৃত হয়। এখানে printName ফাংশনটিকে player অবজেক্টের সাথে যুক্ত করা হয়েছে, ফলে this এখন player কে নির্দেশ করছে।
.apply() এবং .bind()
.apply() এবং .bind() মেথড দুটি ভিন্ন কাজ করে, যদিও এদের ব্যবহার একই।
.apply()মেথডটি একটি ফাংশনকে একটি নির্দিষ্ট অবজেক্টের সাথে যুক্ত করার পাশাপাশি, একটি অ্যারে আকারে আর্গুমেন্টও গ্রহণ করে।.bind()মেথডটি একটি নতুন ফাংশন তৈরি করে, যেখানেthisএবং আর্গুমেন্টগুলি পূর্বনির্ধারিত থাকে। এই নতুন ফাংশনটি পরে যেকোনো জায়গায় কল করা যেতে পারে।
Iterators এবং Iterables
`
Iterable` কী?
জাভাস্ক্রিপ্টের মধ্যে, Iterable হল এমন একটি অবজেক্ট যা একটি Symbol.iterator মেথড রয়েছে এবং এর মাধ্যমে এটি একটি iterator প্রদান করতে পারে। এটি ডেটাকে ধারাবাহিকভাবে প্রবাহিত করার একটি উপায়।
উদাহরণ:
এখানে arr একটি iterable, যার মাধ্যমে আমরা for...of লুপের সাহায্যে এর ভ্যালুগুলি একের পর এক পেতে পারি।
Iterator কী?
Iterator হল এমন একটি অবজেক্ট যা next() মেথড সরবরাহ করে। এটি প্রতিটি কলের মাধ্যমে পরবর্তী মান এবং একটি done প্রপার্টি প্রদান করে, যা নির্দেশ করে যে আর কোন মান নেই কি না।
উদাহরণ:
এখানে next() মেথডের মাধ্যমে আমরা প্রতিটি মান এবং done স্টেটাস পাচ্ছি।
Asynchronous JavaScript
পরিচিতি
জাভাস্ক্রিপ্ট একটি সিঙ্গেল থ্রেডেড প্রোগ্রামিং ল্যাঙ্গুয়েজ, যার মানে হলো এটি এক সময়ে একটি কাজই করতে পারে। তবে, এটি অ্যাসিনক্রোনাস (asynchronous) প্রোগ্রামিং সমর্থন করে, যা কিছু কাজকে একাধিক থ্রেডের মতো কার্যকরভাবে পরিচালনা করতে সক্ষম করে। এটি কার্যকরভাবে নেটওয়ার্ক অনুরোধ, টাইমআউট এবং অন্যান্য অপারেশন পরিচালনা করার জন্য ব্যবহার করা হয়, যা সাধারণত সময়সাপেক্ষ।
সিঙ্গেল থ্রেডেড প্রোগ্রামিং
সিঙ্গেল থ্রেডেড হওয়ার কারণে, জাভাস্ক্রিপ্ট একটি কাজ সম্পন্ন না হওয়া পর্যন্ত পরবর্তী কাজ শুরু করতে পারে না। এটি একটি একক থ্রেডে চলে, যা প্রধান "মেইন থ্রেড" হিসাবে পরিচিত। উদাহরণস্বরূপ, যদি কোনও ফাংশন চলমান থাকে যা 5 সেকেন্ড সময় নেয়, তবে সেই সময়ে কোনও অন্যান্য কাজ সম্পন্ন হবে না।
উদাহরণ:
আউটপুট:
Callbacks
এখানে setTimeout ব্যবহার করে একটি callback ফাংশন কল করা হয়েছে।
Promises
Promise একটি অবজেক্ট যা asynchronous অপারেশনের ফলাফল ধারণ করে। এটি resolve এবং reject এর মাধ্যমে সফলতা বা ব্যর্থতা নির্দেশ করে।
Async/Await
৩. Async/Await
async/await প্রমিসের উপর ভিত্তি করে, যা কোডকে আরও পাঠযোগ্য এবং পরিচালনাযোগ্য করে তোলে। async শব্দটি একটি ফাংশনের সামনে ব্যবহৃত হয়, এবং await শব্দটি প্রমিসের প্রতীক্ষা করার জন্য ব্যবহৃত হয়।
উদাহরণ:
আউটপুট:
উপসংহার
জাভাস্ক্রিপ্টের অ্যাসিনক্রোনাস কার্যকলাপগুলি ব্যবহার করে, আমরা একাধিক কাজকে কার্যকরভাবে পরিচালনা করতে পারি, যেহেতু এটি সিঙ্গেল থ্রেডেড। কলব্যাক, প্রমিস, এবং async/await জাভাস্ক্রিপ্টে অ্যাসিনক্রোনাস কার্যকলাপের মূল সরঞ্জাম। এই প্রযুক্তিগুলি আমাদেরকে দ্রুত এবং কার্যকরভাবে কোড লেখার সুবিধা দেয়, বিশেষ করে নেটওয়ার্কের মাধ্যমে ডেটা আহরণ করার সময়।