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

  • জাভাস্ক্রিপ্ট পরিচিতি-Introduction to JavaScript
  • প্রোগ্রামিং শুরু করতে কতটুকু গণিত লাগে?
  • প্রোগ্রামিং শুরু করতে কতটুকু ইংরেজি জানা লাগে?
  • ভালো প্রোগ্রামার কিভাবে হবো? [+৭টি গুরুত্বপূর্ণ টিপস]
  • দুষ্ট থেকে মুক্ত type validation
  • JS Error দেখে Mirror

দুষ্ট থেকে মুক্ত type validation


তোর আশেপাশেই অনেক ফাজিল পোলাপান আছে, যাদেরকে তুই ডানে যেতে বললে সে বামে যাবে, সোজা কথা বললে বাঁকা কথায় রিপ্লাই দিবে, কারো কাছ থেকে দূরে থাকতে বললে তার সাথেই গিয়ে বেশি গেস্টাগেস্টি করে। যে খাবার খাইতে না করবে, সেটাই বেশি ঘপাঘপ গিলতে থাকে। অর্থাৎ সোজা কাজটাকে উল্টায় ফেলবে সব সময়। এরকম কিছু দুষ্টু প্রকৃতির পোলাপান থাকে। তাদের জন্য সবসময় সতর্ক থাকতে হয়। 


প্রোগ্রামিং করার সময়ও আমাদের অনেক সতর্ক থাকতে হয়। অনেক দুষ্ট, বান্দর, পোলাপান সোজা ইনপুট না দিয়ে বাঁকা ইনপুট দেয়। সেজন্য তার ইনপুট প্যারামিটার Validation করে নিতে হয়। 


ধর, তোর কাছে যোগ করার একটা ফাংশন আছে—


  function sum(num1, num2) {
    const total = num1 + num2;
    return total;
  }

  const result = sum(5, 7);
  console.log(result);

Output: 12


কেউ যদি একটা প্যারামিটার সংখ্যা না দিয়ে একটা string দিয়ে দেয়, তখন দেখবি, যোগে ভুল হয়ে গেছে। 


  const result = sum(5, '7');
  console.log(result);

Output: '57'


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


  function multiply(num1, num2) {
    const mult = num1 * num2;
    return mult;
  }

  const result = multiply(5, 'seven');
  console.log(result);

Output: NaN



তাহলে কিন্তু আউটপুট NaN দেখাবে। এটা কেন ঘটছে? আবার যদি তুই ফাংশনে প্যারামিটার হিসেবে array দিয়ে দিস, তখন কী হবে?


  const result = multiply([5, 1], [7]);


আউটপুট কিন্তু NaN আসবে। আবার তুই যদি এভাবে দিস—


  const result = multiply(5 + 7);


এই ক্ষেত্রে কিন্তু কমা দিয়ে যদি প্যারামিটারগুলোকে আলাদা না করিস, তাহলে সে এদেরকে একটা প্যারামিটার হিসেবে চিন্তা করবে।


এইসব সিচুয়েশন হ্যান্ডেল করার জন্য ইনপুট validation করতে হয়। অর্থাৎ ফাংশনে ঢোকার সাথে সাথে যদি ভেরিয়েবলগুলো কোন ধরনের সেটা চেক করে ব্যবস্থা নেয়া হয়, তাহলে এই সমস্যাগুলো হবেই না।

  function multiply(num1, num2) {
    if (typeof num1 !== 'number' || typeof num2 !== 'number') {
      return 'Please provide a number';
    }
    const mult = num1 * num2;
    return mult;
  }

  const result = multiply(5, 7);
  console.log(result);


এখানে কিন্তু আমরা typeof ব্যবহার করে প্যারামিটারের datatype চেক করে নিচ্ছি validation-এর জন্য। যখন তোর ফাংশন শুধু নাম্বারের জন্য কাজ করবে, তাই typeOf দিয়ে num1-এর টাইপ যদি number ছাড়া অন্য কিছু হয়, অথবা num2 যদি number ছাড়া অন্য কিছু হয়, তাহলে রিটার্ন করে বলে দিচ্ছে প্যারামিটার হিসেবে সংখ্যা পাঠাতে। 


একইভাবে কোনো ফাংশনে যদি স্ট্রিং টাইপের ইনপুট প্যারামিটার থাকে। জাস্ট স্ট্রিং দুইটাকে যোগ করবে। 


  function fullName(first, second) {
    const full = first + ' ' + second;
    return full;
  }
   
  const full = fullName('Rahan', 'Sohan');
  console.log(full);

Output: Rahan Sohan


এটার ক্ষেত্রে যদি ইউজার ইনপুটে কোনো একটা string না দিয়ে সংখ্যা দেয়, তখন validation করতে হবে, অর্থাৎ ফাংশনটা শুধু string-এর জন্য কাজ করবে।


  function fullName(first, second) {
    if (typeof first !== 'string') {
      return "First name should be a String";
    } else if (typeof second !== 'string') {
      return "Second name should be a String";
    }
    const full = first + ' ' + second;
    return full;
  }

  const full = fullName('Rahan', 5);
  console.log(full);

Output: Second name should be a String


কোনো ক্ষেত্রে যদি ফাংশনের শুধু অবজেক্টের জন্য validation করতে হয়, তখন কী করতে হবে?


  function getPrice(product) {
    const price = product.price;
    return price;
  }

  const price = getPrice({name: 'chulkani dandi', price: 35, color: 'Blue'});
  console.log(price);

Output: 35


এক্ষেত্রে কোড ঠিকঠাক কাজ করবে। কারণ, এখানে অবজেক্টই প্যারামিটার হিসেবে পাঠানো হয়েছে। কিন্তু যদি কেউ সংখ্যা পাঠিয়ে দেয়, তখন কী হবে? এজন্যই validation করতে হবে।


  function getPrice(product) {
    if (typeof product !== 'object') {
      return 'Please provide an object';
    }
    const price = product.price;
    return price;
  }

  const price = getPrice(35);
  console.log(price);

Output: Please provide an object


যদি array নিয়ে কাজ করিস, তখন validation-এর সময় একটু আলাদা সিস্টেম করতে হবে। কারণ, জাভাস্ক্রিপ্টে array একধরনের object এবং typeof দিয়ে array চেক করা যায় না।


  function getSecond(numbers) {
    console.log(typeof numbers);
    const second = numbers[1];
    return second;
  }

  const second = getSecond([1, 25, 69]);
  console.log(second);

Output: 
object
25


এই কোড রান করলে দেখবি, আউটপুট object দেখাচ্ছে। কিন্তু array চেক করার জন্য Array.isArray() মেথড আছে, সেটা দিয়ে অ্যারে কি না, চেক করা যায়।


  function getSecond(numbers) {
    if (Array.isArray(numbers) == false) {
      return 'Please provide an array';
    }
    const second = numbers[1];
    return second;
  }

  const second = getSecond(45);
  console.log(second);

Output: Please provide an array


যদি আউটসাইড থেকে তোর ফাংশনকে কল করার চান্স থাকে, তাহলে প্যারামিটার ভ্যালিডেশন অনেক বেশি গুরুত্বপূর্ণ হয়ে দাঁড়ায়। 


Practice:


  1. একটা ফাংশন বানা, যা নামের প্রথম অক্ষর রিটার্ন করবে। ইনপুট যদি string না হয়, তখন validation ম্যাসেজ দিবে।
  2. একটা ফাংশন লিখ array-এর শেষ উপাদান দিবে। ইনপুট array না হলে ওয়ার্নিং ম্যাসেজ দিবে।
  3. rectangle-এর area বের করার getArea ফাংশন বানা, যেখানে length আর width নাম্বার না হলে validation ম্যাসেজ দিবে। এরিয়া বের করার জন্য length আর width গুণ করে দিলেই হবে। 


Previous ChapterNext Page