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

  • জাভাস্ক্রিপ্ট পরিচিতি-Introduction to JavaScript
  • প্রোগ্রামিং শুরু করতে কতটুকু গণিত লাগে?
  • প্রোগ্রামিং শুরু করতে কতটুকু ইংরেজি জানা লাগে?
  • ভালো প্রোগ্রামার কিভাবে হবো? [+৭টি গুরুত্বপূর্ণ টিপস]
  • Type দেখে হাইপ
  • Let দিয়ে শুরু, বদলাবে গুরু
  • Comment-এর সিমেন্ট
  • ও মেয়ে, তোর Name দিব কী
  • Parse-এর ভিতর নানরুটি (NaN)

Parse-এর ভিতর নানরুটি (NaN)

Nan1

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


একইভাবে জাভাস্ক্রিপ্টে যদি ঠিক টাইপের জিনিস না হয়, তখন সেটাকে ঠেলেঠুলে পার্সের (parse) ভিতরে ঢুকাতে পারলে ঠিকই লাইনে চলে আসে। আবার ভুলভাল জিনিস ঢুকালে সেটা নানরুটি হয়ে যায়। 


— কীসব আবোল-তাবোল বলতেছস, দোস্ত। তোর কি ঘুমে মাথা আউলায় গেছে। 


মাঝেমধ্যে মাথা না আউলাইলে কেমনে বুঝবি, মাথার ভিতরে ঘিলু বাড়তেছে নাকি কমতেছে। দাঁড়া বাথরুমে গিয়ে একটু চোখেমুখে পানি দিয়ে এসে তোকে বিস্তারিত বলতেছি। (কিছুক্ষণ পরে ফিরে এসে জাভেদ বলতে শুরু করল)


মাঝেমধ্যে এমন হয়, বিশেষ করে আমরা যখন ওয়েবসাইট থেকে কোনো ডাটা ইউজারের কাছ থেকে নেই। ধর, কারো বয়স বা ওজন বা তার কাছে বইয়ের সংখ্যা ইত্যাদি তখন ওয়েবসাইটে সেই সংখ্যাটাকে সংখ্যা হিসেবে দিবে না, দিবে স্ট্রিং হিসেবে।


স্ট্রিং হিসেবে দেয়ার কারণ হচ্ছে, ওয়েবসাইট কাজটা সিম্পল রাখতে চায়। সবকিছু স্ট্রিং হিসেবে ধরে নিলে তার জন্য কাজটা সহজ হয়ে যায়। পরে যে কোডিং করতেছে, সে তার মতো সঠিকভাবে ডাটাকে কনভার্ট করে নিতে পারবে। 


তারমানে তুই যদি ওয়েবসাইট 20 ইনপুট হিসেবে দিস, সেটা জাভাস্ক্রিপ্টের কাছে সংখ্যা 20 হিসেবে আসবে না। আসবে স্ট্রিং '20' হিসেবে। এখন স্ট্রিং '20' হিসেবে আসলে তুই সেটাকে যদি অন্য কারো সাথে যোগ করস, তখন খুবই গড়বড় লেগে যাবে। ধর, বাপের বয়স 50, সেটা ইনপুট নিলে হয়ে যাবে স্ট্রিং '50', তারপর বাপের সাথে পুত্রের বয়স যোগ করলে স্ট্রিং '50'-এর সাথে স্ট্রিং '20' যোগ করলে সেটা 70 না হয়ে 5020 হয়ে যাবে। 


const fatherAge = '50';
const sonAge = '20';
const totalAge = fatherAge + sonAge;
console.log(totalAge);

Output: ‘5020


এইটা কিন্তু ঠিক না। তাই এই সমস্যা এড়ানোর জন্য যখনই কোনো ইনপুট স্ট্রিং হিসেবে আসবে, তখন সেটাকে সংখ্যায় রূপান্তর করে নিতে হয়। 



কিছুই না, জাস্ট প্রথমে parseInt লিখবি, তারপর ব্র্যাকেট দিয়ে সেটার ভিতরে স্ট্রিংওয়ালা সংখ্যাটাকে পাঠিয়ে দিবি নিচের মতো করে। তুই চাইলে সরাসরি সংখ্যা দিতে পারস, আবার স্ট্রিংওয়ালা সংখ্যা যদি কোনো একটা ভেরিয়েবলে থাকে, সেটাকেও দিতে পারস। 

  const sugar = parseInt('20');
  console.log(sugar);

Output: 20


এর মাধ্যমে string টা int-এ কনভার্ট হয়ে যাবে। এইবার স্ট্রিংওয়ালা সংখ্যা যদি কোনো একটা ভেরিয়েবলে থাকে, সেটাকে কনভার্ট কর। 


  const fatherAge = '50';
  const fatherAgeNumber = parseInt(fatherAge);
  console.log(fatherAgeNumber);

Output: 50


তবে সব সময় যে স্ট্রিংয়ের ভিতরে সংখ্যা থাকবে, সেই গ্যারান্টি নাই। মাঝেমধ্যে ইউজার ভুল করে সংখ্যার আগে কোনো একটা কিছু চলে আসতে পারে। যেমন, হয়তো 20 লিখতে গিয়ে তার আগে x চলে আসতে পারে। তখন '20' না হয়ে 'x20' হয়ে গেলে আর স্ট্রিংকে সংখ্যায় রূপান্তর করতে পারবে না। তখন নানরুটি হয়ে যাবে। 


  const input = 'x20';
  const num = parseInt(input);
  console.log(num);

Output: NaN


আর যদি ইচ্ছা করে সংখ্যার জায়গায় হাবিজাবি স্ট্রিং বা কোনো সঠিক স্ট্রিং বা সংখ্যাকে লিখিত আকারে দিয়ে দেয়, সেটাকেও কিন্তু সংখ্যায় রূপান্তর করতে পারবে না; বরং নানরুটি বানায় ফেলবে নিচের মতো করে। 

  const age = parseInt('adfasdfasdf');
  const weight = parseInt('twenty');
  console.log(age, weight);

Output: NaN  NaN


তবে স্ট্রিংয়ের শুরুতে সংখ্যা, তারপর কোনো স্ট্রিং থাকলে সে এক এক করে যতক্ষণ সংখ্যা পায়, ততক্ষণ পর্যন্ত নিতে থাকে এবং সেটাকে সংখ্যায় রূপান্তর করে ফেলে। কোনো অক্ষর বা বর্ণ পেলে সে স্টপ করে ফেলে। আর যদি স্ট্রিং শুরুই হয় বর্ণ দিয়ে, তাহলে সে সংখ্যা বানানোর কিছুই পেল না। তখন সেটাকে সে নানরুটি বানিয়ে ফেলে। 


  const age = parseInt('50f');
  const weight = parseInt('9twenty');
  const address = parseInt('tom60');
  console.log(age, weight, address);

Output: 50  9  NaN


এই NaN কিন্ত নানরুটি না। আবার নানাও না; বরং Not A Number-এর সংক্ষিপ্ত রূপ। এই NaN দিয়ে বুঝায়, তুই এমন একটা জিনিসকে সংখ্যায় রূপান্তর করার চেষ্টা করছিস, যেটাকে সংখ্যা বানানো সম্ভব না। যেটাকে সংখ্যায় রূপান্তর করা যাবে না। সেটাকে বলে দিবে Not A Number ওরফে NaN। 


ধর, তোর একটা ভ্যালু ভগ্নাংশ আকারে আছে। তখন তুই তাকে integer-এ কনভার্ট করার জন্য এই parseInt() ব্যবহার করতে পারিস।

  const sugar = parseInt('1.22222');
  console.log(sugar);

Output: 1


parseInt করলে সে integer বা পূর্ণসংখ্যায় রূপান্তর করে ফেলবে। আমরা যদি স্ট্রিংয়ে আছে, এমন কোনো সংখ্যাকে ভগ্নাংশ হিসেবে দেখতে চাই, তাহলে parseInt-এর খালাতো ভাই parseFloat ইউজ করবি।


  const sugar = parseFloat('1.22222');
  console.log(sugar);

Output: 1.22222


এখন আবার যদি তোর কোনো আউটপুট দশমিকের পর এক ঘর বা দুই ঘর বা তিন ঘর ইত্যাদি প্রয়োজন হয়, অর্থাৎ দশমিকের পর তুই একটা বা দুইটা বা তিনটা অঙ্ক (সংখ্যা) রাখতে চাস, তখন সংখ্যার পর toFixed লিখে দুইটা ব্র্যাকেট দিবি। আর ব্র্যাকেটের ভিতরে তুই দশমিকের পর কয় অঙ্ক চাস, সেটা বলে দিবি। যদি 2 অঙ্ক চাস, তাহলে 2 বলে দিবি নিচের মতো করে।

  const first = 12.13568;
  const second = 31.22564;
  const total = first + second;
  console.log(total.toFixed(2));

Output: ‘43.36


toFixed()-এর ভিতরে তুই দশমিকের পর যত ঘর পর্যন্ত আউটপুট চাস, তা লিখে দিতে পারিস।


এখানে একটি সমস্যা আছে, সেটা হচ্ছে toFixed করলে total-এর valueটা আবার string type-এ কনভার্ট হয়ে যায়। আবার স্ট্রিং হয়ে গেলে পরে যোগ-বিয়োগ বা এই টাইপের কিছু করতে গেলে সমস্যা হতে পারে। তাই এটাকে আবার তুই parseFloat()- দিয়ে সংখ্যাকে কনভার্ট করতে পারিস। যেমন:


  const first = 12.13568;
  const second = 31.22564;
  const total = first + second;
  const totalNumber = parseFloat(total.toFixed(2));
  console.log(totalNumber)

Output: 43.36


এইসব নিয়ে এখন মাথা গরম করার দরকার নাই। মুখস্ত করারও দরকার নাই; বরং এইটা যে দেখছিস, সেটাই ভুলে গিয়ে সামনে এগুতে থাক। সেখানে তোদের হবু’র আম্মুর সাথে দেখা হলেও হয়ে যেতে পারে।


JavaScript Parse Practice:


  • ধর তুই একটা মজার অঙ্ক করছিস। তুই ‘20’ লিখে ফেললি, কিন্তু সেটা স্ট্রিং আকারে। স্ট্রিং থেকে আসল সংখ্যায় কনভার্ট করে তার সাথে 10 যোগ করতে পারবি?

  • তোর কাছে একটা ভগ্নাংশ আকারে মান আছে, যেমন '3.14159'। এই মানটা পূর্ণসংখ্যায় রূপান্তর করার জন্য একটা প্রোগ্রাম লিখ।

  • তুই 'premikBoy' নামের একটা স্ট্রিংকে সংখ্যা বানানোর চেষ্টা কর। দেখ কী আউটপুট দেয়।

  • তুই 3.456 আর 2.789 যোগ করলি। আউটপুটে তুই দশমিকের পর মাত্র 2 ঘর পর্যন্ত দেখতে চাস। কীভাবে দেখাবি? একটা প্রোগ্রাম লিখ।

  • ধর, তুই '56.78' আর '12.34' স্ট্রিং আকারে পাইলি। এখন এই দুইটা যোগ করে কীভাবে আসল সংখ্যা বের করবি? সেটা বের করার একটা প্রোগ্রাম লিখ।

  • ধর, তোর কাছে '10.5678' আর '5.4321' আছে। তুই আউটপুটে দশমিকের পর 1 ঘর পর্যন্ত দেখতে চাস। সেটা কীভাবে দেখাবি?

  • এখন '42.45689754'-কে দশমিকের পর 3 ঘর পর্যন্ত রাউন্ড কর।


Previous PageNext Chapter