কম্পিউটার

এক মা ও দুই ছেলের গল্প:সুইফটে ভ্যালু টাইপ বনাম রেফারেন্স টাইপ

সুইফ্ট একজন মা? এবং এর দুটি ছেলে আছে?-

  • মানের প্রকার ??‍♀️
  • রেফারেন্স টাইপ?‍♂️

কিন্তু তাদের বৈশিষ্ট্য কি?‍♂️

তারা কি একে অপরের সাথে একই বা বিপরীত আচরণ করে? ?‍♂️

সুইফ্ট হল একটি মাল্টি-প্যারাডাইম প্রোগ্রামিং ল্যাঙ্গুয়েজ যা Apple দ্বারা iOS, macOS, watchOS, tvOS, Linux, এবং z/OS এর জন্য তৈরি করা হয়েছে।?

অন্যান্য অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষার মতোই, সুইফটের বিল্ডিং ব্লক হিসাবে ক্লাস রয়েছে যা পদ্ধতি, বৈশিষ্ট্য, ইনিশিয়ালাইজারকে সংজ্ঞায়িত করতে পারে এবং প্রোটোকল, উত্তরাধিকার এবং পলিমরফিজম সমর্থন করতে পারে।?

কিন্তু, অপেক্ষা করুন অপেক্ষা করুন…???

সুইফটেরও স্ট্রাকট রয়েছে এবং এটি পদ্ধতি, বৈশিষ্ট্য, ইনিশিয়ালাইজারকে সংজ্ঞায়িত করতে পারে এবং উত্তরাধিকারের শুধুমাত্র একটি ব্যতিক্রম সহ প্রোটোকলের সাথে সামঞ্জস্য করতে পারে।?

কি? এখন আমি বিভ্রান্ত!!! ???

এখন আপনার বিভ্রান্তি মসলা করা যাক:স্ট্রাকটগুলি শুধুমাত্র সুইফটের মান প্রকার নয়। Tuples এবং enums এছাড়াও মান ধরনের হয়. রেফারেন্স টাইপ হিসাবে ক্লাসগুলিও একমাত্র ব্যবহৃত হয় না। ফাংশন এবং ক্লোজারগুলিও রেফারেন্স প্রকার। কিন্তু স্বস্তির চিহ্ন হিসাবে, আমরা অন্তত এই ধরনের ব্যবহারের প্রাথমিক ফোকাস এবং বিশেষীকরণ জানি।?

তাই এই বিন্দু পর্যন্ত, স্ট্রাকট এবং ক্লাসের ব্যবহার নিয়ে আমাদের শুধুমাত্র একটি বড় বিভ্রান্তি বাকি আছে।?

তো, চলুন ঘুরে আসা বিভ্রান্তিগুলো মুছে ফেলি।?‍♂️

স্টোরেজ অবস্থান

তিন ধরনের স্টোরেজ পাওয়া যায়:

  • নিবন্ধন?
  • স্ট্যাক ☄️
  • গাদা?

যেসব বস্তুর আয়ু কম থাকে সেগুলো রেজিস্টার বা স্ট্যাকের মধ্যে সংরক্ষিত থাকে এবং যেগুলোর আয়ুষ্কাল বেশি থাকে সেগুলো স্তূপের ভিতরে সংরক্ষণ করা হয়।?

একটি মান টাইপ স্ট্যাকে বরাদ্দ করা মেমরিতে এর বিষয়বস্তু সংরক্ষণ করে, তাই আমরা বলতে পারি সুইফটের স্ট্যাকের মধ্যে মান প্রকারগুলি বরাদ্দ করা হয়েছে। ?

কিন্তু মূল্যের ধরন সম্পর্কে একটি সাধারণ ভুল ধারণা আছে, আপনি কি শুনেছেন?‍♂️

ভুল ধারণাটি হল যে বেশিরভাগ লোক মনে করে মান প্রকারগুলি সর্বদা স্ট্যাকের মধ্যে সংরক্ষণ করা হয়৷

❌❌ এক মিনিট অপেক্ষা করুন—এটা সবসময় হয় না। ❌❌

মান প্রকারগুলি স্ট্যাকের ভিতরে সংরক্ষণ করা যেতে পারে যখন সেগুলি হয় অস্থায়ী বা স্থানীয় ভেরিয়েবল হয়। কিন্তু যদি একটি মানের প্রকার একটি রেফারেন্স টাইপের ভিতরে থাকে?

এই অবস্থায়, এটি গাদা মেমরির ভিতরে সংরক্ষণ করা যেতে পারে। ?

বাহ...এটা দারুণ!!!?

সুতরাং মূল্যের ধরনগুলি তাদের জীবনকালের উপর নির্ভর করে রেজিস্টার, স্ট্যাক বা স্তূপের ভিতরে সংরক্ষণ করা যেতে পারে, সেগুলি স্বল্পস্থায়ী বা দীর্ঘজীবী কিনা। যদি এটি একটি স্থানীয় ভেরিয়েবল হয় তবে এটি স্ট্যাকের ভিতরে থাকতে পারে এবং যদি এটি ক্লাসের একটি অংশ হয় তবে এটি হিপ মেমরিতেও থাকতে পারে।✅

অন্যদিকে, রেফারেন্স টাইপ হিপ মেমরিতে বরাদ্দ করা মেমরিতে এর বিষয়বস্তু সংরক্ষণ করে এবং ভেরিয়েবলটি শুধুমাত্র সেই মেমরি অবস্থানের একটি রেফারেন্স রাখে যেখানে প্রকৃত তথ্য সংরক্ষণ করা হয়েছে। ??

রেফারেন্স টাইপের জন্য এটা কিভাবে কাজ করে?

তাই রেফারেন্স টাইপের জন্য, এটি একটি সাধারণ পরিস্থিতি যখন একই মেমরি অবস্থানের রেফারেন্স ধারণ করে বেশ কয়েকটি ভেরিয়েবল থাকতে পারে৷⚔️

যখন একটি ভ্যালু টাইপ ইন্সট্যান্স একটি ভেরিয়েবলে অ্যাসাইন করা হয় বা কোনও ফাংশনে পাস করা হয়, ইনস্ট্যান্সটি কপি করে সেই ভেরিয়েবলে অ্যাসাইন করা হয়। কিন্তু রেফারেন্স টাইপের সাথে, শুধুমাত্র রেফারেন্স কপি করা হয় এবং নতুন ভেরিয়েবল একই মেমরি অবস্থানের একই রেফারেন্স ধারণ করে। ?

পরিবর্তনশীলতার ক্ষেত্রে পার্থক্য

একটি ভেরিয়েবলের জন্য দুটি অবস্থা থাকতে পারে:

  • ?‍♀️পরিবর্তনযোগ্য?‍♀
  • ?️‍♂️ অপরিবর্তনীয় ?️‍♂️

যদি একটি মান ধরনের উদাহরণ একটি অপরিবর্তনীয় ভেরিয়েবলের জন্য বরাদ্দ করা হয়, তাহলে উদাহরণটিও অপরিবর্তনীয় হয়ে যায়। ফলস্বরূপ, আমরা সেই উদাহরণে কোনো পরিবর্তন করতে পারি না।?‍♂️

যদি একটি মান টাইপ ইনস্ট্যান্স একটি মিউটেবল ভেরিয়েবলের জন্য বরাদ্দ করা হয়, তবে শুধুমাত্র এটি ইনস্ট্যান্সটিকে পরিবর্তনযোগ্য করে তোলে। ?‍♂️

কিন্তু রেফারেন্স ধরনের জন্য জিনিস সম্পূর্ণ ভিন্ন. পরিবর্তনশীল এবং দৃষ্টান্ত এটি বরাদ্দ করা হয় সম্পূর্ণ ভিন্ন. যদি আমরা একটি অপরিবর্তনীয় ভেরিয়েবল ঘোষণা করি যেটি একটি শ্রেণির একটি রেফারেন্স ধারণ করে, এর অর্থ হল এটি যে রেফারেন্সটি ধরে রেখেছে তা কখনই পরিবর্তন হবে না। আমরা রেফারেন্স পরিবর্তন করতে পারি না এবং এটি সর্বদা একই রেফারেন্সের দিকে নির্দেশ করবে। ?

কাঠামোগত প্রকার

কাঠামোগত প্রকারের মানগুলি তাদের বৈশিষ্ট্য বা উপাদানগুলির পরিপ্রেক্ষিতে সমতার জন্য তুলনা করা হয়। আমরা বলতে পারি একটি মান টাইপ অন্যটির সমান যদি এবং শুধুমাত্র যদি সংশ্লিষ্ট সমস্ত বৈশিষ্ট্য সমান হয়। ???

উম…অনেক কড়া শব্দ…তুমি কি বলতে চাচ্ছ???

ধরা যাক, আমাদের একজন ব্যক্তি আছে মান টাইপ যাতে firstName-এর মতো বৈশিষ্ট্য থাকে এবং শেষ নাম৷

struct Person {
   var firstName: String
   var lastName: String
}

var person1 = Person(firstName: "foo", lastName: "bar")

var person2 = Person(firstName: "foo", lastName: "bar")

এখানে উভয়ই person1 &person2 দৃষ্টান্তগুলি firstName-এর জন্য একই মান ধারণ করছে ("foo") এবং শেষ নাম (“বার”) তাই আমাদের বোধগম্যতা অনুসারে, আমরা বলতে পারি যে দুটি দৃষ্টান্ত একে অপরের সমান কারণ তাদের বৈশিষ্ট্যগুলি (firstName &শেষ নাম ) একই মান ধারণ করে।

তবে এটি শুধুমাত্র এর মধ্যেই সীমাবদ্ধ নয়:ভবিষ্যতে, যে কোনো দুই ব্যক্তি firstName-এর জন্য একই মান ধারণ করবেন &শেষ নাম একে অপরের সমান হবে।

সুতরাং এই বিন্দু পর্যন্ত আমাদের উপলব্ধি অনুযায়ী, আমরা বলতে পারি যে:

মান প্রকারের কোনো পরিচয় নেই, তাই সেগুলির কোনো উল্লেখ থাকতে পারে না। মূল্যের ধরন মুখহীন।?

কি? আপনি এটা কিভাবে বলতে পারেন????

var myAge: Int = 21
var friendAge: Int = 21

উভয়ই myAge &বন্ধু বয়স মান 21 সহ পূর্ণসংখ্যার ধরন পরিবর্তনশীল।

আমরা কি একটিকে অন্যটির থেকে আলাদা করতে পারি? ?

না, কারণ তারা একই মান ধরে রেখেছে।?

মান 21 সহ একটি পূর্ণসংখ্যা ভেরিয়েবল অন্য পূর্ণসংখ্যা ভেরিয়েবল থেকে আলাদা হতে পারে না যার মান 21ও রয়েছে। যতটা সহজ।???

একটি পরিচয় না থাকা মূল্যের ধরনগুলিকে আরও একটি সুবিধা দেয়:আপনি যদি ব্যবহারিকভাবে চিন্তা করেন, তাহলে আপনি কল্পনা করতে পারেন যদি আপনার একটি পরিচয় না থাকে তবে একই বৈশিষ্ট্যযুক্ত কেউ আপনাকে প্রতিস্থাপন বা প্রতিস্থাপন করতে পারে। ???

আমরা মানুষ হিসাবে আমাদের জন্য একই চিন্তা করতে পারেন. যদি আমার কোনো পরিচয় না থাকে তাহলে একই বৈশিষ্ট্যের কেউ আমাকে প্রতিস্থাপন করতে পারবে??? এটা আমাদের জন্য ভাল যে আমাদের একটি পরিচয় আছে অন্যথায় এটি আমাদের অস্তিত্বের জন্য একটি বড় ঝুঁকি হবে।?

কিন্তু মান ধরনের জন্য, তাদের একটি পরিচয় নেই এবং এটি তাদের জন্য একটি সুবিধা। ?

মূল্যের প্রকারগুলি ব্যবহার করার সুবিধাগুলি কী কী?

? কোন রেস শর্ত এবং অচলাবস্থা নেই:?

মাল্টি-থ্রেডেড পরিবেশে মান প্রকারের জন্য, একটি থ্রেডের পক্ষে অন্য থ্রেড ব্যবহার করার সময় উদাহরণের অবস্থা পরিবর্তন করা অসম্ভব। তাই আমরা বলতে পারি যে কোন রেসের অবস্থা বা অচলাবস্থা থাকবে না।

⚔️ কোন রিটেইন সাইকেল নেই:⚔️

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

?‍?‍?‍? স্বয়ংক্রিয় রেফারেন্স গণনা:?‍?‍?‍?

রেফারেন্স টাইপের জন্য, সুইফট সমস্ত লাইভ বা সক্রিয় বস্তুর ট্র্যাক রাখতে স্বয়ংক্রিয় রেফারেন্স কাউন্টিং ব্যবহার করে এবং দৃষ্টান্তটি কেবল তখনই ডিলোকেট করে যখন এটিতে আর কোন শক্তিশালী রেফারেন্স না থাকে। আমরা যদি একটু চিন্তা করি, তাহলে আমরা বলতে পারি যে এটি একটি ভারী অপারেশন কারণ সুইফট রানটাইমকে সবসময় বস্তুর ট্র্যাক রাখতে হয়। কিন্তু যেহেতু মানের প্রকারগুলি স্ট্যাকের মধ্যে বরাদ্দ করা হয়েছে, এটির জন্য ARC এর প্রয়োজন নেই৷ তাই এটা সস্তা এবং দ্রুত??.

কিন্তু অপেক্ষা করুন...এটি কিভাবে অ্যারে, ডিকশনারি এবং স্ট্রিং এর জন্য মেমরি পরিচালনা করে?

যেহেতু আমরা কম্পাইলের সময় অ্যারে, ডিকশনারি এবং স্ট্রিংয়ের প্রকৃত আকার কী হবে তা জানতে পারি না, তাই কম্পাইলের সময় তাদের বরাদ্দ করার সুযোগ নেই। যদিও সেগুলি অভ্যন্তরীণভাবে মান প্রকার, তবে সেগুলি স্ট্যাকের মধ্যে বরাদ্দ করা যায় না৷ তাদের হিপ মেমরিতে বরাদ্দ করা দরকার এবং এটি পরিচালনা করার জন্য, সুইফট লিখনের উপর অনুলিপি নিয়ে আসে .?

কিন্তু এটা কি??

যখন আমরা বলি একটি উদাহরণ অন্য উদাহরণের একটি অনুলিপি, এর প্রকৃত অর্থ হল তারা একই, যে তারা একই মান ধারণ করে। কিন্তু সুইফটে, উপরের এই ধরনের (অ্যারে, ডিকশনারী, স্ট্রিং, ইত্যাদি) জন্য একটি প্রকৃত কপি শুধুমাত্র তখনই হিপে তৈরি করা হয়েছে যখন একটি উদাহরণ পরিবর্তন করা হয়। একে বলা হয় মান প্রকারের জন্য পারফরম্যান্স অপ্টিমাইজেশান টেকনিক।???

উপসংহার

কোন কঠিন নিয়ম নেই যা সংজ্ঞায়িত করে কখন মান টাইপ ব্যবহার করতে হবে এবং কখন রেফারেন্স টাইপ ব্যবহার করতে হবে। রেফারেন্স প্রকারের তুলনায় মান প্রকারের কিছু অনন্য সুবিধা রয়েছে এবং এর বিপরীতে। তারা উভয়ই তাদের নিজস্ব উপায়ে অনন্য। এটি সত্যিই আপনার প্রয়োজনীয়তা এবং আপনি কি অর্জন করার চেষ্টা করছেন তার উপর নির্ভর করে। আপনার কোডের শব্দার্থবিদ্যা আপনার জানা উচিত কারণ আপনি শুধুমাত্র আপনার কোডটি সবচেয়ে ভাল জানেন, তাই এটি বেছে নেওয়া আপনার উপর নির্ভর করে। আপনার সম্পূর্ণ স্বাধীনতা আছে।

তাই মান টাইপ বনাম রেফারেন্স টাইপ নিয়ে ঝগড়া না করে, বুদ্ধিমানের সাথে ব্যবহার করুন।

??? চিয়ার্স!!! পড়ার জন্য আপনাকে ধন্যবাদ!! ???

✅✅✅আপনি আমাকে -এ খুঁজে পেতে পারেন টুইটার .✅✅✅


  1. C# এ মানের প্রকার এবং রেফারেন্স প্রকারগুলি ব্যাখ্যা করুন এবং বৈসাদৃশ্য করুন

  2. C# এ ডেটা প্রকার, মান প্রকার এবং রেফারেন্স প্রকারগুলি কী কী?

  3. পাইথনে একটি অভিধানে একটি কী এর মান কিভাবে আপডেট করবেন?

  4. আসুন জেনেরিক্স এবং সুইফটের যেকোন প্রকারের মধ্যে পার্থক্যগুলি ব্যবচ্ছেদ করি