কার্ল এর উত্তর ভাল। এখানে একটি অতিরিক্ত ব্যবহার রয়েছে যা আমি অন্য কারও উল্লেখ করেছেন বলে মনে করি না। ধরণের
if E then A else B
একটি টাইপ যে ধরনের সব মান অন্তর্ভুক্ত হওয়া উচিত A
এবং ধরনের সব মান B
। ধরণ যদি B
হয় Nothing
, তাহলে ধরণ if
মত প্রকাশের ধরনের হতে পারে A
। আমি প্রায়শই একটি রুটিন ঘোষণা করব
def unreachable( s:String ) : Nothing = throw new AssertionError("Unreachable "+s)
এই কোডটি পৌঁছানোর আশা করা হয় না তা বলার জন্য। যেহেতু এর ধরণ Nothing
, ফলাফলের ধরণের প্রভাব ছাড়াই unreachable(s)
এখন যে কোনও if
বা (প্রায়শই) ব্যবহৃত switch
হতে পারে। উদাহরণ স্বরূপ
val colour : Colour := switch state of
BLACK_TO_MOVE: BLACK
WHITE_TO_MOVE: WHITE
default: unreachable("Bad state")
স্কালার এ জাতীয় কিছু নয়।
Nothing
(কার্লের উত্তরে উল্লিখিত) এর জন্য আরেকটি ব্যবহারের ক্ষেত্র হ'ল তালিকা [কিছুই নয়] হ'ল তালিকার ধরণ যার প্রত্যেকের সদস্যের কাছে কিছুই নেই টাইপ করা। সুতরাং এটি খালি তালিকার ধরণ হতে পারে।
মূল সম্পত্তি Nothing
যে এই ব্যবহারের ক্ষেত্রে কাজ করে তোলে না এটা কোন মান --although Scala এ, উদাহরণস্বরূপ, এটি মান এটা এটি প্রত্যেক অন্যান্য ধরনের উপপ্রকার হয় আছে কোন রয়েছে।
মনে করুন আপনার কাছে এমন একটি ভাষা রয়েছে যেখানে প্রতিটি ধরণের একই মান থাকে - আসুন এটি কল করুন ()
। এই জাতীয় ভাষায় ইউনিট টাইপ, যার ()
একমাত্র মান হিসাবে এটি প্রতিটি ধরণের একটি উপ টাইপ হতে পারে। এটি ওপি বলতে বোঝায় যে এটি নীচের ধরণের নয়; ওপি স্পষ্ট ছিল যে নীচের ধরণের কোনও মান নেই। তবে এটি যেহেতু এটি একটি প্রকার যা প্রতিটি ধরণের একটি উপপ্রকার, এটি নীচের প্রকারের মতো একই ভূমিকা নিতে পারে।
হাস্কেল কিছুটা আলাদাভাবে কাজ করে। হাসকেলে, একটি অভিব্যক্তি যা কখনই কোনও মান দেয় না টাইপ স্কিম থাকতে পারে forall a.a
। এই ধরণের স্কিমের উদাহরণটি অন্য যে কোনও ধরণের সাথে একত্রিত হবে, সুতরাং এটি কার্যকরভাবে নীচের ধরণের হিসাবে কাজ করে, যদিও (মানক) হাস্কেলের সাব টাইপিংয়ের কোনও ধারণা নেই। উদাহরণস্বরূপ, error
স্ট্যান্ডার্ড প্রিলিওড থেকে ফাংশনটিতে টাইপ স্কিম রয়েছে forall a. [Char] -> a
। সুতরাং আপনি লিখতে পারেন
if E then A else error ""
এবং যে A
কোনও অভিব্যক্তির জন্য প্রকাশের ধরণ একই ধরণের হবে A
।
হাস্কেলের খালি তালিকায় টাইপ স্কিম রয়েছে forall a. [a]
। যদি A
এমন কোনও অভিব্যক্তি হয় যার प्रकार তালিকার ধরণ, তবে
if E then A else []
একই ধরণের একটি এক্সপ্রেশন A
।
void
ডেটা স্পষ্টভাবে সংজ্ঞায়িত করতে পারে না ...