জাভাতে কোনও বুলিয়ান ভেরিয়েবল টগল করার সবচেয়ে সহজ উপায়?


211

জাভাতে কোনও বুলিয়ানকে উপেক্ষা করার মতো আরও ভাল উপায় কি যদি অন্য কিছু হয়?

if (theBoolean) {
    theBoolean = false;
} else {
    theBoolean = true;
}

ওহ সুন্দর, আমি একই প্রশ্নটি করতে চলেছি, যদিও আমার প্রশ্নটি জাভাস্ক্রিপ্ট / এস 3 বা নির্দিষ্টভাবে ইসকামস্ক্রিপ্টের জন্য নির্দিষ্ট হত তবে আমি মনে করি ... যা সহজেই এই প্রশ্নটি দ্বারা আচ্ছাদিত হবে।
ম্যাট লোহক্যাম্প

না থাকলে কী হয়! অপারেটর ??
onmyway133

উত্তর:


537
theBoolean = !theBoolean;

16
এটি ... সত্যিই সুস্পষ্ট obvious উফ! জানি না কেন আমি এটা ভেবে দেখিনি। ধন্যবাদ।
কেভিন গ্রিফিন

বুলিয়ান প্রাকৃতিক পছন্দ বলে মনে হচ্ছে - ভবিষ্যতে সম্ভবত।
ম্যাট লোহক্যাম্প


12
@ ক্রিস্টোফারহ্যামারস্ট্রিম সেই যুক্তি অনুসারে, --integer == - (- ((পূর্ণসংখ্যা))) == পূর্ণসংখ্যা হওয়া উচিত নয়?
ব্যবহারকারী515655

1
@ user515655 - ভাষা একটি --অপারেটরকে সংজ্ঞায়িত করে (প্রকৃতপক্ষে, দু'জন ++অপারেটর সহ ), তবে !!অপারেটরের সংজ্ঞা দেয় না । আপনি চাইলে -(-(integer))দুটি -অক্ষরের মধ্যে সাদা স্থান ব্যবহার করতে পারেন । তবে সাদা স্থান নির্বিশেষে !!দুটি !অপারেটর হিসাবে পার্স ।
টেড হপ্প

164
theBoolean ^= true;

আপনার ভেরিয়েবলটি চারটি বর্ণের চেয়ে বেশি হলে কম কীস্ট্রোক হয়

সম্পাদনা করুন : গুগল অনুসন্ধান পদ হিসাবে ব্যবহার করার সময় কোডটি কার্যকর ফলাফলগুলিতে ফিরে আসে। উপরের কোডটি দেয় না। যারা এটি প্রয়োজন জন্য এটা , bitwise XOR যাও হিসাবে এখানে বর্ণিত


14
এবং এটি
ডিআরওয়াই

6
সংক্ষিপ্ততা বুদ্ধি আত্মা.
পল ব্রিংকলে

7
আমার প্রোগ্রামার বন্ধুদের সামনে শীতল দেখতে এখন আমি অফহানডে নাম-ড্রপ (সিনট্যাক্স-ড্রপ?) এক্সওর পাচ্ছি। আপনার উত্তরটি নির্বাচিতটির সাথে একত্রীকরণ করা উচিত, তারা একসাথে খাঁটি পরিপূর্ণতা।
ম্যাট লোহক্যাম্প

6
@ স্কটস্ট্যানচফিল্ড এই জাতীয় লোকদের এটি শিখানো উচিত। এটি মোটেও কঠিন নয়, এটি কোনও হ্যাক নয় এবং এটি না জানার ফলে প্রায়শই ক্রিপি কোড যুক্ত হয় যেমন এই প্রশ্নটি question এটি একটি বাস্তব ধাক্কা - স্ট্যান্ডার্ড কনভেনশনগুলি ব্যবহার করে পাঁচটি লাইন!
মার্টিনাস

4
এই অপারেশনটি অন্যান্য সংস্করণগুলির মতো theBoolean = !theBoolean;বা এর চেয়ে 12% বেশি দ্রুতtheBoolean = theBoolean ? false : true;
ব্লেইন ক্যাসটেন

32

বেশ কয়েকটি আছে

"সুস্পষ্ট" উপায় (বেশিরভাগ লোকের জন্য)

theBoolean = !theBoolean;

"সংক্ষিপ্ততম" উপায় (বেশিরভাগ সময়)

theBoolean ^= true;

"সবচেয়ে দৃশ্যমান" উপায় (সবচেয়ে অনিশ্চিতভাবে)

theBoolean = theBoolean ? false : true;

অতিরিক্ত: টগল করুন এবং একটি পদ্ধতিতে কল করুন

theMethod( theBoolean ^= true );

যেহেতু অ্যাসাইনমেন্ট অপারেটর সর্বদা নির্ধারিত হয়েছে তা ফিরিয়ে দেয়, এটি বিটওয়াইস অপারেটরের মাধ্যমে মানটি টগল করবে এবং তারপরে পদ্ধতি কলটিতে ব্যবহৃত নতুন সঞ্চিত মানটি ফিরিয়ে দেবে।


টগল নামক একটি ফাংশন / পদ্ধতিতে প্রয়োগটি মোড়ানো এবং তারপরে এটি বিভ্রান্ত করার প্রায় কোনও উপায় নেই।
ল্যাম্বেজ

@ রাইনার: অবশ্যই এটির জন্য C, তবে Javaএটিতে বুলিয়ান এবং পূর্ণসংখ্যার মিশ্রণ অনুমোদিত নয় (এছাড়াও while(1)জাভাতে যেমন জিনিসগুলি সম্ভব নয়)।
লেভাইট

@ ল্যাম্বেজ: সত্য, তবে খারাপ দিক থেকে আপনি বুলেটিয়ানটি কেবল তা পেরিয়ে টগল করতে পারবেন না, কারণ জাভাতে রেফারেন্স দিয়ে আদিমদের পাস করা সম্ভব নয়। আপনাকে পদ্ধতির ফলাফলটি আপনার ভেরিয়েবলের কাছে পুনর্নির্দিষ্ট করতে হবে, বা অন্যথায় বুলিয়ানের জন্য একটি মোড়কের ক্লাস তৈরি করতে হবে।
লেভাইট

উপরের "সুস্পষ্ট উপায়" এর সাথে সোনার দ্বারা পতাকাঙ্কিত করুন - অভ্যন্তরীণ কার্যগুলি এড়ানো উচিত।
অরবি

2

আপনি যদি বুলিয়ান নুল মানগুলি ব্যবহার করেন এবং সেগুলি মিথ্যা বলে মনে করেন তবে এটি ব্যবহার করে দেখুন:

static public boolean toggle(Boolean aBoolean) {
    if (aBoolean == null) return true;
    else return !aBoolean;
}

আপনি যদি বুলিয়ান নুল মান হস্তান্তর না করেন তবে এটি ব্যবহার করে দেখুন:

static public boolean toggle(boolean aBoolean) {
   return !aBoolean;
}

এগুলি সবচেয়ে পরিষ্কার কারণ তারা পদ্ধতিটির স্বাক্ষরে অভিপ্রায়টি দেখায়, তুলনায় পড়তে সহজ ! অপারেটর, এবং সহজেই ডিবাগ করা যায়।

ব্যবহার

boolean bTrue = true
boolean bFalse = false
boolean bNull = null

toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true

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

Boolean b = false
b = b.toggle() // == true

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

2

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

Boolean.valueOf(aBool).equals(false)

বা বিকল্পভাবে:

Boolean.FALSE.equals(aBool)

অথবা

Boolean.FALSE::equals

1
আমি এই সত্যটি পছন্দ করি যে আপনি Boolean.FALSE::equalsসামান্য ল্যাম্বদা লেখার পরিবর্তে কোনও ম্যাপিং ফাংশনটিতে যেতে পেরেছিলেন
প্যাট্রিক পার্কার

0

যদি আপনি বিশেষভাবে পেশাদার কিছু না করে থাকেন তবে আপনি সর্বদা একটি ইউটিল ক্লাস ব্যবহার করতে পারেন। প্রাক্তন, শ্রেণীর জন্য একটি প্রকল্পের থেকে একটি ব্যবহার শ্রেণি।

public class Util {


public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }

}

তারপরে একটি ইউটিল অবজেক্ট তৈরি করুন Util u = new Util(); এবং জন্য কিছু রাখুনSystem.out.println( u.flip(bool) );

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



-4

আগে:

boolean result = isresult();
if (result) {
    result = false;
} else {
    result = true;
}

পরে:

boolean result = isresult();
result ^= true;

ভোট কমেছে কে? আপনি দয়া করে কারণ ব্যাখ্যা করতে পারেন?
নিখিল কুমার

11
দু'টি প্রধান কারণ আমি কেন ভাবতে পারি যে কেউ আপনাকে কমে যেতে পারে: 1) থ্রেড নেক্রোমেন্সি ( আসুন! প্রশ্নটি 7 (!) বছর আগে জিজ্ঞাসা করা হয়েছিল! ) এবং আপনার উত্তরটি টেবিলে নতুন কিছু এনেছে না; ২) ভোটার প্রত্যাশিত কিছু "ক্লিনার" ( পড়ুন: সংক্ষিপ্ত ) - অ্যারোনমেনপায়ার উত্তর এটির একটি প্রধান উদাহরণ।
প্রিয়দু নিমরে

5
@ এলটজ: বিপরীতে - উত্তরটি প্রযুক্তিগতভাবে সঠিক ছিল বলে আমি আসলে তাকে উন্নত করেছি। তবে, আমি অবশ্যই বলব যে আমি সস্তা কর্মের জন্য পূর্ববর্তী ব্যবহারকারীর জবাবগুলি বুটগ্রেজ করার প্রবণতা উপভোগ করি না (নালকের উত্তর দেখুন)।
প্রিয়দু নিমরে

@ প্রিডু নিমরে, প্রশ্ন জিজ্ঞাসা করা হয়েছে এবং উত্তর 7+ বছরের আগে গৃহীত হয়েছে এবং আপনি কি মনে করেন যে আপনার তালিকা বাদ দিয়ে কেউ আপত্তি দেবে?
এগুলি

2
after: বুলিয়ান রেজাল্ট =! isresult ();
পিটার ফ্রিবার্গ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.