বুলিয়ান এর নাল মান কখন ব্যবহার করা উচিত?


159

জাভা booleanমান পারবেন trueএবং falseযখন বুলিয়ান পারবেন true, falseএবং null। আমি আমার booleanএসগুলিকে এস তে রূপান্তর করতে শুরু করেছি Boolean। এটি যেমন পরীক্ষায় ক্রাশ হতে পারে

Boolean set = null;
...
if (set) ...

পরীক্ষা যখন

if (set != null && set) ...

নিখুঁত এবং ত্রুটিযুক্ত বলে মনে হচ্ছে।

কখন যদি হয় তবে Booleanনাল মান সহ এটি ব্যবহার করা কার্যকর ? যদি তা না হয় তবে আবৃত বস্তুর মূল সুবিধা কী?

আপডেট: এমন অনেক মূল্যবান উত্তর এসেছে যে এর কয়েকটি সংক্ষিপ্ত বিবরণ আমি আমার নিজের উত্তরে রেখেছি। আমি জাভাতে সেরা অন্তর্বর্তী তাই আমি যে জিনিসগুলিকে দরকারী মনে করি সেগুলি প্রদর্শনের চেষ্টা করেছি। মনে রাখবেন যে প্রশ্নটি "ভুলভাবে বানানো"


7
কখনও কখনও, আপনি একটি অবিচ্ছিন্ন অবস্থা চান, এবং সাহায্যে Booleanপরিবর্তনশীল নির্ধারণ nullকরতে পারেন।
nhahtdh

2
"সর্বদা" একটি সামান্য শক্তিশালী যা আমি নিশ্চিত করার সাহস পাই না, তবে আমি nullযদি সত্যিই এটি তৃতীয় রাষ্ট্র হিসাবে ব্যবহার করা হয় তবে এর জন্য একটি পরীক্ষা আশা করব expect
nhahtdh

6
আপনার কাছে কি বুলিয়ানসকে বুলিয়ান্সে রূপান্তর করার কোনও কারণ আছে? আমি আদিম প্রকারের সাথে লেগে থাকি এবং যদি এটির করার উপযুক্ত কারণ থাকে তবে কেবল এটি মুড়িয়ে রাখি, উদাহরণস্বরূপ যখন আমাকে রেফারেন্সের মাধ্যমে কোনও ভেরিয়েবল পাস করতে হবে।
jpe

7
আপনি এটিও যাচাই করতে চাইতে পারেন: thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
biziclop

6
একটি "নাল মান যেমন জিনিস আছে মধ্যে একটি বুলিয়ান"। এ Booleanহ'ল একটি বস্তু, যখন booleanএকটি "স্কেলার"। যদি কোনও Booleanরেফারেন্স নালিতে সেট করা থাকে তার অর্থ এই যে সংশ্লিষ্ট Booleanবস্তুর অস্তিত্ব নেই। আপনি এমন কোনও কিছুর ভিতরে কিছু রাখতে পারবেন না যা বিদ্যমান নেই।
হট লিকস

উত্তর:


244

আপনি যতবার পারেন booleanতার চেয়ে বরং ব্যবহার করুন Boolean। এটি অনেকগুলি NullPointerExceptionএড়ায় এবং আপনার কোডটিকে আরও শক্তিশালী করে তুলবে।

Boolean উদাহরণস্বরূপ, দরকারী

  • সংগ্রহে বুলেটিনগুলি সঞ্চয় করতে (তালিকা, মানচিত্র, ইত্যাদি)
  • একটি নলযোগ্য বুলেটিন উপস্থাপন করতে (উদাহরণস্বরূপ, একটি ডাটাবেসে একটি বুলিয়ান কলাম থেকে আসা)। নাল মানটির অর্থ এই প্রসঙ্গে "আমরা জানি না যে এটি সত্য বা মিথ্যা"।
  • প্রতিবার কোনও পদ্ধতিতে একটি অবজেক্টকে আর্গুমেন্ট হিসাবে প্রয়োজন হয় এবং আপনাকে একটি বুলিয়ান মান পাস করতে হবে। উদাহরণস্বরূপ, প্রতিচ্ছবি বা পদ্ধতি ব্যবহার করার সময় MessageFormat.format()

35
ডাটাবেসের একটি নাল মানটির অর্থ "ফাইলনিটফাউন্ড"
কার্ল জোহান

31
আপনার দ্বিতীয় বুলেট সত্যই এই প্রশ্নের সঠিক উত্তরের মূল, আমি মনে করি।
নীলস ব্রিনচ

3
বুলিয়ানের জন্য আমার আরেকটি ব্যবহার যা জেনেরিক ধরণের প্যারামিটার হিসাবে ছিল জেনেরিক ক্লাসগুলি প্রসারিত করার সময়
অ্যালেক্স

6
"মহাবিশ্ব জানে না" ব্যতীত নাল ধারণাটি ওভারলোডিং 3 (বা আরও) মূল্যবান এনাম ব্যবহারের চেয়ে দুর্বল। পাঠ্য কোডগুলি পরামিতিগুলির পরামিতিগুলি পদ্ধতিতে আরও স্পষ্ট করে তোলে।
ব্লুভেেক্টর

16
বা # 4: Boolean isSchrodinger‎CatAlive = null;(দুঃখিত, প্রতিরোধ করতে পারেনি;))।
ম্যাথিউউ

58

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

আমি থেকে রূপান্তর করতে কোনো কারণ দেখতে booleanকরতে Booleanযেমন অতিরিক্ত মেমরি ওভারহেড, NPE সম্ভাবনা এবং কম টাইপিং প্রবর্তন করে। সাধারণত আমি BooleanUtils.isTrue()আমার জীবনকে কিছুটা সহজ করার জন্য বিশ্রী ব্যবহার করি Boolean

অস্তিত্বের একমাত্র কারণ Booleanহ'ল Booleanধরণের সংগ্রহের ক্ষমতা (জেনেরিকগুলি অনুমতি দেয় না boolean, পাশাপাশি অন্যান্য সমস্ত আদিম)।


1
যদিও এটি একটি বাহ্যিক গ্রন্থাগার (অ্যাপাচি কমন্স)।
nhahtdh

4
মাল্টিভ্যালিউড যুক্তি জন্য enums ব্যবহার করা ভাল। সুতরাং বুলিয়ান ডেটা স্ট্রাকচারে ব্যবহারের জন্য (অটো) বক্সিংয়ের ভেরিয়েবলের জন্য রেখে দেওয়া উচিত।
jpe

39
বুলিয়ান ব্যবহার করার সময় নাল পয়েন্টার ব্যতিক্রম এড়ানোর জন্য একটি সুবিধাজনক পরীক্ষা হ'ল Boolean.TRUE.equals(myBooleanObject)বা Boolean.FALSE.equals(myBooleanObject)
ক্রিস্টোফার পিসার্ট

10
একটি বুলিয়ান অবজেক্টের কেবল দুটি স্থিতি রয়েছে - trueএবং falsenullহয় না বস্তুর একটি রাষ্ট্র, বরং অবজেক্ট রেফারেন্স একটি রাষ্ট্র।
হট লিকস

2
অ্যাপাচি কমন্সে ছেড়ে যান "কেউ বুলিয়ানগুলির মূল্যায়ন করতে পারে ... আসুন একটি isTrue()পদ্ধতি তৈরি করি ..." যা ইউটিলিটি ফাংশনের ইতিহাসের সবচেয়ে দুর্বোধ্য বিষয় বলে মনে হচ্ছে। এবং তবুও, একরকম, এটি দরকারী ... এটি এখানে বৃহত্তম ডাব্লুটিএফ।
কর্সিকা

33

বাহ, পৃথিবীতে কি? এটি কি আমি বা এই সমস্ত উত্তরগুলি ভুল বা অন্তত বিভ্রান্তিকর?

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

একটি বুলিয়ান অবজেক্টের নালার মান কখনও থাকতে পারে না। যদি আপনার বুলিয়ান সম্পর্কিত উল্লেখ বাতিল হয়, তবে এর সহজ অর্থ হল যে আপনার বুলিয়ান কখনও তৈরি হয়নি।

আপনি এটি দরকারী খুঁজে পেতে পারেন: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Boolean.java

কোনও নাল বুলিয়ান রেফারেন্স কেবল একই ধরণের যুক্তি ট্রিগার করতে ব্যবহার করা উচিত যার সাথে আপনার অন্য কোনও নাল রেফারেন্স রয়েছে। তিনটি রাষ্ট্র যুক্তির জন্য এটি ব্যবহার করা আনাড়ি is

সম্পাদনা: বিজ্ঞপ্তি, এটি Boolean a = true;একটি বিভ্রান্তিমূলক বক্তব্য। এটি সত্যিকারের কাছাকাছি Boolean a = new Boolean(true); কিছুটার সমান হয় দয়া করে এখানে অটোবক্সিং দেখুন: http://en.wikedia.org/wiki/Boxing_%28 কম্পিউটার_সায়েন্স ১৯৯৯# অটোবক্সিং

সম্ভবত এখান থেকেই অনেকটা বিভ্রান্তি এসেছে।

সম্পাদনা 2: নীচে মন্তব্য পড়ুন। যদি কারও কাছে এই ধারণাটি অন্তর্ভুক্ত করার জন্য আমার উত্তরটিকে পুনর্গঠন করার ধারণা থাকে তবে দয়া করে এটি করুন।


2
আমি আপনার বক্তব্যটি বুঝতে পারি না "একটি বুলিয়ানের নালার কোনও মূল্য থাকতে পারে না"। আমি একটি বুলিয়ান ( Boolean a = true;) তৈরি করতে পারি এবং তারপরে একটি নাল ( a = null;) সেট করতে পারি । এটি মার্জিত বা বুদ্ধিমান নাও হতে পারে তবে এটি সম্ভব।
peter.murray.rust

7
আপনি যখন করেন Boolean a; a বুলিয়ান অবজেক্টের পয়েন্টার। আপনি যদি a = null;আপনার বুলিয়ান শূন্য করতে না চান, আপনি আপনার রেফারেন্সটি শূন্য করতে সেট করেছেন। কি Boolean a = null; a.booleanValue();এই ক্ষেত্রে, আপনি এমনকি নির্মিত একটি বুলিয়ান অবজেক্ট এবং সেইজন্য এটা একটা নালপয়েন্টারএক্সেপশন নিক্ষেপ করব। আপনার যদি আরও নির্দেশের প্রয়োজন হয় তবে আমাকে জানান।
ব্যবহারকারী 606723

তদ্ব্যতীত, আপনি যখন Boolean a = true;করেন, এটি কিছু ধরণের যাদু করে যা প্রকৃতপক্ষে Boolean a = new Boolean(true);পারফরম্যান্সের কারণে পুরোপুরি সঠিক নয় বলে থ্যাটস হিসাবে ব্যাখ্যা করা হয় , তবে আপনাকে বুঝতে হবে যে বুলিয়ান এখনও একটি অবজেক্ট।
ব্যবহারকারী 606723

7
@ মিসিংনো, যে কোনও বস্তুর সাথে সম্পর্কিত সমস্ত কোডের সাথে এটি মোকাবেলা করতে হবে। একটি অবজেক্ট রেফারেন্স হয় নাল বা না হতে পারে। এটি কোনও বিশেষ ক্ষেত্রে নয় এবং এর জন্য বিশেষ বিবেচনার প্রয়োজন নেই।
ব্যবহারকারী 606723

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

24

তিনটি দ্রুত কারণ রয়েছে:

  • ডাটাবেজ বুলিয়ান মান প্রতিনিধিত্ব করতে হতে পারে যা true, falseবাnull
  • এক্সএমএল স্কিমার xsd:booleanমানগুলির সাথে ঘোষণা করার জন্যxsd:nillable="true"
  • জেনেরিক ধরণের ব্যবহার করতে সক্ষম হতে: List<Boolean>- আপনি ব্যবহার করতে পারবেন নাList<boolean>

আমি স্পষ্টভাবে "বুলিয়ান" লিখেছি, " boolean" নয় ("স্টাইলিং)", কারণ ওরাকলে আপনি সাধারণত char(1) null'টি' এবং 'এফ' মান ব্যবহার করেন। সুতরাং এটি (উদাহরণস্বরূপ, হাইবারনেট টাইপ অ্যাডাপ্টার সহ)
নਾਲ

2
কোন ডাটাবেস বুলিয়ান জন্য নাল অনুমতি দেয় না? যদি আপনি কলামটি শুল্কযোগ্য হিসাবে সেট করেন, তবে ডেটাটাইপ আর কিছু যায় আসে না ...
মাইকেল বি।

@MichalB। সাইবেস (এবং এসকিউএল সার্ভার) বিট টাইপ infocenter.sybase.com/help/index.jsp?topic=/...
Mmmmmm

@Mark - - না, SQL সার্ভার একটি nullable বিট অনুমতি নেই msdn.microsoft.com/en-us/library/ms177603.aspx
ডেভিড এম

11

নিজের প্রশ্নের উত্তর: আমি ভেবেছিলাম যে উত্তরগুলি থেকে আমি অনেক কিছু শিখেছি বলে আমার নিজের প্রশ্নের উত্তর দেওয়া কার্যকর হবে। এই উত্তরটি তাদের মতো - আমার মতো - যাদের সমস্যাগুলির সম্পূর্ণ বোঝা নেই তাদের সহায়তার উদ্দেশ্যে। আমি যদি ভুল ভাষা ব্যবহার করি তবে দয়া করে আমাকে সংশোধন করুন।

  • নাল "মান" কোনও মান নয় এবং মূলত trueএবং থেকে পৃথক false। এটি বস্তুর প্রতি পয়েন্টারের অনুপস্থিতি। সুতরাং বুলিয়ান 3-মূল্যবান বলে মনে করা মূলত ভুল
  • বুলিয়ান সিনট্যাক্স সংক্ষেপে এবং রেফারেন্স অবজেক্টস নির্দেশ করে যে সত্য গোপন করে:

    Boolean a = true;

সত্য যে trueএকটি বস্তু গোপন । অন্যান্য সমমানের কাজগুলি হতে পারে:

Boolean a = Boolean.TRUE;

অথবা

Boolean a = new Boolean(true);
  • সংক্ষিপ্ত বাক্য গঠন

    if (a) ...

অন্যান্য অন্যান্য কার্যভার থেকে পৃথক এবং সত্যটি গোপন করে যে কোনও বস্তুর রেফারেন্স বা আদিম হতে পারে। কোনও বিষয় যদি nullএনপিই এড়ানোর জন্য এটি পরীক্ষা করা প্রয়োজন । আমার জন্য যদি সাম্যতা পরীক্ষা হয় তবে এটি মনে রাখা মনস্তাত্ত্বিক দিক থেকে আরও সহজ:

if (a == true) ...

যেখানে আমাদের নাল পরীক্ষা করার জন্য অনুরোধ করা হতে পারে। সুতরাং সংক্ষিপ্ত রূপটি কেবল তখনই নিরাপদ যখন aআদিম হয়।

নিজের জন্য আমার এখন সুপারিশ রয়েছে:

  • 3-মূল্যবান যুক্তির জন্য কখনই নাল ব্যবহার করবেন না। শুধুমাত্র সত্য এবং মিথ্যা ব্যবহার করুন।
  • Booleanকোনও পদ্ধতি হতে পারে এমনটি আর কখনও ফিরে আসে না null। কেবল ফিরবে boolean
  • কেবল Booleanপাত্রে উপাদান মোড়ানোর জন্য বা এমন পদ্ধতিতে যুক্তিগুলির জন্য ব্যবহার করুন যেখানে বস্তুর প্রয়োজন হয়

5
"নতুন বুলিয়ান (যাই হোক না কেন)" ব্যবহার করবেন না। এটি স্তূপে একটি নতুন বুলিয়ান ইনস্ট্যান্ট করবে। তবু বুলিয়ান অপরিবর্তনীয়। "বুলিয়ান.ভ্যালুওফ (যাই হোক না কেন)" ব্যবহার করুন যা কোনও বুলিয়ান.আরআর বা বুলিয়ানকে নির্দেশ করে যা একটি রেফারেন্স তৈরি করবে যা কিছু নির্ভর করে al
simbo1905

1
জাভা (12 বছর পরে আইএমএইচও) এর সাথে অনেক সমস্যার মধ্যে একটি হ'ল পুরানো ভাষাগুলিতে নাল মানগুলিতে যোগাযোগের অসঙ্গতি। স্ক্যালায় এক নজরে দেখার জন্য এটিতে একটি টাইপযুক্ত বিকল্পের ধারণা রয়েছে যা নাল হতে পারে বা এর কোনও মান থাকতে পারে (উপশ্রেণীর কিছুই নয় বা কিছু)। তারপরে আপনি myOption.getOrElse (defaultValue) কল করতে পারবেন। Scala-lang.org/api/current/scala/Option.html দেখুন এই বৈশিষ্ট্যটি নিয়ে জটিল কিছু নেই। তবুও এটি নতুন জেভিএম ভাষায় নির্মিত বলে অনেক লাইব্রেরি এটি ব্যবহার করে। এটি জাভা "গত শতাব্দী" ইস্যুটির কিছু "স্কেল" তৈরি করে তবে এটি এখনও জেআরইতে চালিত ক্লাস ফাইলগুলিতে সংকলন করে।
simbo1905

10

আদিমদের জন্য র‍্যাপার ক্লাসগুলি ব্যবহার করা যেতে পারে যেখানে বস্তুর প্রয়োজন হয়, সংগ্রহগুলি একটি ভাল নমুনা।

কল্পনা করুন আপনি কিছু কারণে দোকানের জন্য একটি ক্রম প্রয়োজন booleanএকটি ইন ArrayList, এই বক্সিং দ্বারা করা সম্ভব booleanমধ্যে Boolean

এই বিষয়ে কয়েকটি শব্দ হয় এখানে

ডকুমেন্টেশন থেকে:

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

http://docs.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html


3

Booleanমোড়ক কার্যকর যখন আপনি চান যে মান নির্ধারিত ছিল trueএবং না থেকে পৃথক করা উচিত false। এটিতে নিম্নলিখিত তিনটি রাষ্ট্র রয়েছে:

  • সত্য
  • মিথ্যা
  • সংজ্ঞায়িত হয় না যা null

যেখানে booleanকেবল দুটি রাষ্ট্র রয়েছে:

  • সত্য
  • মিথ্যা

উপরে পার্থক্য তা তালিকাসমূহ সহায়ক করতে হবে Booleanমূল্যবোধ, থাকতে পারে যা True, Falseবা Null


না, এটি একটি নাল অবস্থা নেই, এটিই রেফারেন্স।
মাতসেম্যান

বোলেয়ান বলতে যা বোঝাতে চেয়েছি তা সংজ্ঞাযুক্ত সত্য / মিথ্যা এবং সংজ্ঞায়িত নয় বলে ব্যবহার করা যেতে পারে।
রমেশ পিভিকে

3

আমি মনে করি কোনও ক্ষেত্রে, আপনার কাছে বুলিয়ান ক্ষেত্রের পার্থক্য করার জন্য একটি ব্যবস্থা থাকা উচিত যা ইতিমধ্যে মান সেট করেছে বা না করে।


1

বুলিয়ান জন্য মূল উদ্দেশ্য নাল মান। নাল মান বলে, সেই সম্পত্তি অপরিজ্ঞাত, উদাহরণস্বরূপ ডাটাবেস নাল কলামে নিন।

আপনার যদি সত্যিই আদিম বুলিয়ান থেকে মোড়ক বুলিয়ান রূপান্তর করতে হয়, তবে আপনি পুরানো কোডটি সমর্থন করতে নিম্নলিখিত ব্যবহার করতে পারেন:

Boolean set = Boolean.FALSE; //set to default value primitive value (false)
...
if (set) ...

6
'মূল উদ্দেশ্য নাল মান'। না, বুলিয়ানের মূল উদ্দেশ্য হ'ল কোনও বস্তুরূপে বুলিয়ানের একটি রেফারেন্স দেওয়া।
ব্যবহারকারী 606723

@ ব্যবহারকারী 606723 সম্মত হয়েছে, আমি লেখার সময় আমি মনে মনে ডাটাবেস কেসটি উল্লেখ করছি।
জেমেলনিক

1

বুলিয়ান মোড়কে ** নাল ** মানের জন্য অনেকগুলি ব্যবহার রয়েছে! :)

উদাহরণস্বরূপ, আপনার কাছে একটি ফর্মের মধ্যে "নিউজলেটার" নামে একটি ক্ষেত্র থাকতে পারে যা ব্যবহারকারী আপনার সাইট থেকে কোনও নিউজলেটার চায় বা না চায় তা নির্দেশ করে। যদি ব্যবহারকারী এই ক্ষেত্রে কোনও মান নির্বাচন না করে, আপনি সেই পরিস্থিতিতে একটি ডিফল্ট আচরণ প্রয়োগ করতে চাইতে পারেন (প্রেরণ? প্রেরণ করবেন না ?, আবার প্রশ্ন ?, ইত্যাদি)। স্পষ্টতই, সেট করা নেই (বা নির্বাচিত নয় বা ** নাল **), এটি সত্য বা মিথ্যা নয়।

তবে, যদি "সেট না করা" আপনার মডেলটিতে প্রযোজ্য না হয়, তবে বুলিয়ান আদিম পরিবর্তন করবেন না;)


1

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

সুতরাং, আমরা যে অ-নিখুঁত বিশ্বে বাস করি, বুলিয়ান অবজেক্টটি দুর্দান্ত যে এটি অনুপস্থিত বা অজানা অবস্থাকে নাল হিসাবে প্রতিনিধিত্ব করতে পারে। সর্বোপরি, কম্পিউটারগুলি বাস্তব বিশ্বের মডেলকে সমস্ত সম্ভাব্য রাজ্যের জন্য অ্যাকাউন্ট করা উচিত এবং নিক্ষেপ ব্যতিক্রমগুলি দিয়ে পরিচালনা করে (বেশিরভাগ ক্ষেত্রে ব্যবহারের ক্ষেত্রে যেখানে ব্যতিক্রম নিক্ষেপ করা সঠিক প্রতিক্রিয়া হবে)।

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

শুধু আমার 2 সেন্ট।


1

উপরের সমস্ত ভাল উত্তরের জন্য, আমি কেবল জাভা সার্লেটলেট HttpSessionশ্রেণিতে একটি কংক্রিটের উদাহরণ দিতে যাচ্ছি । আশা করি এই উদাহরণটি আপনার এখনও কিছু প্রশ্ন থাকতে পারে।

আপনার যদি সেশনের জন্য মানগুলি সঞ্চয় করতে এবং পুনরুদ্ধার করতে হয় তবে আপনি setAttribute(স্ট্রিং, অবজেক্ট) এবং getAttribute(স্ট্রিং, অবজেক্ট) পদ্ধতি ব্যবহার করুন। সুতরাং বুলিয়ান মানের জন্য, আপনি যদি কোনও HTTP সেশনে এটি সঞ্চয় করতে চান তবে আপনি বুলিয়ান ক্লাসটি ব্যবহার করতে বাধ্য হবেন।

HttpSession sess = request.getSession(false);
Boolean isAdmin = (Boolean) sess.getAttribute("admin");
if (! isAdmin) ...

NullPointerExceptionবৈশিষ্ট্যটির মানগুলি সেট না করা থাকলে শেষ লাইনটি একটি ঘটায় । (যে কারণে আমাকে এই পোস্টে নিয়ে গেছে)। সুতরাং 3 যুক্তিযুক্ত স্থিতি এখানে থাকার জন্য, আপনি এটি ব্যবহার করতে পছন্দ করেন বা না করুন।


0

সেরা উপায় হ'ল বুলিয়ানগুলি সম্পূর্ণরূপে এড়ানো, যেহেতু প্রতিটি বুলিয়ান ইঙ্গিত দেয় যে আপনার কোডের অন্য কোথাও আপনার শর্তাধীন বিবৃতি রয়েছে (দেখুন http://www.antiifcampaign.com/ এবং এই প্রশ্ন: আপনি যদি কোনও বিবৃতি না দিয়ে কোনও অ্যালগরিদম লিখতে পারেন? ? )।

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


বুলিয়ান্সের সাথে ডিল করা অন্য যে কোনও অবজেক্টের সাথে ডিল করার মতো ত্রুটিযুক্ত প্রবণ। বিটিডাব্লু, লিঙ্কটি সাধারণ ব্যবহারের জন্য নয়, টাইপ চেকিংয়ের জন্য আইএফএসের বিস্তার বিরোধী। এবং পরিবর্তে, এটি "বিপজ্জনক" কারণ এটি পরিবর্তনগুলি আরও কঠিন করে তোলে। সুতরাং প্রতি সেফের সাথে আইএফএস-তে কোনও সমস্যা নেই।
মিস্টার স্মিথ

প্রশ্নের উত্তর নয়।
মাতসেম্যান

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

0

আপনার তিনটি রাষ্ট্রের প্রয়োজন হলে বুলিয়ান খুব সহায়ক হতে পারে। সফ্টওয়্যার টেস্টিংয়ের মতো যদি টেস্ট পাস হয় তবে সত্য পাঠান, ব্যর্থ হলে মিথ্যা প্রেরণ করুন এবং যদি পরীক্ষার ক্ষেত্রে বাধা দেওয়া হয় তবে নাল প্রেরণ করুন যা পরীক্ষার কেস কার্যকর করা হয়নি বলে বোঝায়।


2
এর জন্য এনামগুলি সবচেয়ে ভাল হবে না? সম্ভবত কোনও ক্লায়েন্টের জন্য সম্ভবত অপ্রত্যাশিত নলপয়েন্টার এক্সেপশনস উত্পাদন করার বিপরীতে, এনামগুলি স্পষ্টভাবে "রাজ্যগুলি" সংজ্ঞায়িত করবে
কার্তিক চুগ

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