আমার কাছে এই সাধারণ বৈশিষ্ট্য ভিত্তিক ব্যবহারের কেস / উইকম্যাপগুলির উদাহরণ রয়েছে।
ব্যবহারকারীদের একটি সংগ্রহ পরিচালনা করুন
আমি দিয়ে অনুষ্ঠানটি শুরু User
অবজেক্ট যার বৈশিষ্ট্য একটি অন্তর্ভুক্ত fullname
, username
, age
, gender
এবং একটি পদ্ধতি বলা print
যা অন্যান্য বৈশিষ্ট্য পাঠযোগ্য সারসংক্ষেপ ছাপে।
/**
Basic User Object with common properties.
*/
function User(username, fullname, age, gender) {
this.username = username;
this.fullname = fullname;
this.age = age;
this.gender = gender;
this.print = () => console.log(`${this.fullname} is a ${age} year old ${gender}`);
}
আমি তখন users
একাধিক ব্যবহারকারীর সংকলন রাখার জন্য একটি মানচিত্র যুক্ত করেছি যা দ্বারা কী রয়েছে username
।
/**
Collection of Users, keyed by username.
*/
var users = new Map();
সংযোজন যোগ করার জন্য কোনও ব্যবহারকারীকে যুক্ত করতে, পেতে, মুছতে এবং এমনকি সম্পূর্ণরূপে সমস্ত ব্যবহারকারীদের মুদ্রণের জন্য একটি ফাংশনও সহায়তা ফাংশন প্রয়োজন।
/**
Creates an User Object and adds it to the users Collection.
*/
var addUser = (username, fullname, age, gender) => {
let an_user = new User(username, fullname, age, gender);
users.set(username, an_user);
}
/**
Returns an User Object associated with the given username in the Collection.
*/
var getUser = (username) => {
return users.get(username);
}
/**
Deletes an User Object associated with the given username in the Collection.
*/
var deleteUser = (username) => {
users.delete(username);
}
/**
Prints summary of all the User Objects in the Collection.
*/
var printUsers = () => {
users.forEach((user) => {
user.print();
});
}
উপরের সমস্ত কোড চলমান থাকায়, নোডজেএস বলুন , কেবলমাত্র users
মানচিত্রে পুরো প্রক্রিয়াটির মধ্যে ব্যবহারকারী অবজেক্টের রেফারেন্স রয়েছে। স্বতন্ত্র ব্যবহারকারী বিষয়গুলির জন্য অন্য কোনও রেফারেন্স নেই।
এই কোডটি একটি ইন্টারেক্টিভ নোডজেএস শেলটি চালাচ্ছি, যেমন একটি উদাহরণ হিসাবে আমি চারজন ব্যবহারকারী যুক্ত করি এবং সেগুলি মুদ্রণ করি:
বিদ্যমান কোডের পরিবর্তনের পরিবর্তে ব্যবহারকারীদের আরও তথ্য যুক্ত করুন
এখন বলুন যে প্রতিটি ব্যবহারকারী সোশ্যাল মিডিয়া প্ল্যাটফর্ম (এসএমপি) লিংকগুলি ব্যবহারকারী অবজেক্টের পাশাপাশি ট্র্যাক করা দরকার a
এখানে কীটি হ'ল এই বৈশিষ্ট্যটি অবশ্যই বিদ্যমান কোডটিতে ন্যূনতম হস্তক্ষেপের সাথে প্রয়োগ করতে হবে।
নিম্নলিখিত পদ্ধতিতে WeakMaps এর মাধ্যমে এটি সম্ভব।
আমি টুইটার, ফেসবুক, লিংকডইন এর জন্য পৃথক তিনটি ওয়েকম্যাপস যুক্ত করি।
/*
WeakMaps for Social Media Platforms (SMPs).
Could be replaced by a single Map which can grow
dynamically based on different SMP names . . . anyway...
*/
var sm_platform_twitter = new WeakMap();
var sm_platform_facebook = new WeakMap();
var sm_platform_linkedin = new WeakMap();
একটি সহায়ক ফাংশন, getSMPWeakMap
প্রদত্ত এসএমপি নামের সাথে যুক্ত উইকম্যাপটি ফিরিয়ে দিতে কেবল যুক্ত করা হয়।
/**
Returns the WeakMap for the given SMP.
*/
var getSMPWeakMap = (sm_platform) => {
if(sm_platform == "Twitter") {
return sm_platform_twitter;
}
else if(sm_platform == "Facebook") {
return sm_platform_facebook;
}
else if(sm_platform == "LinkedIn") {
return sm_platform_linkedin;
}
return undefined;
}
প্রদত্ত এসএমপি ওয়েকম্যাপে ব্যবহারকারীদের এসএমপি লিঙ্ক যুক্ত করার জন্য একটি ফাংশন।
/**
Adds a SMP link associated with a given User. The User must be already added to the Collection.
*/
var addUserSocialMediaLink = (username, sm_platform, sm_link) => {
let user = getUser(username);
let sm_platform_weakmap = getSMPWeakMap(sm_platform);
if(user && sm_platform_weakmap) {
sm_platform_weakmap.set(user, sm_link);
}
}
প্রদত্ত এসএমপি-তে কেবল উপস্থিত ব্যবহারকারীদের মুদ্রণের জন্য একটি ফাংশন।
/**
Prints the User's fullname and corresponding SMP link of only those Users which are on the given SMP.
*/
var printSMPUsers = (sm_platform) => {
let sm_platform_weakmap = getSMPWeakMap(sm_platform);
console.log(`Users of ${sm_platform}:`)
users.forEach((user)=>{
if(sm_platform_weakmap.has(user)) {
console.log(`\t${user.fullname} : ${sm_platform_weakmap.get(user)}`)
}
});
}
আপনি এখন ব্যবহারকারীদের জন্য এসএমপি লিঙ্কগুলি যুক্ত করতে পারেন, পাশাপাশি প্রতিটি ব্যবহারকারীর একাধিক এসএমপিতে লিঙ্ক থাকার সম্ভাবনাও রয়েছে।
... পূর্ববর্তী উদাহরণটি দিয়ে চালিয়ে আমি ব্যবহারকারীদের সাথে এসএমপি লিঙ্কগুলি যুক্ত করি, ব্যবহারকারীগণ বিল এবং সারার জন্য একাধিক লিঙ্ক এবং তারপরে প্রতিটি এসএমপির জন্য লিঙ্কগুলি আলাদাভাবে মুদ্রণ করি:
এখন বলুন কোনও ব্যবহারকারীকে users
কল করে মানচিত্র থেকে মুছে ফেলা হয়েছে deleteUser
। এটি ব্যবহারকারীর অবজেক্টের একমাত্র রেফারেন্স সরিয়ে দেয়। পরিবর্তে এটি যে কোনও / সমস্ত এসএমপি ওয়েকম্যাপস (আবর্জনা সংগ্রহের মাধ্যমে) থেকে এসএমপি লিঙ্কটি পরিষ্কার করে দেবে যেমন ব্যবহারকারী অবজেক্ট ছাড়া এর কোনও এসএমপি লিংকের অ্যাক্সেসের কোনও উপায় নেই।
... উদাহরণ সহকারে চালিয়ে, আমি ব্যবহারকারীর বিলটি মুছুন এবং তারপরে তিনি যে এসএমপিগুলির সাথে যুক্ত ছিলেন তার লিঙ্কগুলি মুদ্রণ করব:
আলাদাভাবে এসএমপি লিঙ্কটি আলাদাভাবে মুছতে কোনও অতিরিক্ত কোডের প্রয়োজন নেই এবং বিদ্যমান কোডটি কোনওভাবেই এই বৈশিষ্ট্যটি সংশোধন করা হয়নি।
WeakMaps এর সাথে / ছাড়া এই বৈশিষ্ট্যটি যুক্ত করার অন্য কোনও উপায় থাকলে দয়া করে বিনা দ্বিধায় মন্তব্য করুন।