জাভাস্ক্রিপ্ট টিউটোরিয়াল-শিখুন গল্পে গল্পে সাথে 1100+ Exercise

  • জাভাস্ক্রিপ্ট পরিচিতি-Introduction to JavaScript
  • প্রোগ্রামিং শুরু করতে কতটুকু গণিত লাগে?
  • প্রোগ্রামিং শুরু করতে কতটুকু ইংরেজি জানা লাগে?
  • ভালো প্রোগ্রামার কিভাবে হবো? [+৭টি গুরুত্বপূর্ণ টিপস]
  • সেইম ড্রেসে class পার্টি
  • Method তুমি কার? ক্লাসের না আমার?
  • আজ থেকে তুই ত্যাজ্য Inheritance
  • Prototypical Chain-এর সিক্রেট রিলেশন

Method তুমি কার? ক্লাসের না আমার?


অবজেক্টের কিছু বৈশিষ্ট্য থাকে এবং অবজেক্ট কিছু কাজ করে। তাই অবজেক্ট কিছু ফাংশনও। যদিও এইগুলাকে ফাংশন বলা ঠিক না। এইগুলাকে বলা হয় মেথড। 


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


  class Player {
    constructor(name, runs, wickets) {
      this.name = name;
      this.runs = runs;
      this.wickets = wickets;
    }
  }


মেথড

এখন এই ক্লাসে একটা method যোগ করব (অর্থাৎ ফাংশন যোগ করব)। প্রথম মেথডের কাজ হচ্ছে, প্লেয়ারের রান কত, সেটা বলে দিবে। এই মেথডের নাম দিলাম getRun। 


এই getRun মেথড লেখার জন্য অনেকটা ফাংশনের মতোই লিখবি, তবে function কি-ওয়ার্ড লিখবি না। যেমনটা তুই constructor মেথডের জন্য function কি-ওয়ার্ড লিখস নাই। সেইম হিসাব। তারপর নরমাল ফাংশনের মতো প্যারামিটার লিখবি। দরকার হলে ডিফল্ট প্যারামিটার সেট করবি এবং চাইলে নরমাল ফাংশনের মতো কাজকর্ম করতে পারবি। কনসোল করতে পারবি। কোনো কিছু রিটার্ন করতে পারবি। 


ক্লাসে কোনো মেথড ডিক্লেয়ার করলে সেই মেথড ক্লাসের সব অবজেক্টে পাওয়া যাবে। জাস্ট অবজেক্টের নামের পর ডট চিহ্ন দিয়ে ফাংশনের মতো করে কল করে ফেলবি। সেই মেথডে কোনো প্যারামিটার লাগলে সেই প্যারামিটার দিয়ে দিবি। 


this

ক্লাস থেকে কোনো প্রোপার্টি পাবি না। প্রোপার্টি পাবি ক্লাস থেকে অবজেক্ট বানিয়ে। আবার ক্লাস থেকে কোন মেথড পাবি না। মেথড পাবি ক্লাস থেকে অবজেক্ট বানিয়ে। তাহলে যখন ক্লাস লিখবি, সেটার ভিতরে মেথড লিখবি বা মেথডের ভিতরে কোনো প্রোপার্টির মান এক্সেস করবি বা চেইঞ্জ করবি। সেটা কীভাবে করবি? 


ক্লাসের ভিতরে প্রোপার্টি বা মেথড এক্সেস বা চেইঞ্জ করার জন্য this অনেক বেশি গুরুত্বপূর্ণ (কিছুটা কনফিউজিং হলেও একটু পরে এইটার দফারফা করব)। this এমন একটা keyword, যেটা প্রতিটি object-কে বুঝায়। তাই ক্লাসের ভিতরে method বা প্রোপার্টি যেকোনোটাই এক্সেস করতে গেলে this থেকে সেটাকে এক্সেস করতে হয়। 


নিচের মেথডে আমরা নরমালভাবে ক্লাসের run প্রোপার্টিকে রিটার্ন করে দিছি। 


  class Player {
    constructor(name, runs, wickets) {
      this.name = name;
      this.runs = runs;
      this.wickets = wickets;
    }

    getRun() {
      return this.runs; 
    }
  }

  const player1 = new Player("Tamim", 5000, 100);
  const tamimRun = player1.getRun(); 
  console.log(tamimRun);

Output: 5000


তুই চাইলে অবজেক্টের কোনো প্রোপার্টির মান চেইঞ্জ বা মোডিফাইও করতে পারবি। সেজন্য আমি সেই Player ক্লাসে প্লেয়ারের রান যোগ করার জন্য একটা মেথড লিখলাম। এটার নাম দিলাম addRun, সে একটা সংখ্যা ইনপুট প্যারামিটার হিসেবে নিবে, তারপর প্লেয়ার বর্তমান রানের সাথে নতুন রান যোগ করবে। 


যদি অবজেক্টের প্রোপার্টির মান সেট করতে চাস, তাহলে বামপাশে this লিখে ডট চিহ্ন দিবি। এরপর যে প্রোপার্টি দরকার, তার নাম লিখে ফেলবি। এরপর সমান চিহ্নের পরে যে নতুন ভ্যালু হবে বা কোনো হিসাব করা লাগলে, সেটা করে ফেলবি। আর কিছু না। 


নিচে Player থেকে অবজেক্ট বানাইছি। তারপর দুইবার addRun মেথডকে কল করে অবজেক্টের run-এর সংখ্যা বাড়াইছি। খুবই সিম্পল, আবার খুবই মজার। 


  class Player {
    constructor(name, runs, wickets) {
      this.name = name;
      this.runs = runs;
      this.wickets = wickets;
    }

    addRun(run) {
      this.runs = this.runs + run; 
    }
  }

  const player1 = new Player("Tamim", 5000, 100);
  player1.addRun(200); 
  player1.addRun(31); 
  console.log(player1);

Output: {name: 'Tamim', runs: 5231, wickets: 100}


ইনস্ট্যান্স মেথড

ওপরে যে মেথড লিখছিস, সেটা হচ্ছে ক্লাস থেকে একটা ইনস্ট্যান্স বানিয়ে সেটার মধ্যে ইউজ করার মেথড। এইটা পাওয়া যায় শুধু ক্লাস থেকে new কি-ওয়ার্ড দিয়ে অবজেক্ট (ইনস্ট্যান্স) তৈরি করলে। তাই এইটাকে অনেক সময় ইনস্ট্যান্স মেথড বলে। 


আরেকটা ক্লাস এইখানে লিখে ফেললাম ব্যাংক একাউন্টের জন্য। এইখানে দুইটা মেথড আছে। একটা হচ্ছে একাউন্টে টাকা ডিপোজিট করার জন্য, আরেকটা হচ্ছে টাকা withdraw (টাকা উঠানোর জন্য)। এই দুইটাই কিন্তু ইনস্ট্যান্স মেথড। ক্লাস থেকে অবজেক্ট না বানালে এইগুলাকে ইউজ করা যাবে না। তাই আমরা myAccount অবজেক্ট বানিয়ে তারপর টাকা জমা দিয়েছি, আবার টাকা উঠানোর চেষ্টা করেছি। 


আর নিচের deposit মেথডে জাস্ট ইনপুট প্যারামিটার হিসেবে কত টাকা ডিপোজিট করতে চায়, সেটা নিয়েছি। তারপর সেটা দিয়ে তার ব্যাংক ব্যালেন্সের পরিমাণ বাড়িয়েছি। অন্যদিকে withdraw মেথডের ভিতরে চেক করতেছি, সে কত টাকা উঠাতে চায়। যদি তার ব্যাংক ব্যালেন্স যত আছে, তার চাইতে কম টাকা উঠাতে চায়, তাহলে সে উঠাতে পারবে। তবে তার ব্যাংক ব্যালেন্স যত টাকা আছে, তার চাইতে বেশি টাকা উঠাতে চায়, তাহলে সে টাকা পাবে না। একটা টেক্সট পাবে 'Insufficient Balance'।


  class BankAccount {
    constructor(owner, balance) {
      this.owner = owner;
      this.balance = balance;
    }

    deposit(amount) {
      this.balance += amount;
      return this.balance;
    }

    withdraw(amount) {
      if (this.balance >= amount) {
        this.balance -= amount;
        return amount;
      } else {
        return 'Insufficient Balance';
      }
    }
  }

  const myAccount = new BankAccount('Leo', 5000);
  myAccount.deposit(2000);
  myAccount.withdraw(500);
  console.log(myAccount);

Output: {owner: 'Leo', balance: 6500}



Practice: 

  1. হোটেলের জন্য একটা ক্লাস বানিয়ে ফেল। যেখানে হোটেলের নাম, রুমসংখ্যা এবং রাতে থাকার খরচ থাকবে। তারপর getName মেথডকে কল করলে হোটেলের নাম রিটার্ন করবে। 
  2. Employee ক্লাস বানিয়ে ফেল, যেখানে থাকবে কর্মীর নাম, পদ এবং বেতন। getSalary বললে তার স্যালারি (বেতন) কত, সেটা রিটার্ন করবে। 
  3. একটা ক্লাস লিখে ফেল, যেটার নাম দিবি Library। এইটার ভিতরে একটা প্রোপার্টি থাকবে books নামে, আর সেই প্রোপার্টির প্রাথমিক মান হবে একটা খালি অ্যারে। এরপর addBook নামে একটা মেথড লিখবি। সে প্যারামিটার হিসেবে একটা বইয়ের নাম নিবে। তারপর books প্রোপার্টিতে সেই বই যোগ করে দিবে। আরেকটা মেথড লিখবে hasBook নামে, সে একটা প্যারামিটার নিবে। প্যারামিটারে থাকবে বইয়ের নাম। সে গিয়ে চেক করবে, যে নাম দিয়ে বই খুজঁতেছস, সেই বই যদি books প্রোপার্টিতে থাকে, তাহলে সে true রিটার্ন করবে। আর না থাকলে সে false রিটার্ন করবে। 
  4. এখন একটা ShoppingCart ক্লাস লিখে ফেল, যেখানে products নামে একটা প্রোপার্টি থাকবে, আর totalPrice নামে একটা প্রোপার্টি থাকবে। যখন এই ক্লাস থেকে অবজেক্ট বানাবি, তখন products হবে একটা খালি অ্যারে, আর totalPrice হবে 0। এরপর addToCart একটা মেথড হবে। এইটাকে কল করতে গেলে দুইটা প্যারামিটার লাগবে। একটা প্যারামিটারে থাকবে প্রোডাক্টের নাম, আরেকটা প্যারামিটার হবে প্রোডাক্টের দাম। আর এই addToCart-কে কল করলে সে প্রোডাক্টের নামকে products নামক প্রোপার্টিতে যোগ করে দিবে। আর প্রোডাক্টের দাম totalPrice নামক প্রোপার্টির আগের ভ্যালুর সাথে যোগ করে দিবে। সবার শেষে getTotalPrice নামে আরেকটা মেথড লিখে ফেল, যে টোটাল প্রাইস রিটার্ন করবে।


Previous PageNext Page