ট্র্যাক
/
JavaScript
JavaScript
/
অনুশীলনী
/
রিসাইক্লিং রোবট
রিসাইক্লিং রোবট

রিসাইক্লিং রোবট

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

ভূমিকা

কোনো ডেটার টাইপ কী, সেটি জানা কোড মসৃণভাবে এবং এরর ছাড়াই চলার জন্য প্রায়ই খুবই গুরুত্বপূর্ণ।

JavaScript-এ একটি মান বা অবজেক্টের টাইপ যাচাই করার কয়েকটি উপায় আছে।

Note

JavaScript-এর টাইপ যাচাইয়ের পদ্ধতিগুলো কিছুটা অনির্ভরযোগ্য হতে পারে।

আরও ভালো টাইপ সেফটি এবং আরও শক্তিশালী টাইপের জন্য আপনার সম্ভবত TypeScript ব্যবহার করা উচিত, যা JavaScript-এর উপর তৈরি একটি ভাষা, তবে স্ট্যাটিক-টাইপড ভাষার টাইপ সিনট্যাক্স নিয়ে কাজ করে।

typeof অপারেটর

typeof অপারেটরটি তার অপারেন্ডের টাইপ রিটার্ন করে। আউটপুট হয় একটি স্ট্রিং, যা প্রিমিটিভ ডেটা টাইপ-এর একটির নামের সাথে মেলে, শুধু "null" ছাড়া। এটি "function" বা "object"-ও হতে পারে।

typeof undefined;
// => "undefined"

typeof true;
// => "boolean"

typeof 42;
// => "number"

typeof 'Hello, World!';
// => "string"

typeof function () {
  return 'Hello, World';
};
// => "function"

typeof [1, 2, 3, 4];
// => "object"

typeof { city: 'Stockholm', country: 'Sweden' };
// => "object"

[ঐতিহাসিক কারণে][typeof null is "object"]।

instanceof অপারেটর

একটি অবজেক্টের টাইপ যাচাই করার জন্য আপনি instanceof অপারেটর ব্যবহার করতে পারেন। দ্বিতীয় অপারেন্ডটি প্রথম অপারেন্ডের প্রোটোটাইপ চেইন-এ আছে কি না, তার উপর নির্ভর করে এটি একটি boolean-এ মূল্যায়িত হয়। স্পষ্ট করে বললে, instanceof রিটার্ন করে যে প্রথম অপারেন্ডটি দ্বিতীয় অপারেন্ডের বা তার কোনো চাইল্ড ক্লাসের ইনস্ট্যান্স কি না। instanceof শুধু অবজেক্টের উপর কাজ করে।

class Beverage {
  // ...
}

// The Coffee class is a child of the Beverage class.
class Coffee extends Beverage {
  // ...
}

const java = new Coffee();

java instanceof Coffee;
// => true

java instanceof Beverage;
// => true
Advanced

Array ক্লাসে Array.isArray() নামের একটি মেথড আছে, যা যাচাই করে তার আর্গুমেন্টটি একটি অ্যারে কি না।

ওয়েবপেজের iframe-এর মতো ভিন্ন রেল্মে তৈরি একটি অ্যারের ক্ষেত্রে instanceof Array কাজ করবে না, কিন্তু Array.isArray() কাজ করবে।

এর কারণ হলো প্রতিটি রেল্মে Array ক্লাসের কনস্ট্রাক্টর আলাদা, এবং প্রতিটি iframe-এর নিজস্ব রেল্ম থাকে, অর্থাৎ প্রোটোটাইপ চেইনের ফাংশনটি আলাদা হবে, যার ফলে instanceof Array ব্যর্থ হয়। Array.isArray() এটি উপেক্ষা করতে সক্ষম, এবং সম্ভব হলে সবসময় এটি ব্যবহার করা উচিত।

এটি এমন ভুয়া পজিটিভও সামলাতে পারে যেখানে একটি অবজেক্ট আসলে Array নয়, শুধু তার প্রোটোটাইপ চেইনে Array আছে।

({ __proto__: Array.prototype }) instanceof Array
// => true

Array.isArray({ __proto__: Array.prototype })
// => false

in অপারেটর

in অপারেটরটি রিটার্ন করে যে প্রথম অপারেন্ডটি দ্বিতীয় অপারেন্ডের একটি প্রপার্টি কি না। এটি যাচাই করে না যে প্রপার্টিটির একটি নির্দিষ্ট মান আছে কি না। undefined-এ সেট করা একটি প্রপার্টি তবুও in দ্বারা শনাক্ত হবে।

class Coffee {
  constructor() {
    this.temperature = 'hot';
    this.isDarkMatter = undefined;
  }

  coolDown() {
    this.temperature = 'warm';
  }
}

const espresso = new Coffee();

'temperature' in espresso;
// => true

'color' in espresso;
// => false

'isDarkMatter' in espresso;
// => true
Note

উত্তরাধিকারসূত্রে পাওয়া প্রপার্টি ও মেথডের জন্য in true রিটার্ন করবে।

"coolDown" in espresso
// => true

"constructor" in espresso
// => true

এটি এড়াতে বদলে Object.hasOwn() ব্যবহার করুন

Object.hasOwn() ফাংশন

Object.hasOwn() মেথডটি রিটার্ন করে যে নির্দিষ্ট অবজেক্টটি প্রদত্ত প্রপার্টিটির মালিক কি না (অর্থাৎ এটি উত্তরাধিকারসূত্রে পাওয়া নয় বা কোনো মেথড নয়)।

class Coffee {
  constructor() {
    this.temperature = 'hot';
  }

  coolDown() {
    this.temperature = 'warm';
  }
}
const cappuccino = new Coffee();

Object.hasOwn(cappucino, 'temperature');
// => true

Object.hasOwn(cappucino, 'constructor');
// => false

Object.hasOwn(cappucino, 'coolDown');
// => false

নির্দেশনা

নির্দেশাবলি

আপনাকে একটি রিসাইক্লিং সেন্টারে নিয়োগ করা হয়েছে। জায়গার অভাবে সব পণ্য একই কনভেয়র বেল্টে রাখা হয়, কিন্তু এর ফলে ভিন্ন ভিন্ন উপাদান একসাথে মিশে যায় এবং সেগুলো ব্যবহারের অযোগ্য হয়ে পড়ে। এটি ঠিক করার জন্য আপনাকে এমন ফাংশন বানানোর দায়িত্ব দেওয়া হয়েছে, যা কোনো পণ্যের ধরন শনাক্ত করতে পারে।

1. একটি মান বুলিয়ান কি না তা যাচাই করুন

isBoolean ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো মান বুলিয়ান কি না।

isBoolean(true);
// => true

isBoolean(null);
// => false

2. একটি মান সংখ্যা কি না তা যাচাই করুন

isNumber ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো মান একটি সীমাবদ্ধ number বা bigint, অর্থাৎ NaN বা Infinity নয়।

কখনো কখনো আইডি পড়ার ডিভাইসটি নষ্ট হয়ে যায় এবং কোনো অ-সংখ্যাসূচক মানকে NaN (Not a Number, অর্থাৎ সংখ্যা নয়) বা Infinity হিসেবে পড়ে। আপনার ফাংশনের এটি সঠিকভাবে সামলাতে পারা উচিত।

isNumber(42);
// => true

isNumber('Hello, World!');
// => false

isNumber(42n);
// => true

isNumber(NaN);
// => false

3. একটি মান অবজেক্ট কি না তা যাচাই করুন

isObject ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করবে যে মানটি একটি অবজেক্ট কি না। কনভেয়রে null কিছুই নয় এবং এটি অবজেক্ট হিসেবে গণ্য হয় না।

isObject({ greeting: 'Hello' });
// => true

isObject(25n);
// => false

4. একটি স্ট্রিং সংখ্যাসূচক কি না তা যাচাই করুন

isNumericString ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করবে যে মানটি এমন একটি স্ট্রিং কি না, যেটি শুধু অঙ্ক দিয়ে গঠিত, অথবা একটি বিয়োগ চিহ্নের পরে অঙ্ক, যা একটি ঋণাত্মক সংখ্যা বোঝায়। এখানে কেবল পূর্ণসংখ্যাকে বিবেচনা করতে হবে, রিসাইক্লিং রোবটের এই যাচাইয়ে দশমিক সংখ্যাকে সংখ্যাসূচক হিসেবে গণ্য করা হয় না।

isNumericString(42);
// => false

isNumericString('42');
// => true

isNumericString('Hi!');
// => false

5. একটি অবজেক্ট ইলেকট্রনিক কি না তা যাচাই করুন

isElectronic ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো অবজেক্ট প্রদত্ত ElectronicDevice ক্লাস বা তার কোনো চাইল্ড ক্লাসের ইনস্ট্যান্স কি না।

class Duck {
  //...
}

class WashingMachine extends ElectronicDevice {
  //...
}

isElectronic(new Duck());
// => false

isElectronic(new WashingMachine());
// => true

6. একটি মান অ-খালি অ্যারে কি না তা যাচাই করুন

isNonEmptyArray ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো মান একটি অ-খালি অ্যারে কি না।

isNonEmptyArray([1, 2, 3]);
// => true

isNonEmptyArray([]);
// => false

7. একটি মান খালি অ্যারে কি না তা যাচাই করুন

isEmptyArray ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো মান একটি খালি অ্যারে কি না।

isEmptyArray([1, 2, 3]);
// => false

isEmptyArray([]);
// => true

8. একটি অবজেক্টের type প্রপার্টি বা মেথড আছে কি না তা যাচাই করুন

hasType ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো অবজেক্টের type প্রপার্টি বা মেথড আছে কি না।

class Keyboard(){
  type(){
    // ...
  }
}
hasType({ type:"car", color:"red" })
// => true

hasType({ color:"green" })
// => false

hasType(new Keyboard())
// => true

9. কোনো অবজেক্টের id প্রপার্টি বা মেথড না থাকলে একটি এরর থ্রো করুন

assertHasId ফাংশনটি ইমপ্লিমেন্ট করুন, যা কোনো অবজেক্টে id প্রপার্টি না থাকলে একটি Error থ্রো করবে।

যদি কোনো অবজেক্টে id প্রপার্টি থাকে, তাহলে এটি কিছুই রিটার্ন করা উচিত নয়।

assertHasId({ id: 42, color: 'red' });
// => undefined

assertHasId({ color: 'green' });
// Error: "Object is missing the 'id' property"

10. কোনো অবজেক্টের id প্রপার্টি আছে কি না তা যাচাই করুন

hasIdProperty ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো অবজেক্টের id প্রপার্টি আছে কি না।

class SimpleData {
  constructor() {
    this.number = '42';
    this.id = 'BC269327FE1D9B95';
  }
}

class StealingData extends SimpleData {}

class MethodData {
  constructor() {
    this.number = '42';
    this._id = 'BC269327FE1D9B95';
  }

  get id() {
    return this._id;
  }
}

hasIdProperty(new SimpleData());
// => true

hasIdProperty(new MethodData());
// => false

hasIdProperty(new StealingData());
// => false

11. কোনো অবজেক্টের একটি ডিফাইন করা type প্রপার্টি আছে কি না তা যাচাই করুন

hasDefinedType ফাংশনটি ইমপ্লিমেন্ট করুন, যা যাচাই করে যে কোনো অবজেক্টের type প্রপার্টি আছে এবং তা undefined নয় কি না।

hasDefinedType({ type: undefined, color: 'red' });
// => false

hasDefinedType({ type: 'car', color: 'green' });
// => true
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
JavaScript Exercism

রিসাইক্লিং রোবট শুরু করতে প্রস্তুত?

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