• Home
  • Learn
    • Offline Courses
    • Online Courses
    • Web Development
    • Mobile App Development
    • Software Engineering
    • Graphic Design
    • Soft Skills
  • Blog
  • Events
  • About Us
  • Contact
KlassroomKlassroom
  • Home
  • Learn
    • Offline Courses
    • Online Courses
    • Web Development
    • Mobile App Development
    • Software Engineering
    • Graphic Design
    • Soft Skills
  • Blog
  • Events
  • About Us
  • Contact
    • RegisterLogin

ওয়েব ডেভেলপমেন্ট

  • Home
  • Blog
  • ওয়েব ডেভেলপমেন্ট
  • জাভাস্ক্রিপ্টে primitive এবং reference টাইপ ডাটার মাঝে পার্থক্য

জাভাস্ক্রিপ্টে primitive এবং reference টাইপ ডাটার মাঝে পার্থক্য

  • Posted by Saroar Hossain Shahan
  • Categories ওয়েব ডেভেলপমেন্ট, জাভাস্ক্রিপ্ট, ফ্রন্টএন্ড ডেভেলপমেন্ট
  • Date August 28, 2018
  • Comments 2 comments

আজকে আমরা আলোচনা করতে যাচ্ছি primitive টাইপ এবং reference টাইপ ডাটার মাঝে কি পার্থক্য এবং এই ডাটা টাইপগুলো কিভাবে কাজ করে। একজন জাভাস্ক্রিপ্ট প্রোগ্রামার হিসাবে এই ডাটা টাইপগুলো সম্পর্কে পরিষ্কার জ্ঞান রাখা আবশ্যক।

জাভাস্ক্রিপ্টে দুই টাইপের ডাটা টাইপ আছে।

১. প্রিমিটিভ ডাটা টাইপ এবং

২. নন-প্রিমিটিভ বা রেফারেন্স ডাটা টাইপ

জাভাস্ক্রিপ্টে Strings, Numbers, Boolean, Null, undefined এই ডাটা টাইপগুলো প্রিমিটিভ ডাটা টাইপ হিসাবে পরিচিত এবং Arrays, Objects নন-প্রিমিটিভ বা রেফারেন্স ডাটা টাইপ হিসাবে পরিচিত। এদের মাঝে মৌলিক পার্থক্য হচ্ছে যে প্রিমিটিভ ডাটা immutable বা অপরিবর্তনীয় এবং নন-প্রিমিটিভ ডাটা mutable বা পরিবর্তনীয়।

১. প্রিমিটিভ ডাটা টাইপ

প্রমিটিভ ডাটা immutable বা অপরিবর্তনীয় ডাটা টাইপ হিসাবে পরিচিত কারণ এই ডাটা একবার তৈরি হয়ে গেলে এটি পরিবর্তন করার কোন পথ নেই। তাহলে চলেন আপনাদের প্রমাণ করে দেখাই। 🙂

JavaScript
1
2
3
4
5
6
let str1 = "Hi there, I am a string!";
 
console.log(str1[1]); // "i"
 
str1[1] = "e";
console.log(str1); // "Hi there, I am a string!"

উপরের কোডটা রান করেন এবং দেখেন জাভাস্ক্রিপ্টের কারিশমা 😛 সব কিছু মাথার উপর দিয়ে গেল? আচ্ছা, চলুন ব্যাপারটা ব্যাখ্যা করি 🙂 আপনি হাজার বার চাইলেও স্ট্রিং এর ভ্যালু পরিবর্তন করতে পারবেন না। কারণ স্ট্রিং একটি immutable বা অপরিবর্তনীয়। একটি কথা মনে রাখবেন যদি স্ট্রিংকে কোন ভেরিয়েবলে অ্যাসাইন করে ফেলেন এবং অ্যাসাইন করার পর স্ট্রিংকে মডিফাই করতে চান, তাহলে আপনি একটি নতুন স্ট্রিং পাবেন। যেমন- .toUpperCase(), .slice(), .trim() ইত্যাদি।

JavaScript
1
2
3
4
5
6
let str1 = "Hi there, I am a string!";
 
let newStr = str1.toUpperCase();
 
console.log(newStr);
console.log(str1);

প্রিমিটিভ ডাটা টাইপগুলো একে অপরের সাথে তাদের ভ্যালু দ্বারা তুলনা করে।

JavaScript
1
2
3
4
5
6
7
8
9
10
11
let str1 = "Hi there, I am a string!";  
let str2 = "Hi there, I am a string!";  
 
console.log(str1 == str2); // true
console.log(str1 === str2); // true
 
let num1 = 7;
let num2 = 7;
 
console.log(num1 == num2); // true
console.log(num1 === num2); // true

প্রিমিটিভ টাইপগুলো সব সময় তাদের ভ্যালু পাস করে। চলুন উদাহরণ দেখি 🙂

JavaScript
1
2
3
4
5
let num1 = 7;
let num2 = num1;
 
console.log(num1);
console.log(num2);

যখন আমরা কোন প্রিমিটিভ ডাটা টাইপকে অন্য কোন ভেরিয়েবলে অ্যাসাইন করি, তখন তার ভ্যালু কপি হয়ে নতুন ভেরিয়েবলে অ্যাসাইন হয়।

২. নন-প্রিমিটিভ ডাটা টাইপঃ-

নন-প্রিমিটিভ ডাটা mutable বা পরিবর্তনীয়। কারণ একটি অবজেক্ট তৈরি হয়ে যাওয়ার পরেও অবজেক্টের ভ্যালু পরিবর্তন হতে পারে। আমরা যখন কোন নন-প্রিমিটিভ ডাটা তৈরি করি, তখন সেই ডাটার জন্যে মেমোরিতে একটা অ্যাড্রেস তৈরি হয় এবং সেই অ্যাড্রেসটাকে মনে রেখে কোন এক জায়গায় ভ্যালুগুলোকে স্ট্রোর করে রাখে। তারপর আমাদের যখন দরকার পরে তখন সে ঐ অ্যাড্রেসকে কল করে এবং আমাদের ডাটা প্রদান করে। এটা বুঝতে হলে আপনাদের কে স্ট্যাক এবং হীপ মেমোরি সম্পর্কে জানতে হবে। তবে আমি যতটুকু বললাম এখন এতটুকু মনে মনে রাখলেই হবে। 🙂

JavaScript
1
2
3
4
5
6
7
8
let arr1 = ['Sumon', 'Molla', 'Tafhim', 'Shahan'];
let arr2 = arr1;
console.log(arr1);
console.log(arr2);
 
arr2[0] = 'Selim';
console.log(arr1);
console.log(arr2);

নন-প্রিমিটিভ বা রেফারেন্স ডাটাগুলো সব সময় তাদের রেফারেন্স পাস করে। যখন আমরা কোন রেফারেন্স ডাটাকে অন্য কোন ভেরিয়েবলে অ্যাসাইন করি, তখন তার রেফারেন্স কপি হয়। মানে arr1 কে যখন আমরা arr2 তে অ্যাসাইন করি তখন তার রেফারেন্স বা অ্যাড্রেসটাকে কপি করে বা মনে রাখে তার ভ্যালুকে না। তাই দুইটা ভেরিয়েবলের অ্যাড্রেস একই থাকে। তাই যখন আমরা কোন একটি ভেরিয়েবলের ভ্যালু পরিবর্তন করি, তখন দুইটা ভেরিয়েবলেরই ভ্যালু পরিবর্তন হয়ে যায়।

JavaScript
1
2
3
4
5
6
7
8
9
10
11
let obj1 = {
  name: 'Sumon'
};
let obj2 = obj1;
 
console.log(`Before changing: ${obj1.name}`);
console.log(`Before changing: ${obj2.name}`);
 
obj2.name = 'Molla';
console.log(`After changing: ${obj1.name}`);
console.log(`After changing: ${obj2.name}`);

আশা করি উপরের কোডে কি হচ্ছে সেটা এখন খুব ভাল ভাবেই বুঝতে পারছেন। 🙂 একটি কথা নন-প্রিমিটিভ ডাটা তাদের রেফারেন্স দ্বারা তুলনা করে।

JavaScript
1
2
3
4
5
6
7
8
9
10
let obj1 = {
  name: 'Sumon'
};
 
let obj2 = {
  name: 'Sumon'
};
 
console.log(obj1 == obj2); // false
console.log(obj1 === obj2); // false

 

এখানে দুইটা অব্জেক্টেরই একই ভ্যালু। কিন্তু যখন আমরা দুইটা অবজেক্টকে একে-অপরের সাথে তুলনা করছি, তখন তারা false রিটার্ন করছে। কারণ তাদের ভ্যালু একই হলেও তাদের অ্যাড্রেস কিন্তু এক না।

JavaScript
1
2
3
4
5
6
7
let obj1 = {
  name: 'Sumon',
};
let obj2 = obj1;
 
console.log(obj1 == obj2); // true
console.log(obj1 === obj2); // true

এখানে কি হচ্ছে সেটা কি বলতে হবে? 😉 বিষয়টা একদম পানির  মত পরিষ্কার।

 

এই হচ্ছে প্রিমিটিভ এবং নন-প্রিমিটিভ ডাটা টাইপের মাঝে পার্থক্য। যদি ভাল লেগে থাকে তাহলে মুক্ত জ্ঞান সবার মাঝে ছড়িয়ে দিন। সবাইকে জানতে এবং শিখতে সাহায্য করুন। দেখা হবে পরবর্তী কোন লেখায়। ততদিন হ্যাপি কোডিং 🙂

 

Tag:primitive, primitive and reference data type, primitive data type, reference, reference data type

  • Share:
author avatar
Saroar Hossain Shahan
একজন স্বপ্নবাজ, স্বাধীনচেতা, ডানপিটে এবং টেক-লাভার মানুষ। ভালোবাসি স্বপ্ন দেখতে। ভালোবাসি নতুন কিছু সম্পর্কে জানতে। তার থেকে বেশি ভালোবাসি নিজের অর্জিত জ্ঞানটুকু সবার মাঝে ছড়িয়ে দিতে। ইচ্ছে করে বেঁচে থাতে কিন্তু তা সম্ভব নয়। কারণ, এই পৃথিবীতে খুব অল্প সময়ের জন্যে এসেছি। এই সুন্দর পৃথিবীতে একটু বেশি সময় বেঁচে থাকার জন্যেই কিছু রেখে যাওয়ার চেষ্টা। তাই যখনই সময় পাই লিখতে বসে যাই।

Previous post

পিএইচপি(PHP) নিয়ে যত কথা। পর্ব — ৭ [ পিএইচপি String ডেটা-টাইপ]
August 28, 2018

Next post

পিএইচপি(PHP) নিয়ে যত কথা। পর্ব — ৮ [ পিএইচপি অপারেটর ]
September 25, 2018

You may also like

php-thumb-3
পিএইচপি(PHP) নিয়ে যত কথা। পর্ব — ৮ [ পিএইচপি অপারেটর ]
25 September, 2018
php-thumb-3
পিএইচপি(PHP) নিয়ে যত কথা। পর্ব — ৭ [ পিএইচপি String ডেটা-টাইপ]
12 August, 2018
reactjsbasics
রিঅ্যাক্ট ব্যাসিকসঃ জেএসএক্স(JSX) পরিচিতি
8 August, 2018

    2 Comments

  1. Tanzimul Hasib
    September 3, 2018
    Reply

    Great to learn. Things are described clearly.
    Thank you.

    • Saroar Hossain Shahan
      September 5, 2018
      Reply

      I am really very glad to hear. By The Way, You are most welcome.

Leave A Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

ব্লগ

  • এন্ড্রয়েড (1)
  • ওয়েব ডেভেলপমেন্ট (27)
  • গাল্প (Gulp) (1)
  • জাভাস্ক্রিপ্ট (18)
  • পিএইচপি (8)
  • ফ্রন্টএন্ড ডেভেলপমেন্ট (9)
  • ব্যাকএন্ড ডেভেলপমেন্ট (9)
  • মার্কআপ ল্যাঙ্গুয়েজ (1)
  • মোবাইল অ্যাপ ডেভেলপমেন্ট (1)

Featured Courses

Demystifying Linux (লিনাক্স ও শেল স্ক্রিপ্টিং হাতেখড়ি)

Demystifying Linux (লিনাক্স ও শেল স্ক্রিপ্টিং হাতেখড়ি)

৳ 2,500.00
Learn More

Copyright © Lets Learn Coding Ltd. 2018

Login with your site account

Lost your password?

Not a member yet? Register now

Register a new account

Are you a member? Login now