আমি আমার অবস্থাকে আরও উন্নত করতে কীভাবে পুনরায় ফর্ম্যাট করতে পারি?


35

আমার একটা শর্ত আছে

if(exists && !isDirectory || !exists)
{}

আমি কীভাবে এটি সংশোধন করতে পারি, যাতে এটি আরও বোধগম্য হয়।


1
আইসডাইরেক্টরির কি মূল্য থাকে যখন বিদ্যমান থাকে?
মার্কতানি

1
বুল টাইপ রয়েছে, ডিরেক্টরীও বুল টাইপ ভেরিয়েবল
স্পিনিট

5
যদি (! isDirectory) ... (বিদ্যমান ||! বিদ্যমান) সর্বদা সত্য হবে।
শার্ক

@ শার্ক - যদি existsএবং isDirectoryউভয়ই সত্য হয়?
pasawaya

আমি শিরোনামটি পড়েছিলাম "আমার ব্যক্তিত্বের সমস্যা আছে, আমি কি এটি ঠিক করার জন্য নিজের মনকে মুছতে পারি"। হ্যাঁ, আমি ক্লান্ত।
আনান

উত্তর:


110

|| পরিবর্তনমূলক তাই

if(!exists || (exists && !isDirectory))

সমতুল্য

এখন যেহেতু বিদ্যমান রয়েছে তার দ্বিতীয় অংশে সর্বদা সত্য আপনি এটিকে ||ড্রপ করতে পারেন &&:

if(!exists || !isDirectory)

অথবা আপনি আরও এক ধাপ এগিয়ে যেতে পারেন:

if(!(exists && isDirectory))

5
এখানে যা বোঝানো হয়েছিল কিন্তু স্পষ্টভাবে উল্লেখ করা হয়নি তা হ'ল &&তার চেয়ে বেশি প্রাধান্য রয়েছে (কমপক্ষে বেশিরভাগ সুপরিচিত ভাষায় - ব্যতিক্রমও থাকতে পারে) ||। সুতরাং a && b || cসমান (a && b) || cকিন্তু না a && (b || c)
পিয়েটার টার্ক

27
আমি মনে করি, এটি !exists || !isDirectoryআরও "বোধগম্য", কারণ, isDirectoryযদি সত্য হতে পারে না !exists। সুতরাং একজন মানুষ হিসাবে আমরা বলব "যদি এটি বিদ্যমান না থাকে বা এটি [উপস্থিত থাকে এবং এটি] ডিরেক্টরি না হয়"।
দুরোস

6
আমি পছন্দ করি! বিদ্যমান || গত একের ওপরে ডিরেক্টরী।
অপুরভ খুরসিয়া

3
||পার্শ্ব প্রতিক্রিয়া ছাড়াই মানগুলিতে ব্যবহৃত হলে কেবল পরিবর্তনশীল - উদাহরণস্বরূপ যদি ফাংশনগুলির সাথে ব্যবহৃত হয় তবে কিছু ফাংশন কল (শর্ট সার্কিট) নাও পেতে পারে বা ভিন্ন ক্রমে ভিন্ন মান ফেরত দেয়।
orlp

26
যে কেউ '&&', '||', '==', '! =' ইত্যাদি ইত্যাদির তুলনামূলক অগ্রাধিকারের উপর নির্ভর করে এবং বন্ধনী ব্যবহারের দাবিতে বন্ধনী ব্যবহার করে তাদের উদ্দেশ্য স্পষ্ট করে না। সমস্ত ভাষায় 'এন্ড অ্যান্ড বি' এর মতো কিছু সি 'এই মন্তব্যটির সমতুল্য যে আরও কয়েকটি অতিরিক্ত অক্ষর টাইপ করা এড়াতে লেখক সম্ভবত তাদের ভিড়ের মধ্যে পুরো বিষয়টিকে প্যাঁচিয়ে ফেলেছিলেন।
ব্রেন্ডন 16

51

প্রক্রিয়া হিসাবে, আমি একটি সত্য টেবিল তৈরি করার পরামর্শ দিচ্ছি:

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


4
পরবর্তী পদক্ষেপটি isDirectoryনির্ভর করে যে এটি নির্ভর করে exists। এটি উভয়ই ডিরেক্টরি হতে পারে এবং বিদ্যমান নেই।
ক্রিস্টোফার হামারস্ট্রিম

@ ক্রিস্টোফারহ্যামারস্ট্রম, প্রসঙ্গের বাইরে আমি ধরে নিতে পারি না যে ভেরিয়েবলগুলি একই জিনিসটিকে বোঝায় তবে এটি একটি বৈধ পয়েন্ট। ফলাফলটি কলাম এমন n/aজায়গায় ভরাট করা উচিত যেখানে রাজ্য অর্জন করা অসম্ভব এবং সেই অনুযায়ী সমীকরণ হ্রাস পেয়েছে।
zzzzBov

ঠিক আছে, যদি ভেরিয়েবল দুটি পৃথক প্রসঙ্গ উল্লেখ করে তবে সেগুলি খুব সংক্ষিপ্ত এবং তাদের নতুন নামকরণের প্রয়োজন।
ক্রিস্টোফার হামারস্ট্রিম

তবে সত্যের ছক তৈরি করা এবং এটি মূল্যায়ন করা এনপি-সম্পূর্ণ!
থমাস এডিং

@ থমাসডিং, তখন আপনার জন্য আমার কাছে দুটি উদ্ধৃতি রয়েছে, "তত্ত্বের ক্ষেত্রে তত্ত্ব এবং অনুশীলন একই; বাস্তবে তারা হয় না।" এবং "অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল"।
zzzzBov

22

আরও ভাল পঠনযোগ্যতার জন্য, আমি পদ্ধতিগুলিতে বুলিয়ান শর্তগুলি বের করতে পছন্দ করি:

if(fileNameUnused())
{...}

public boolean fileNameUnused() {
   return exists && !isDirectory || !exists;
}

বা আরও ভাল পদ্ধতির নাম সহ। আপনি যদি এই পদ্ধতির নামটি সঠিকভাবে দিতে পারেন তবে আপনার কোডের পাঠকের বুলিয়ান শর্তটি কী তা বোঝার দরকার নেই।


দরকারী নাম সম্পর্কে কিছু বলার জন্য +1। তবে কোথাও আপনাকে শর্তযুক্ত পুনরায় ফর্ম্যাট করতে হবে।
অপুরভ খুরসিয়া

4
এখনও একটি কম চরম বিকল্প, এটি এখনও অভিপ্রায় জানায়, কেবল ব্যবহৃত boolean fileNameUnused = !exists || !isDirectory; if (fileNameUnused) { doSomething(); }
স্টিভেন

8

আপনি কেবল ন -গো কেসটি পেরেক করার চেষ্টা করতে পারেন এবং যদি এটি প্রদর্শিত হয় তবে জামিন দিতে পারেন।

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
    // ...
}

কোড ভাঙা, চালিয়ে যাওয়া এবং একাধিক রিটার্ন স্টেটমেন্ট বিবেচনা করা হয় না?
ফ্রেইইট

8
@ ফ্রেইহাইট এটি প্রসঙ্গে নির্ভর করে। কখনও কখনও প্রারম্ভিক রিটার্ন বিবৃতি ইনডেন্টেশন হ্রাস করতে ব্যবহৃত হয়, এইভাবে পাঠযোগ্যতা বৃদ্ধি করে।
মার্কো ফিসেট

সেরা উত্তর - জটিল শর্তাদি তাদের পড়ার এবং সঠিকভাবে বোঝার জন্য প্রচুর পরিমাণে সময় অপচয় করে। ফলস্বরূপ প্রায়শই "পঠিত হিসাবে নেওয়া হয়" এবং প্রতারণামূলক বাগগুলি নিয়ে যায়।
mattnz

6

আপনি চিহ্নিত হিসাবে সত্য সারণী ব্যবহার করতে পারেন। পদক্ষেপের সংখ্যা হ্রাস করার জন্য দ্বিতীয় পদক্ষেপটি কেভি-মানচিত্র হতে পারে ।

বুলিয়ান বীজগণিত আইন ব্যবহার করা অন্য পদ্ধতি:

এ =
বি বি আছে! = ডিরেক্টরেটারি
! এ =! বিদ্যমান আছে

&& = *
|| = +

[সম্পাদনা]
একটি সহজ রূপান্তর, কারণ ক্রিয়াকলাপ এবং এবং এবং পরস্পর বিতরণযোগ্য:

উপস্থিত &&! is ডিরেক্টরি; || ! বিদ্যমান
= এ * বি +! এ
= (এ +! এ) * (বি +! এ)
= 1 * (বি +! এ)
= বি +! এ
[/ সম্পাদনা]

উপস্থিত &&! is ডিরেক্টরি; || ! বিদ্যমান
= এ * বি +! এ
= এ * বি +! এ * 1 // পরিচয়
= এ * বি +! এ * (বি + 1) // অ্যানিহিলেটর
= এ * বি +! এ * বি +! এ / / বিতরণ এবং পরিচয়
= বি * (এ +! এ) +! এ // বিতরণকাজ
= বি * 1 +! এ // পরিপূরক 2
= বি +! এ // পরিচয়
=! # নির্দেশিকা || ! বিদ্যমান

বা ডাবল পরিপূরক (!! x = x) সহ:

ক * বি +! এ
= !! (ক * বি +! ক)
=! (! (এ * বি) * এ)
=! ((!! +! বি) * এ)
=! (! এ * এ +) ! বি * এ)
=! (0 +! বি * এ)
=! (!! বি * এ)
= বি +! এ
=! ডিরেক্টরেটরি || ! বিদ্যমান


আনুষ্ঠানিক নিয়মাবলী ব্যবহারের জন্য +1 (কলেজের প্রথম বছরের পরে আমি এর মধ্যে একটিরও দেখতে পাব না))
নেমানজা বোরিক


5

আমি "ব্যবহার করতে পছন্দ করি না!" যখন অভিব্যক্তিতে একাধিক শর্ত থাকে। আমি এটিকে আরও পঠনযোগ্য করে তুলতে কোডের লাইন যুক্ত করব।

doesNotExist = !exists;
isFile = exists && !isDirecotry;
if (isFile || doesNotExist) 
   {}

+1 এটি "যদি ফাইল হয় বা উপস্থিত না থাকে" হিসাবে পড়া খুব সহজ করে তোলে যা ইংরেজির অনেক কাছাকাছি।
ফিল


1

পূর্বে সূচিত হিসাবে, শর্তটি এটিকে হ্রাস করা যেতে পারে:

if (!(exists && isDirectory))

যাইহোক, আমি বাজি ধরব যে ডিরেক্টরি হওয়া অস্তিত্বকে বোঝায়। যদি তা হয় তবে আমরা শর্তটি এটিকে হ্রাস করতে পারি:

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