ফ্রন্টএন্ড লিনিয়ার ডেটা স্ট্রাকচার
লিনিয়ার ডেটা স্ট্রাকচার উপাদানগুলোকে একটি ক্রমানুসারে সাজায়। প্রতিটি উপাদানের একটি পূর্বসূরি (predecessor) এবং একটি উত্তরসূরি (successor) থাকে।
Arrays অ্যারে (Arrays) হলো JavaScript-এর প্রধান হাতিয়ার। এগুলো অবিচ্ছিন্ন মেমরি (contiguous memory) ব্যবহার করে। এর ফলে আপনি ইনডেক্সের মাধ্যমে যেকোনো উপাদান তাৎক্ষণিকভাবে অ্যাক্সেস করতে পারেন।
push: শেষে একটি উপাদান যোগ করে।unshift: শুরুতে একটি উপাদান যোগ করে। এটি ধীরগতির কারণ প্রতিটি অন্য উপাদানকে এক ঘর ডানদিকে সরে যেতে হয়।splice: যেকোনো অবস্থানে উপাদান যোগ বা অপসারণ করে। এই মেথডটি মূল অ্যারে পরিবর্তন করে ফেলে। এটি একটি পিওর ফাংশন (pure function) নয়।
নোট: যখন একটি অ্যারে অনেক বড় হয়ে যায়, তখন JavaScript-কে একটি বড় মেমরি ব্লক বরাদ্দ করতে হয় এবং সবকিছু সেখানে কপি করতে হয়। এতে পারফরম্যান্স কমে যায়।
Stacks একটি স্ট্যাক (Stack) LIFO নিয়ম অনুসরণ করে: Last In, First Out। প্লেটের একটি স্তূপের কথা চিন্তা করুন। আপনি কেবল ওপর থেকে উপাদান যোগ বা অপসারণ করতে পারেন।
push: ওপরের দিকে যোগ করা।pop: ওপর থেকে অপসারণ করা।peek: উপাদানটি অপসারণ না করেই ওপরের উপাদানটি দেখা।
Queues একটি কিউ (Queue) FIFO নিয়ম অনুসরণ করে: First In, First Out। একটি দোকানের লাইনের কথা চিন্তা করুন।
push: পেছনে যোগ করা।shift: সামনে থেকে অপসারণ করা।
সতর্কবার্তা: বড় ডেটাসেটের ক্ষেত্রে অ্যারেতে shift ব্যবহার করা ধীরগতির। ফাঁকা জায়গা পূরণ করতে প্রতিটি উপাদানকে বাম দিকে সরে আসতে হয়। প্রচুর পরিমাণে ডেটার জন্য এর পরিবর্তে একটি লিঙ্কড লিস্ট (linked list) ব্যবহার করুন।
Linked Lists একটি লিঙ্কড লিস্ট (Linked list) নোড (node) নিয়ে গঠিত। প্রতিটি নোডে ডেটা এবং পরবর্তী নোডের একটি পয়েন্টার (pointer) থাকে।
- সুবিধা: সঠিক স্থানটি খুঁজে পাওয়ার পর নোড যোগ করা বা অপসারণ করা দ্রুত হয়। আপনাকে কেবল পয়েন্টার পরিবর্তন করতে হয়।
- অসুবিধা: আপনি সরাসরি কোনো ইনডেক্সে লাফিয়ে যেতে পারবেন না। আপনাকে 'head' থেকে শুরু করতে হবে এবং একে একে পয়েন্টার অনুসরণ করতে হবে। এটি ধীরগতির।
Comparison Summary:
- Arrays: ঘন ঘন রিড (read) এবং ছোট ডেটার জন্য সেরা। অ্যাক্সেস হলো O(1)।
- Linked Lists: ঘন ঘন রাইট (write) এবং বড় ডেটার জন্য সেরা। যদি আপনার কাছে নোডটি থাকে, তবে ইনসারশন (insertion) হলো O(1)।
Pro Tips for JavaScript:
- একটি অ্যারেতে বিভিন্ন ডেটা টাইপ মিশ্রিত করবেন না। টাইপগুলো একই রকম রাখলে ইঞ্জিন অবিচ্ছিন্ন মেমরি ব্যবহার করতে পারে।
- সংখ্যা সর্ট করার সময় সর্বদা একটি কম্পারেটর ফাংশন (comparator function) ব্যবহার করুন।
[10, 2].sort()এর ফলাফল হবে[10, 2]কারণ এটি স্ট্রিং হিসেবে সর্ট করে। - মনে রাখবেন যে বেশিরভাগ নেটিভ অ্যারে মেথড মূল অ্যারে পরিবর্তন (mutate) করে ফেলে।