আপনি কি ট্রেলিয়ান (সত্য, মিথ্যা, ??) এর কোনও ব্যবহার দেখতে পাবেন [বন্ধ]


22

কখনও কখনও আমার একটি ফাংশন থাকে যা সত্য বা মিথ্যা ফিরে পাওয়া উচিত। তবে কখনও কখনও তিনটি সম্ভাব্য মান আরও বোধগম্য হয়।

কিছু ভাষায় এইগুলি ক্ষেত্রে পূর্ণসংখ্যা বা ব্যতিক্রম সহ পরিচালিত হবে।

উদাহরণস্বরূপ আপনি কোনও ব্যবহারকারীর বয়স 18 বছরের বেশি হলে পরিচালনা করতে চান। এবং আপনার মত একটি ফাংশন আছে।

if(user.isAdult(country_code)){
     //Go On
}else{
     // Block access or do nothing
}

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

switch(user.isAdult()){
    case true:
        // go on
        break;
    case undetermined:
        //Inform user birthday is incomplete
    case false:
        //Block access
}

যেমনটি আমি বলেছিলাম যে আমরা ব্যতিক্রম এবং আইটি দিয়ে এটি পরিচালনা করতে পারি তবে আমি কিছু ঘরোয়া সংজ্ঞায়িত ধ্রুবক ব্যবহার না করে ভাষার সত্য, মিথ্যা, নির্ধারিত এম্বেড থাকা আমার পক্ষে বেশ সেক্সি লাগবে।


15
বাধ্যতামূলক টিডিডব্লিউটিএফ লিঙ্ক: thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx :)
অ্যাডাম

2
@ আনা লিয়ার: অভিশাপ, আপনি আমাকে এতে মারধর করেছেন। ^^
গ্যাবলিন

3
গ্যাবলিন: জঘন্য, এমনকি আপনি আমাকে আনা সম্পর্কে অভিযোগ করতে মারলেন।
ব্যবহারকারী 281377

1
উঃ, আমিও টি, এফ, এফএনএফ পেতে চেয়েছিলাম! মুঠির কাঁপুন
মাইক এম।

4
@ গ্যাবলিন, @ ইম্মকিউ, @ মাইক এম .: দুঃখিত। :)
অ্যাডাম শিখুন

উত্তর:


33

এটি আপনার ভাষা অনুসারে এনাম, পূর্ণসংখ্যা, চিহ্ন (যেমন লিস্প, রুবি), অবিচ্ছিন্ন প্রকারগুলি (অনির্দিষ্ট অবস্থা হিসাবে নাল ব্যবহার করুন), বিকল্প ধরণের (যেমন, এমএল) বা কিছু অনুরূপ নির্মাণের সাহায্যে পরিচালনা করা যেতে পারে।

সুতরাং আপনার উদাহরণ এবং যুক্তিটি দৃ is় হলেও আমি এটি বিকাশের ভাষা বৈশিষ্ট্যের অগ্রাধিকার তালিকার মধ্যে দেখতে পাচ্ছি না।


সি / সি ++ এ নাল মিথ্যা সমান বলে মনে করা হয়। এই ক্ষেত্রে আপনাকে ফিরে আসতে হবে -1। আমি মনে করি নির্ধারিত রাজ্যটি বেশ ঘন ঘন তবে সবসময় আলাদা আচরণ করা হয় কারণ এই বাক্য গঠনটি আসলেই বিদ্যমান নয়। জাভাতে একটি বুলিয়ান ফাংশন বুলিয়ান ফাংশনটির জন্য সত্য বা মিথ্যা ব্যতীত অন্য কোনও কিছুই ফিরিয়ে দিতে পারে না। সুতরাং আপনাকে ফেরত মানটির সাথে একটি ভিন্ন ধরণের এবং ডকুমেন্ট ব্যবহার করতে বাধ্য করা হবে।
Loïc Faure-Lacroix

@ সিবিয়াম - যেখানে উপযুক্ত সেখানে ভিন্ন ধরণের ব্যবহারে কোনও ভুল নেই । আমি যেমন বলেছি যে আমি ট্রিনিয়ার ধরণের জন্য একটি আর্গুমেন্ট দেখতে পাচ্ছি, তবে শীঘ্রই এটি বিদ্যমান ভাষাগুলিতে যেকোন সময় যুক্ত হতে দেখছি না।
ক্রিসএফ

6
@ সিবিয়াম: জাভাতে আপনি একটি বুলিয়ান ফিরিয়ে দিতে পারেন, যা হতে পারে null। সি / সি ++ এ আপনি একটি এনাম ফেরত দিতে পারেন।
ম্যাকনিল

এটা পাগলামি!
Loïc Faure-Lacroix

2
@ ম্যাকনিল হয়ত স্পার্টা?
সোকোকিট

5

এটি প্রয়োজনীয় যেখানে এমন কোনও মামলা আমি দেখিনি। আপনি যে উদাহরণ দিয়েছেন, সেই ক্ষেত্রটি যদি প্রয়োজনীয় হয় তবে এটি অন্য কোথাও বৈধ হওয়া উচিত ছিল। isAdult()সহজাতভাবে দ্বি-রাষ্ট্র পদ্ধতি: আপনি হয় হয় বা আপনি নন। এটি হ্যান্ডেল করতে পারে না এমন ডেটার মুখোমুখি হলে এটি মিথ্যা ফিরিয়ে আনার দরকার নেই। এই ক্ষেত্রে:

switch(user.isAdult()){
   case true:
      // go on
      break;
   default:
      // Block access.
}

2
যদি ডেটা অবৈধ হয় তবে এটি ব্যবহারকারীকে এটি ঠিক করতে জিজ্ঞাসা করতে পারে যা কম বয়সী হওয়ার চেয়ে আলাদা যেখানে আপনি সেই ব্যক্তিকে নতুন যুগে ইনপুট করতে বলেন না। এটি 2 ভিন্ন আচরণ। উদাহরণস্বরূপ কয়েকটি সামাজিক সাইট আপনাকে গোপনীয়তার জন্য অসম্পূর্ণ জন্মদিনের ইনপুট দেয়।
Loïc Faure-Lacroix

2
আমি মনে করি যে বৈধতা কোডের অন্য একটি অঞ্চল / বিভাগে করা উচিত। প্রথমে ডেটা বৈধ করুন এবং তারপরে এটি পরিচালনা করুন।
মাইকেল কে

1
@ সিবিয়াম: সাধারণভাবে, অ্যাপ্লিকেশনগুলি যখন প্রয়োজন হয় তখন হাফজার্ড ভিত্তিতে ডেটা চায় না। আপনি .isAdult()যদি ব্যবহারকারীকে নিজেই জিজ্ঞাসা করতে পারেন তবে এটি যদি আপনি চান তবে এটি আরও ভাল কাজ করবে।
ডেভিড থর্নলি

5

সত্য, মিথ্যা, অজানা

হ্যাঁ, না, সম্ভবত

সি # তে আপনি একটি নোলযোগ্য বুল ব্যবহার করতে পারেন (আপনি এখন আতঙ্কে ফিরে আসতে পারেন)

এমএস-এসকিউএল-তে আপনি একটি বিহীন বিট ক্ষেত্র (ডাইটো) ব্যবহার করতে পারেন


2
অবিচ্ছিন্ন বুলিয়ানগুলির সমস্যাটি নয় যে তাদের নাল রয়েছে, তেমনি বেশিরভাগ লোক (আমার অন্তর্ভুক্ত) ত্রি-মূল্যবান যুক্তি সম্পর্কে কিছুই জানেন না। কোনটি, প্রারম্ভিকদের জন্য: সায়েন্টোপিয়া.অর্গ.ব্লগস
ফ্রাঙ্ক শায়ারার

সত্য / মিথ্যা / কোনটিই নয়।
লেনার্ট রেজেব্রো

2
মজার বিষয় হ'ল, প্রচুর লোক বাইনারি, অক্টাল এবং হেক্স বোঝে, তবে তাদের মনকে ত্রিশের চারপাশে গুটিয়ে রাখতে পারে না। কেন এমন? একই জিনিস, কেবল তিনটি বেস ... এটি তিনটি মান যুক্তির সমস্যার সমাধান করবে।
মাইকেল কে

5
বেশিরভাগ লোকের মধ্যে কেবল একটি ভয় থাকে unknown
dan04

2

সি ++ এ, এটি কোনও রিটার্নবিহীন boolপ্রকারের সাহায্যে বা কোনও ব্যতিক্রম ছুঁড়ে দিয়ে পরিচালনা করা যায় । আপনি যদি তিন-মূল্যবান রিটার্ন টাইপ চান তবে একটি ব্যবহার করুন enum। এটি সেক্সি নয়, তবে এটি কাজ করে এবং আমাদের বাকী অংশের জন্য ভাষা জগাখিচুড়ি না করে আপনি এটি করতে আরও কী গুরুত্বপূর্ণ।

রয়ে bool-মূল্যবান তিনটি সমস্যার কারণ হবে হতে। আপনি কীভাবে পরিচালনা করবেন bool foo; ... if (foo)..., ধরে নিচ্ছেন fooযে তিনটি মানের কোনও মান থাকতে পারে? boolভেরিয়েবল থাকার সুবিধাগুলি রয়েছে যেগুলি যথাযথভাবে একটি fooএবং !fooসর্বদা সত্য। এটি প্রোগ্রামগুলি সম্পর্কে কারণকে সহায়তা করে।

লোকেরা সংখ্যার প্রক্রিয়াকরণে কী করেন তা যখন তারা সম্ভবত NaNমান পেতে পারে তা দেখুন Check এটা জটিল. আমি বরং সাধারণ বুলিয়ান প্রসেসিংয়ের জন্য এর সাথে যেতে হবে না।

আপনি যদি .isAdult()অপর্যাপ্ত তথ্য হ্যান্ডেল করতে চান তবে তা অভ্যন্তরীণভাবে এটি করুন এবং তারপরে হয় হয় trueবা ফিরে যান false। অন্যথায়, আপনি যতবার এটি ব্যবহার করবেন ততবার আপনাকে অন্য কিছু করার আগে রিটার্ন কোডটি পরীক্ষা করতে হবে এবং এটিকে পরিচালনা করার উপায় নিয়ে আসা উচিত। এর অর্থ হ'ল আপনাকে ডক্স পরীক্ষা করে দেখতে হবে যে কোনও ফাংশন আসলে এর নাম যা বলেছিল তা করেছে কিনা এবং এটি পাঠযোগ্যতার জন্য একটি বিপর্যয়।


2

ধারণাটি বেশ কার্যকর। ফিজি লজিক নামক অনিশ্চয়তার মোকাবিলায় পুরো ক্ষেত্র নিবেদিত রয়েছে ।

ভাগ্যক্রমে আমাদের প্রোগ্রামারদের জন্য, আপনি স্ট্যান্ডার্ড ভাষার বৈশিষ্ট্যগুলির সাথে अस्पष्ट যুক্তি প্রয়োগ করতে পারেন can

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

অনিশ্চিত হওয়ার অন্যান্য সমস্ত উপায় রয়েছে are এই জাতীয় প্রশ্নগুলির মধ্যে রয়েছে:

  • কাল কি বৃষ্টি হবে? এটি এখনও ঘটেনি, তাই কেউ জানতে পারে না - তবে আপনি একটি শিক্ষিত অনুমান করতে পারেন এবং সম্ভাবনাও দিতে পারেন।
  • বিটা পিক্টোরিস নক্ষত্রের সৌরজগতে কোনও গ্রহে একাধিক জীবন আছে? এটির একটি নির্দিষ্ট হ্যাঁ বা কোনও উত্তর নেই, তবে বর্তমানে আমরা তা বলতে পারি না what

এই প্রশ্নের অনেকগুলিই সম্ভাব্যতাগুলি 0.0 (মিথ্যা) থেকে 1.0 (সত্য) এর পরিসীমা ব্যবহার এবং ভাসমান পয়েন্ট গণিত প্রয়োগের সাথে মোকাবিলা করা যেতে পারে।

ডেভিড ই শ নামক একটি গণ্য রসায়নবিদ এবং কম্পিউটার বিজ্ঞানী এই জাতীয় জিনিসটি ওয়াল স্ট্রিটে প্রয়োগ করেছেন এবং বর্তমানে এটির মূল্য প্রায় আড়াই বিলিয়ন ডলার। হ্যাঁ, এটি দরকারী। :-)


1

বহু বছর আগে আমি কয়েকটি অ্যালগরিদম নিয়ে খেলেছি যা মানগুলিতে বিশ্বাস স্থাপনের জন্য বেরিয়ে এসেছিল। এক ধরনের মজা ছিল। শেষ পর্যন্ত আমি এটি থেকে কী অর্জন করেছি তা হ'ল বুলিয়ান প্রায়শই একটি স্বীকৃত ফিট। সত্যই এটি ট্রিলিয়ান সত্য / মিথ্যা / অন্যান্য মান হওয়া উচিত। পরীক্ষায় যা মনে হয়েছিল সেই সময়ে আমার জন্য "সেরা" কোডের দিকে নিয়ে গেছে। অভ্যন্তরীণভাবে ভেবেছিলাম যে আমরা যদি একইভাবে পুরানো পদ্ধতিতে কাজ করা ছেড়ে দিই ... তবে- আমি যেহেতু আঁকাবাঁকা করেছি এবং অন্য সবাই যা করে যা করেছি তা করেছি:


0

কেস বা স্যুইচ স্টেটমেন্টগুলি এর জন্য সূক্ষ্মভাবে কাজ করবে, যদিও স্যুইচটি স্বেচ্ছাসেবীভাবে ডিল করার জন্য ব্যবহার করে।

এছাড়াও, রুবিতে, 'শূন্য' কিছু পরিস্থিতিতে মিথ্যা হিসাবে প্রত্যাবর্তন করে, আপনি যদি সাম্যতা অপারেটর ব্যবহার করেন, nil == falseফিরে আসে false, যাতে আপনি রুবি ব্যবহার করতে পারেন nilটের্নারি যুক্তি পরিচালনা করতে।


0

আপনার ক্ষেত্রে অন্য একটি বিকল্প হতে পারে নিয়ন্ত্রণটিকে "বলুন না জিজ্ঞাসা করুন" প্রিন্সিপাল প্রয়োগ করে এটিকে পরিবর্তন করতে হবে (শব্দটি প্রাপ্তবয়স্কতা, মস্তিষ্কের বাধা সম্পর্কে দুঃখিত):

user.isAdult(new OnlyAllowAdultsToLogin())

যেখানে OnlyAllowAdultsToLoginStrategyএকটি ইন্টারফেস প্রয়োগ করে:

interface UserAdultnessPolicy
{
   void userIsAdult();
   void userIsChild();
   void userAdultnessIsUnknown();
}

কি করে void userIsAdult()? সম্ভবত আপনি বোঝানো হয়েছে bool userIsAdult()?
টিমউই

0

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


0

সি লাইব্রেরির বেশিরভাগ কার্যক্রমে এই বৈশিষ্ট্যটি প্রয়োগ করেছে। উদাহরণস্বরূপ, strcmp 2 টি স্ট্রিংয়ের সাথে তুলনা করে এবং 0 টি একই হলে 0 (1 ধরণের ধনাত্মক পূর্ণসংখ্যা) যদি প্রথমটির চেয়ে দ্বিতীয়টি 'এর চেয়ে বড়' হয়, এবং -1 (যেমন কোনও নেতিবাচক পূর্ণসংখ্য) দ্বিতীয়টি প্রথমটির চেয়ে বড় হয় ।

একই পদ্ধতি অন্য কোথাও ব্যবহার করা যেতে পারে, + / 0 / - আপনার ত্রি-স্থিতি হিসাবে। এটি যদি আপনাকে 0 টি মিথ্যা এবং অন্য কোনও মান সত্য হয় তা মানের ক্ষেত্রে বুলিয়ান যুক্তি সম্পাদন করতে দেয়।


0

সি ++ এর জন্য বুস্ট প্রকৃতপক্ষে বর্ণিত একটি ট্রিবিউল প্রয়োগ করে :

ট্রিবুল শ্রেণিটি বিল্ট-ইন বুল টাইপের মতো কাজ করে তবে 3-রাষ্ট্রীয় বুলিয়ান যুক্তির জন্য। তিনটি রাজ্যই সত্য, মিথ্যা এবং অনির্দিষ্ট, যেখানে প্রথম দুটি রাজ্য সি ++ বুল টাইপের সমতুল্য এবং শেষ রাষ্ট্রটি একটি অজানা বুলিয়ান মান উপস্থাপন করে (এটি সত্য বা মিথ্যা হতে পারে, আমরা জানি না)।


-1

ভিবি 6 চেকবাক্সটিতে এই ক্ষমতা রয়েছে। চেকবাক্স মানগুলি 0 = বন্ধ, 1 = অন, 2 = ধূসর হতে পারে

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