সিলযুক্ত বৈশিষ্ট্য কী?


332

সিলযুক্ত ক্লাসগুলি 'প্রোগ্রামিং ইন স্ক্যালায়' বর্ণিত হয়েছে তবে সিল করা বৈশিষ্টগুলি এটি নয়। সিল করা বৈশিষ্ট সম্পর্কে আমি আরও কোথায় জানতে পারি?

আমি জানতে চাই, একটি সিলযুক্ত বৈশিষ্ট্য যদি সিল করা শ্রেণীর মতো হয়? বা, যদি না হয়, পার্থক্য কি? কখন সিল করা বৈশিষ্ট ব্যবহার করা ভাল (এবং কখন নয়)?

উত্তর:


472

একটি sealedবৈশিষ্ট্য কেবলমাত্র তার ঘোষণার মতো একই ফাইলে বাড়ানো যেতে পারে।

এগুলি প্রায়শই বিকল্প সরবরাহ করতে ব্যবহৃত হয় enums। যেহেতু সেগুলি কেবলমাত্র একটি ফাইলে প্রসারিত হতে পারে, তাই সংকলক প্রতিটি সম্ভাব্য সাব টাইপগুলি জানে এবং এটি সম্পর্কে যুক্তিযুক্ত হতে পারে।

উদাহরণস্বরূপ:

sealed trait Answer
case object Yes extends Answer
case object No extends Answer

সংমিশ্রণটি একটি ম্যাচটি সম্পূর্ণরূপে না নিলে সতর্কতা প্রেরণ করবে:

scala> val x: Answer = Yes
x: Answer = Yes

scala> x match {
     |   case No => println("No")
     | }
<console>:12: warning: match is not exhaustive!
missing combination            Yes

সুতরাং সম্ভাব্য সাব টাইপের সংখ্যা সীমাবদ্ধ এবং আগে থেকেই জানা থাকলে আপনার সিলযুক্ত বৈশিষ্ট্য (বা সিলযুক্ত বিমূর্ত শ্রেণি) ব্যবহার করা উচিত। আরও উদাহরণের জন্য আপনি তালিকা এবং বিকল্প বাস্তবায়নের উপর নজর রাখতে পারেন ।


112
এখানে এলোমেলোভাবে আসতে এবং স্কালায় জাভা এনামকে কীভাবে প্রতিস্থাপন করা যায় তা বুঝতে আমার ছয় মাস লেগেছিল।
sscarduzio

খুব সুন্দর ! এবং কেবল সীমাবদ্ধ এবং আগাম জ্ঞাত নয় তবে এটি একটি সীমাবদ্ধ (সিল করা?) প্রসঙ্গের অংশ যেখানে হ্যাঁয়ের মতো সমস্ত সম্ভাব্য সাব-টাইপগুলি চেক করতে বুদ্ধি করে? না, এমনকি | বিজোড় ইত্যাদি ...
মারিও ডি সা ভেরা

90

একটি সিলযুক্ত বৈশিষ্ট্য কি সিল করা শ্রেণীর মতো?

যতদূর sealedযায়, হ্যাঁ তারা অবশ্যই traitএবং এর মধ্যে স্বাভাবিক পার্থক্য ভাগ করে class

বা, যদি না হয়, পার্থক্য কি?

তর্ক করা।

কখন সিল করা বৈশিষ্ট ব্যবহার করা ভাল (এবং কখন নয়)?

আপনার যদি একটি থাকে sealed class X, তবে আপনাকে Xকোনও সাবক্লাসের জন্যও পরীক্ষা করতে হবে । sealed abstract class Xবা একই সত্য হয় না sealed trait X। সুতরাং আপনি এটি করতে পারেন sealed abstract class X, তবে সে উপায়টি কেবলমাত্র traitএবং সামান্য সুবিধার চেয়ে আরও বেশি ভার্বোজ ।

abstract classওভার এ ব্যবহারের প্রধান সুবিধা traitহ'ল এটি প্যারামিটারগুলি গ্রহণ করতে পারে। টাইপ ক্লাস ব্যবহার করার সময় সেই সুবিধাটি বিশেষভাবে প্রাসঙ্গিক। ধরা যাক আপনি একটি সাজানো গাছ তৈরি করতে চান, উদাহরণস্বরূপ। আপনি এটি লিখতে পারেন:

sealed abstract class Tree[T : Ordering]

তবে আপনি এটি করতে পারবেন না:

sealed trait Tree[T : Ordering]

যেহেতু প্রসঙ্গের সীমাগুলি (এবং দেখুন সীমাগুলি) অন্তর্নিহিত পরামিতিগুলির সাথে প্রয়োগ করা হয়। বৈশিষ্ট্যগুলি পরামিতিগুলি গ্রহণ করতে পারে না তা প্রদত্ত, আপনি এটি করতে পারবেন না।

ব্যক্তিগতভাবে, আমি এটি পছন্দ করি sealed traitএবং ব্যবহার করি যদি না কোনও নির্দিষ্ট কারণ আমাকে এ ব্যবহার করে sealed abstract class। এবং আমি সূক্ষ্ম কারণে কথা বলছি না, তবে মুখের কারণগুলির কারণে আপনি উপেক্ষা করতে পারবেন না, যেমন টাইপ ক্লাস ব্যবহার করা।


"যেহেতু প্রসঙ্গের সীমাগুলি (এবং দেখার সীমাগুলি) অন্তর্নিহিত পরামিতিগুলির সাথে প্রয়োগ করা হয়" " - আপনি কি এই বিস্তারিত বলতে পারেন?
রুবি

@ রুবি - দেরি করা জবাব, তবে আপনার বা অন্য কেউ আগ্রহী হলে: প্রসঙ্গের বাউন্ডিং ( [A: F]) প্রকরণের সীমাবদ্ধতার মতো কাজ করে না। বরং এটি সিনট্যাকটিক চিনি যা F[A]সুযোগের অন্তর্ভুক্তির দাবি করে । এটি সাধারণত টাইপক্লাসের উদাহরণগুলি এমনভাবে উপস্থাপন করতে ব্যবহৃত হয় যা অন্তর্নিহিত প্যারামিটার ( (implicit fa: F[A])) এর চেয়ে কিছুটা পরিশ্রুত এবং পড়ার পক্ষে সহজ , তবে এটি এখনও হুডের নীচে ঠিক একইভাবে কাজ করে, এবং ড্যানিয়েল দেখিয়েছে যে, বৈশিষ্ট্যগুলি করায় না যে।
মিরিকান

54

থেকে দৈনন্দিন-Scala ব্লগ :

যখন কোনও বৈশিষ্ট্য "সিল করা হয়" তখন তার সমস্ত সাবক্লাস একই ফাইলের মধ্যে ঘোষণা করা হয় এবং এটি সাবক্লাসের সীমাবদ্ধ করে দেয় যা নির্দিষ্ট সংকলক পরীক্ষার অনুমতি দেয়।


ধন্যবাদ. "এর সমস্ত সাবক্লাস" এর সাথে এটি ক্লাস এবং বৈশিষ্ট্যগুলি বোঝায়?
জন থ্রিপউড

@ জন - আমি চেষ্টা করিনি, তবে আমি ক্লাস সন্দেহ করি। সিলিংয়ের বিষয়টি হ'ল সমস্ত কিছু সেই উত্স এককের মধ্যে সংজ্ঞায়িত করা হয়েছে
ব্রায়ান অ্যাগনিউ

1
@ জন থ্রিপউড: ক্লাস, বৈশিষ্ট্য এবং অবজেক্ট। বেশিরভাগ সময়, স্কালায়, "শ্রেণি" শব্দটি ক্লাস, বৈশিষ্ট্য এবং অবজেক্টকে বোঝাতে ব্যবহৃত হয়। তাদের মধ্যে নির্দিষ্ট পার্থক্য সম্পর্কে কথা বলার সময়, এর অর্থ কেবল ক্লাস। এসএলএস ক্লাস এবং বৈশিষ্ট্য উভয়ই উল্লেখ করতে "টেমপ্লেট" শব্দটি ব্যবহার করে, তবে এই শব্দটি এসএলএসের বাইরে খুব বেশি ব্যবহৃত হয় না, এবং এমন কোনও শব্দ নেই যা তিনটি শ্রেণি, বৈশিষ্ট্য এবং অবজেক্টকে অন্তর্ভুক্ত করে।
Jörg ডব্লু মিটাগ

30

এছাড়াও আমি আপনাকে নির্দিষ্টকরণগুলিতে নির্দেশ করার প্রয়োজন অনুভব করছি:

সিল মোদি ফাই Er বর্গ ডি ফাই nitions ক্ষেত্রে প্রযোজ্য। একটি সিল বর্গ সরাসরি উত্তরাধিকারসূত্রে নাও হতে পারে, যদি inheriting টেমপ্লেট ডি ফাই উত্তরাধিকারসূত্রে শ্রেণী হিসেবে একই উৎস ফাইলে নেদ ছাড়া। তবে সিল করা শ্রেণীর সাবক্লাসগুলি যে কোনও জায়গায় উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে।

- এম। ওডারস্কি স্কালা ভাষার স্পেসিফিকেশন, সংস্করণ 2.8। অনলাইন, সেপ্টেম্বর, 2013।


7

সংক্ষেপে:

  • সিলযুক্ত বৈশিষ্ট্যগুলি কেবল একই ফাইলটিতে বাড়ানো যেতে পারে
  • এটি তালিকাবদ্ধ করুন কম্পাইলারকে সহজেই সমস্ত সম্ভাব্য সাব টাইপগুলি জানতে দেয়
  • সম্ভাব্য সাব টাইপের সংখ্যা সীমাবদ্ধ এবং আগে থেকে জানা গেলে সিল করা বৈশিষ্টগুলি ব্যবহার করুন
  • জাভাতে এনাম জাতীয় কিছু তৈরি করার একটি উপায়
  • বীজগণিত তথ্য প্রকার (ADTs) সংজ্ঞায়িত করতে সহায়তা করুন

এবং আরও তথ্যের জন্য স্কালায় সিল করা বৈশিষ্টগুলি সম্পর্কে সমস্ত কিছু

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.