আমার একটা শর্ত আছে
if(exists && !isDirectory || !exists)
{}
আমি কীভাবে এটি সংশোধন করতে পারি, যাতে এটি আরও বোধগম্য হয়।
exists
এবং isDirectory
উভয়ই সত্য হয়?
আমার একটা শর্ত আছে
if(exists && !isDirectory || !exists)
{}
আমি কীভাবে এটি সংশোধন করতে পারি, যাতে এটি আরও বোধগম্য হয়।
exists
এবং isDirectory
উভয়ই সত্য হয়?
উত্তর:
||
পরিবর্তনমূলক তাই
if(!exists || (exists && !isDirectory))
সমতুল্য
এখন যেহেতু বিদ্যমান রয়েছে তার দ্বিতীয় অংশে সর্বদা সত্য আপনি এটিকে ||
ড্রপ করতে পারেন &&
:
if(!exists || !isDirectory)
অথবা আপনি আরও এক ধাপ এগিয়ে যেতে পারেন:
if(!(exists && isDirectory))
&&
তার চেয়ে বেশি প্রাধান্য রয়েছে (কমপক্ষে বেশিরভাগ সুপরিচিত ভাষায় - ব্যতিক্রমও থাকতে পারে) ||
। সুতরাং a && b || c
সমান (a && b) || c
কিন্তু না a && (b || c)
।
!exists || !isDirectory
আরও "বোধগম্য", কারণ, isDirectory
যদি সত্য হতে পারে না !exists
। সুতরাং একজন মানুষ হিসাবে আমরা বলব "যদি এটি বিদ্যমান না থাকে বা এটি [উপস্থিত থাকে এবং এটি] ডিরেক্টরি না হয়"।
||
পার্শ্ব প্রতিক্রিয়া ছাড়াই মানগুলিতে ব্যবহৃত হলে কেবল পরিবর্তনশীল - উদাহরণস্বরূপ যদি ফাংশনগুলির সাথে ব্যবহৃত হয় তবে কিছু ফাংশন কল (শর্ট সার্কিট) নাও পেতে পারে বা ভিন্ন ক্রমে ভিন্ন মান ফেরত দেয়।
প্রক্রিয়া হিসাবে, আমি একটি সত্য টেবিল তৈরি করার পরামর্শ দিচ্ছি:
e = exists
d = isDirectory
e | d | (e && !d) || !e
--+---+----------------
0 | 0 | 1
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
এটি NAND
অপারেশনের সাথে মেলে যা সহজ:
!(exists && isDirectory)
আপনি যদি আপনার সমস্ত লজিক গেটগুলি মনে না রাখেন তবে উইকিপিডিয়ায় বুট করার জন্য সত্য টেবিলগুলির সাথে একটি দুর্দান্ত রেফারেন্স রয়েছে ।
@ ক্রিস্টোফার হামারস্ট্রিম রাষ্ট্রের isDirectory
সাথে আবদ্ধ হওয়ার পরিস্থিতি সম্পর্কে একটি গুরুত্বপূর্ণ বিষয় তুলে ধরেছিলেন exists
। ধরে নিই যে তারা একই রেফারেন্সটি উল্লেখ করেছে এবং এমন একটি রাজ্য পাওয়া সম্ভব নয় যেখানে রেফারেন্সটি বিদ্যমান নেই এবং এটি একটি ডিরেক্টরি, সত্য টেবিলে নীচে লেখা যেতে পারে:
e | d | (e && !d) || !e
--+---+----------------
0 | 0 | 1
0 | 1 | n/a
1 | 0 | 1
1 | 1 | 0
n/a
একটি রাষ্ট্র যে কোন ব্যাপার না প্রতিনিধিত্ব করতে ব্যবহৃত হয়। গ্রহণযোগ্য হ্রাস ফলস্বরূপ হয় 1
বা 0
রাজ্যের ফলে হতে পারে n/a
।
মনের মধ্যে এই সঙ্গে, !(exists && isDirectory)
এখনও একটি বৈধ হ্রাস, একটি ফলে নেই 1
জন্য !e && d
।
যাইহোক, !isDirectory
অনেক বেশী সাদাসিধে হ্রাস হবে, ফলে 0
জন্য !e && d
।
isDirectory
নির্ভর করে যে এটি নির্ভর করে exists
। এটি উভয়ই ডিরেক্টরি হতে পারে এবং বিদ্যমান নেই।
n/a
জায়গায় ভরাট করা উচিত যেখানে রাজ্য অর্জন করা অসম্ভব এবং সেই অনুযায়ী সমীকরণ হ্রাস পেয়েছে।
আরও ভাল পঠনযোগ্যতার জন্য, আমি পদ্ধতিগুলিতে বুলিয়ান শর্তগুলি বের করতে পছন্দ করি:
if(fileNameUnused())
{...}
public boolean fileNameUnused() {
return exists && !isDirectory || !exists;
}
বা আরও ভাল পদ্ধতির নাম সহ। আপনি যদি এই পদ্ধতির নামটি সঠিকভাবে দিতে পারেন তবে আপনার কোডের পাঠকের বুলিয়ান শর্তটি কী তা বোঝার দরকার নেই।
boolean fileNameUnused = !exists || !isDirectory; if (fileNameUnused) { doSomething(); }
আপনি কেবল ন -গো কেসটি পেরেক করার চেষ্টা করতে পারেন এবং যদি এটি প্রদর্শিত হয় তবে জামিন দিতে পারেন।
while(someCondition) {
if(exists && isDirectory)
continue;
// maybe "break", depends on what you're after.
// the rest of the code
}
অথবা এমনকি
function processFile(someFile)
{
// ...
if(exists && isDirectory)
return false;
// the rest of the code
// ...
}
আপনি চিহ্নিত হিসাবে সত্য সারণী ব্যবহার করতে পারেন। পদক্ষেপের সংখ্যা হ্রাস করার জন্য দ্বিতীয় পদক্ষেপটি কেভি-মানচিত্র হতে পারে ।
বুলিয়ান বীজগণিত আইন ব্যবহার করা অন্য পদ্ধতি:
এ =
বি বি আছে! = ডিরেক্টরেটারি
! এ =! বিদ্যমান আছে
&& = *
|| = +
[সম্পাদনা]
একটি সহজ রূপান্তর, কারণ ক্রিয়াকলাপ এবং এবং এবং পরস্পর বিতরণযোগ্য:
উপস্থিত &&! is ডিরেক্টরি; || ! বিদ্যমান
= এ * বি +! এ
= (এ +! এ) * (বি +! এ)
= 1 * (বি +! এ)
= বি +! এ
[/ সম্পাদনা]
উপস্থিত &&! is ডিরেক্টরি; || ! বিদ্যমান
= এ * বি +! এ
= এ * বি +! এ * 1 // পরিচয়
= এ * বি +! এ * (বি + 1) // অ্যানিহিলেটর
= এ * বি +! এ * বি +! এ / / বিতরণ এবং পরিচয়
= বি * (এ +! এ) +! এ //
বিতরণকাজ
= বি * 1 +! এ // পরিপূরক 2
= বি +! এ // পরিচয়
=! # নির্দেশিকা || ! বিদ্যমান
বা ডাবল পরিপূরক (!! x = x) সহ:
ক * বি +! এ
= !! (ক * বি +! ক)
=! (! (এ * বি) * এ)
=! ((!! +! বি) * এ)
=! (! এ * এ +) ! বি * এ)
=! (0 +! বি * এ)
=! (!! বি * এ)
= বি +! এ
=! ডিরেক্টরেটরি || ! বিদ্যমান
আমি "ব্যবহার করতে পছন্দ করি না!" যখন অভিব্যক্তিতে একাধিক শর্ত থাকে। আমি এটিকে আরও পঠনযোগ্য করে তুলতে কোডের লাইন যুক্ত করব।
doesNotExist = !exists;
isFile = exists && !isDirecotry;
if (isFile || doesNotExist)
{}
পূর্বে সূচিত হিসাবে, শর্তটি এটিকে হ্রাস করা যেতে পারে:
if (!(exists && isDirectory))
যাইহোক, আমি বাজি ধরব যে ডিরেক্টরি হওয়া অস্তিত্বকে বোঝায়। যদি তা হয় তবে আমরা শর্তটি এটিকে হ্রাস করতে পারি:
if (!isDirectory)