ট্র্যাক
/
JavaScript
JavaScript
/
অনুশীলনী
/
এলিসের বিশ্লেষণী জাদু
এলিসের বিশ্লেষণী জাদু

এলিসের বিশ্লেষণী জাদু

লার্নিং অনুশীলনী

ভূমিকা

অ্যারো ফাংশন

একটি ফাংশন ডিফাইন করার জন্য ফাংশন ডিক্লারেশন আর ফাংশন এক্সপ্রেশনের পাশাপাশি JavaScript-এ আরও একটি অত্যন্ত সংক্ষিপ্ত সিনট্যাক্স রয়েছে। এই ফাংশনগুলোকে অ্যারো ফাংশন বলা হয়।

এখানে একটি ফাংশন ডিক্লারেশন আর একটি অ্যারো ফাংশনের মধ্যে তুলনা দেওয়া হলো।

function addUpTwoNumbers(num1, num2) {
  return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
  return num1 + num2;
};

যদি ফাংশনের বডিতে শুধু একটি রিটার্ন স্টেটমেন্ট থাকে, যেমন উপরের উদাহরণে, তাহলে {} আর return কিওয়ার্ড বাদ দেওয়া যায়। যদি শুধু একটি প্যারামিটার থাকে, তাহলে বন্ধনী ()-ও বাদ দেওয়া যায়।

const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;

ফাংশন কলে সরাসরি ছোট কলব্যাক ফাংশন ডিফাইন করতে অ্যারো ফাংশন প্রায়ই ব্যবহৃত হয়।

applyToSquare(number => number * number);

অ্যারে বিশ্লেষণ

অ্যারে-এ অ্যারেটির বিষয়বস্তু বিশ্লেষণ করার জন্য বিল্ট-ইন মেথড থাকে। এই মেথডগুলোর বেশিরভাগই একটি ফাংশন আর্গুমেন্ট হিসেবে নেয়, যেটি ট্রু বা ফলস রিটার্ন করে। এমন একটি ফাংশনকে predicate বলা হয়।

বিল্ট-ইন মেথডগুলো একটি for লুপ বা বিল্ট-ইন forEach মেথডের বদলে ব্যবহার করার জন্য বোঝানো হয়েছে:

for লুপ দিয়ে বিশ্লেষণের উদাহরণ:

const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
  if (numbers[i] === 'two') {
    return i;
  }
}
// => 1

একটি বিল্ট-ইন মেথড দিয়ে বিশ্লেষণের উদাহরণ:

const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1

অ্যারে বিশ্লেষণ করার জন্য উপলব্ধ আরও কিছু সহায়ক বিল্ট-ইন মেথড নিচে দেখানো হয়েছে। অ্যারে মেথডের সম্পূর্ণ তালিকার জন্য MDN দেখুন।

includes

includes(value) মেথড নির্ধারণ করে অ্যারেতে কোনো নির্দিষ্ট মান আছে কি না। মানটি থাকলে এটি true রিটার্ন করে, নাহলে false।

const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false

every

every(predicate) মেথড একটি ফাংশন নেয়, যেটি একটি প্রেডিকেট। এটি পরীক্ষা করে অ্যারের সব এলিমেন্ট প্রেডিকেটে পাঠানো হলে true রিটার্ন করে কি না। অন্য কথায়: মেথডটি পরীক্ষা করে যে এর সব এলিমেন্ট ফাংশন কলে পাস করা পরীক্ষায় উত্তীর্ণ হয়। প্রতিটি এলিমেন্ট প্রেডিকেট পরীক্ষায় উত্তীর্ণ হলে এটি true রিটার্ন করে, নাহলে false।

const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true

some

some(predicate) মেথড every মেথডের মতোই, তবে অ্যারের অন্তত একটি আইটেম প্রেডিকেট পরীক্ষায় উত্তীর্ণ হলে true রিটার্ন করে।

const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true

find

find(predicate) মেথড অ্যারের যে এলিমেন্টটি predicate পরীক্ষায় উত্তীর্ণ হয়, তার প্রথমটির মান রিটার্ন করে। যেখানে some() উত্তীর্ণ হলে true রিটার্ন করে, সেখানে find() অ্যারের প্রকৃত মানটি রিটার্ন করে। অ্যারের কোনো এলিমেন্টই প্রেডিকেট পরীক্ষায় উত্তীর্ণ না হলে মেথডটি undefined রিটার্ন করে।

const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1

findIndex

findIndex(predicate) মেথড find() মেথডের মতোই, তবে প্রেডিকেট পরীক্ষায় উত্তীর্ণ এলিমেন্টের value-এর বদলে তার (প্রথম) ইনডেক্স রিটার্ন করে। অ্যারের কোনো এলিমেন্টই প্রেডিকেট পরীক্ষায় উত্তীর্ণ না হলে মেথডটি -1 রিটার্ন করে।

const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1

নির্দেশনা

ভবিষ্যতের জাদুকর Elyse তার প্রশিক্ষণ চালিয়ে যাচ্ছে। তার জাদুর কৌশলগুলো দেখানোর জন্য তাকে কার্ডের কয়েকটি স্তূপ দেওয়া হবে। কাজটা একটু সহজ করতে সে শুধু ১ থেকে ১০ নম্বরের কার্ডগুলোই ব্যবহার করে।

এই অনুশীলনীতে অ্যারের ভেতরের উপাদান বিশ্লেষণ করতে বিল্ট-ইন মেথড ব্যবহার করুন।

1. একটি কার্ডের অবস্থান খুঁজে বের করা

Elyse স্তূপে একটি কার্ডের অবস্থান (ইনডেক্স) জানতে চায়।

const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3

2. স্টূপে একটি কার্ড আছে কি না তা নির্ধারণ করা

Elyse জানতে চায় স্টূপে একটি কার্ড উপস্থিত আছে কি না, অর্থাৎ স্টূপে নির্দিষ্ট কোনো number আছে কি না।

const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true

3. প্রতিটি কার্ড জোড় সংখ্যা কি না তা নির্ধারণ করা

Elyse জানতে চায় প্রতিটি কার্ড জোড় সংখ্যা কি না, অর্থাৎ স্টূপের প্রতিটি সংখ্যা জোড় number কি না।

isEachCardEven([2, 4, 6, 7]);
// => false

4. স্টূপে বিজোড় মানের কোনো কার্ড আছে কি না যাচাই করা

Elyse জানতে চায় স্টূপে কোনো বিজোড় সংখ্যা আছে কি না।

doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true

5. স্টূপ থেকে প্রথম বিজোড় কার্ডটি বের করা

Elyse প্রথম যে কার্ডটি বিজোড়, তার মান জানতে চায়।

getFirstOddCard([4, 2, 8, 7, 9]);
// => 7

6. প্রথম জোড় কার্ডটির অবস্থান নির্ধারণ করা

Elyse প্রথম যে কার্ডটি জোড়, তার অবস্থান জানতে চায়।

getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
JavaScript Exercism

এলিসের বিশ্লেষণী জাদু শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, JavaScript ট্র্যাকের 37টি কনসেপ্ট159টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।