Lodash লাইব্রেরিতে _.clone() এবং _.cloneDeep() ফাংশন দুটি Objects এবং Arrays কপি করার জন্য ব্যবহৃত হয়। এই ফাংশন দুটি গুরুত্বপূর্ণ পার্থক্য রয়েছে, যা বুঝতে সাহায্য করবে কোন পরিস্থিতিতে কোনটি ব্যবহার করবেন।
১. _.clone() – শ্যালো কপি (Shallow Copy)
_.clone() ফাংশনটি একটি শ্যালো কপি তৈরি করে। এর মানে হল, যে object বা array কপি করা হয়, তা কেবলমাত্র প্রথম স্তরের উপাদানগুলির কপি তৈরি করবে। যদি কোনো nested object বা array থাকে, তবে তা মূল object বা array এর সাথে রেফারেন্স হিসেবে থাকবে, অর্থাৎ nested elements গুলি পরিবর্তন করলে মূল object বা array তেও পরিবর্তন হবে।
সিনট্যাক্স:
_.clone(value)
- value: যে object বা array কপি করতে চান।
উদাহরণ:
const _ = require('lodash');
let original = { a: 1, b: { c: 2 } };
// শ্যালো কপি তৈরি করা
let shallowCopy = _.clone(original);
// শ্যালো কপির প্রথম স্তরের উপাদান পরিবর্তন
shallowCopy.a = 10;
// শ্যালো কপির nested object এর উপাদান পরিবর্তন
shallowCopy.b.c = 20;
console.log(original); // { a: 1, b: { c: 20 } }
console.log(shallowCopy); // { a: 10, b: { c: 20 } }
ব্যাখ্যা: এখানে _.clone() ব্যবহার করে শ্যালো কপি তৈরি করা হয়েছে। আপনি দেখতে পাচ্ছেন যে, যখন nested object (b) এর মধ্যে পরিবর্তন করা হয়েছে, তখন মূল object-এও পরিবর্তন এসেছে, কারণ _.clone() শ্যালো কপি তৈরি করে এবং nested object গুলির মধ্যে রেফারেন্স শেয়ার করা হয়।
২. _.cloneDeep() – গভীর কপি (Deep Copy)
_.cloneDeep() ফাংশনটি একটি গভীর কপি তৈরি করে। এটি object বা array এর সকল স্তরের উপাদান গুলিকে কপি করে, অর্থাৎ nested objects বা arrays-ও নতুন কপি হয়ে যাবে। এর ফলে, মূল object বা array তে কোনো পরিবর্তন না ঘটলেও কপি করা object বা array তে কোনো পরিবর্তন হলে মূল object বা array অপরিবর্তিত থাকবে।
সিনট্যাক্স:
_.cloneDeep(value)
- value: যে object বা array কপি করতে চান।
উদাহরণ:
const _ = require('lodash');
let original = { a: 1, b: { c: 2 } };
// গভীর কপি তৈরি করা
let deepCopy = _.cloneDeep(original);
// গভীর কপির প্রথম স্তরের উপাদান পরিবর্তন
deepCopy.a = 10;
// গভীর কপির nested object এর উপাদান পরিবর্তন
deepCopy.b.c = 20;
console.log(original); // { a: 1, b: { c: 2 } }
console.log(deepCopy); // { a: 10, b: { c: 20 } }
ব্যাখ্যা: এখানে _.cloneDeep() ব্যবহার করে গভীর কপি তৈরি করা হয়েছে। আপনি দেখতে পাচ্ছেন যে, গভীর কপির nested object (b) পরিবর্তন হলেও, মূল object অপরিবর্তিত রয়েছে, কারণ _.cloneDeep() পুরো object এর প্রতিটি স্তরের কপি তৈরি করে।
৩. _.clone() এবং _.cloneDeep() এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | _.clone() | _.cloneDeep() |
|---|---|---|
| কপি ধরনের | শ্যালো কপি (Shallow Copy) | গভীর কপি (Deep Copy) |
| Nested Object/Array | nested object বা array গুলোর রেফারেন্স শেয়ার করা হয় | nested object বা array গুলির কপি তৈরি করা হয় |
| পারফরম্যান্স | দ্রুত (কারণ শুধুমাত্র প্রথম স্তরের কপি হয়) | কিছুটা ধীর (কারণ সম্পূর্ণ structure কপি হয়) |
| ব্যবহার | যখন nested objects এর পরিবর্তন প্রয়োজন নেই | যখন nested objects ও পরিবর্তন করতে হয় |
৪. কখন _.clone() এবং _.cloneDeep() ব্যবহার করবেন?
_.clone()ব্যবহার করুন যখন আপনার object বা array এর প্রথম স্তরের উপাদানগুলির কপি দরকার এবং nested objects বা arrays গুলির পরিবর্তন দরকার নেই।_.cloneDeep()ব্যবহার করুন যখন আপনি নিশ্চিত হতে চান যে, object বা array এর সব স্তরের উপাদানগুলোর আলাদা কপি তৈরি হবে এবং nested elements গুলির পরিবর্তনও মূল object বা array তে প্রভাব ফেলবে না।
উপসংহার
Lodash এর _.clone() এবং _.cloneDeep() ফাংশন দুটি objects এবং arrays কপি করার জন্য খুবই কার্যকরী। যদি আপনার প্রয়োজন শুধু প্রথম স্তরের কপি, তবে _.clone() ব্যবহার করুন, এবং যদি আপনাকে পুরো object বা array এর প্রতিটি স্তরের কপি দরকার হয়, তবে _.cloneDeep() ব্যবহার করুন। এগুলি কোডে ক্লিয়ারিটি এবং নিরাপত্তা নিশ্চিত করতে সাহায্য করে, বিশেষত যখন nested objects বা arrays সাথে কাজ করছেন।
Read more