শর্তসাপেক্ষে ব্যবহারের সুবিধা?: (টেরিনারি) অপারেটর


101

এর সুবিধাগুলি এবং ঘাটতিগুলি কী?? অপারেটর স্ট্যান্ডার্ড যদি-অন্য বিবৃতিটির বিরোধিতা করে। স্পষ্টত হচ্ছে:

শর্তসাপেক্ষ?: অপারেটর

  • প্রত্যক্ষ মানের তুলনা এবং অ্যাসাইনমেন্টের সাথে কাজ করার সময় সংক্ষিপ্ত এবং আরও সংক্ষিপ্ত
  • যদি / অন্য নির্মাণের মতো নমনীয় বলে মনে হয় না

স্ট্যান্ডার্ড যদি / অন্যথায়

  • আরও পরিস্থিতিতে প্রয়োগ করা যেতে পারে (যেমন ফাংশন কল)
  • প্রায়শই অযথা দীর্ঘ হয়

বিবৃতি অনুসারে পাঠ্যযোগ্যতা পৃথক পৃথক বলে মনে হচ্ছে। প্রথমে?: অপারেটরের সংস্পর্শে আসার পরে কিছুক্ষণের জন্য, এটি ঠিক কীভাবে কাজ করেছে তা হজম করতে আমার কিছুটা সময় নিয়েছিল। আপনি যেখানেই সম্ভব এটি ব্যবহার করার পরামর্শ দিচ্ছেন, বা যদি / অন্যটি দেওয়া হয় যে আমি অনেক নন-প্রোগ্রামারদের সাথে কাজ করি?


8
আপনি ইতিমধ্যে এর সংক্ষেপে পেয়েছেন।
বায়রন হুইললক

1
@ নিকোলাস নাইট: আমি অনুমান করছি যে ওপি এর অর্থ হ'ল আপনি করতে পারবেন না, যেমন SomeCheck() ? DoFirstThing() : DoSecondThing();- আপনাকে কোনও মান ফেরত দেওয়ার জন্য ভাবটি ব্যবহার করতে হবে।
ড্যান তাও

6
এটি যেখানে স্পষ্ট তা ব্যবহার করুন , যদি / অন্যটি না হয় তবে এটি আটকে দিন। কোড স্পষ্টতা আপনার প্রধান বিবেচনা করা উচিত।
হলস্ক

8
তুমি কি দেখেছ '??' এখনো? গম্ভীরভাবে, আপনি যদি ভাবেন তিনটি প্রশান্তি ...
pdr

3
এটিকে অনেকে "টার্নারি অপারেটর" হিসাবে কল্পনা না করার জন্য +1 করুন। যদিও এটি সি # তে একমাত্র ত্রৈমাসিক (অ্যানারি এবং বাইনারি বিরোধী) অপারেটর, এটি এর নাম নয়।
জন এম গ্যান্ট

উত্তর:


122

আমি মূলত এটি কেবল তখনই ব্যবহার করার পরামর্শ দেব যখন ফলাফল প্রাপ্ত বিবৃতিটি খুব সংক্ষিপ্ত হয় এবং পাঠযোগ্যতার ত্যাগ ছাড়াই যদি / অন্য সমতুল্য ক্ষেত্রে সংক্ষিপ্ততার উল্লেখযোগ্য বৃদ্ধি উপস্থাপন করে।

ভালো উদাহরণ:

int result = Check() ? 1 : 0;

খারাপ উদাহরণ:

int result = FirstCheck() ? 1 : SecondCheck() ? 1 : ThirdCheck() ? 1 : 0;

5
ভাল কল, কিন্তু রেকর্ডের জন্য, এটি "সংক্ষিপ্ত"।
এমকিপিপি

6
@ মাকান্দার, আপনি কি তা সম্পর্কে নিশ্চিত? Merriam-webster.com
বায়রন

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

9
দ্বিতীয় উদাহরণে পাঠযোগ্যতা সহজেই আরও ভাল ফর্ম্যাটিংয়ের সাথে সংশোধন করা যেতে পারে। তবে, যেমন ওপি সুপারিশ করছে, এটি পাঠযোগ্যতা এবং স্বল্পতা বনাম ভার্বোসিতে নেমে আসে।
নাথান আর্নস্ট

4
ওপি-র প্রশ্নের অংশ নয়, তবে এটি লক্ষণীয় গুরুত্বপূর্ণ যে সত্যতা এই যে যে আপনি returnটের্নারি অপারেশনের ফলাফলের অংশ হতে পারবেন না । উদাহরণস্বরূপ: check() ? return 1 : return 0;কাজ করবে না, তবে return check() ? 1 : 0;করবে। প্রোগ্রামিং এ এই ছোট্ট quirks সন্ধান করতে সর্বদা মজা।
সিএসএস

50

এটি অন্যান্য উত্তরগুলির দ্বারা বেশ কভার করা হয়েছে, তবে "এটি একটি অভিব্যক্তি" সত্যিই ব্যাখ্যা করে না যে এটি এত দরকারী কেন ...

সি ++ এবং সি # এর মতো ভাষাগুলিতে আপনি স্থানীয় পঠনক্ষেত্র ক্ষেত্রগুলি (একটি পদ্ধতির অংশের মধ্যে) সংজ্ঞায়িত করতে পারেন। প্রচলিত যদি / তবে বিবৃতি দিয়ে এটি সম্ভব হয় না কারণ কেবলমাত্র এক বিবৃতিতে কেবল পাঠযোগ্য ক্ষেত্রের মান নির্ধারণ করতে হয়:

readonly int speed = (shiftKeyDown) ? 10 : 1;

যেমনটি হয় না:

readonly int speed;  
if (shifKeyDown)  
    speed = 10;    // error - can't assign to a readonly
else  
    speed = 1;     // error  

একইভাবে আপনি অন্যান্য কোডে একটি স্তরীয় এক্সপ্রেশন এম্বেড করতে পারেন। উত্স কোডটি আরও কমপ্যাক্ট করার পাশাপাশি (এবং কিছু ক্ষেত্রে ফলস্বরূপ আরও পাঠযোগ্য) এটি উত্পন্ন মেশিন কোডটিকে আরও কমপ্যাক্ট এবং দক্ষ করে তুলতে পারে:

MoveCar((shiftKeyDown) ? 10 : 1);

... একই পদ্ধতিতে দু'বার কল করার চেয়ে কম কোড তৈরি করতে পারে:

if (shiftKeyDown)
    MoveCar(10);
else
    MoveCar(1);

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

object thing = (reference == null) ? null : reference.Thing;

... লম্বা বাতাসযুক্ত / অন্য সমতুল্য হওয়ার চেয়ে পড়ার / পার্স করা / বোঝার (একবার আপনি এটি ব্যবহার করার পরে) কেবল দ্রুততর হয়, সুতরাং এটি আপনাকে কোড 'দ্রুত' ছাঁটাইতে সহায়তা করতে পারে।

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


@ জামিনগ্রি "এর অর্থ এই নয় যে, যখন ধ্রুবক তৈরি করা হয় তখন এটি 10 ​​বা 1 তে সেট করা হয়" " আপনি কি এটি বলতে না করে সেটাই চাইছেন? ভুল মন্তব্যে আপনি মুছে ফেলার চেষ্টা করছেন তার চেয়ে নতুন সি ++ প্রোগ্রামারদের আরও বিভ্রান্তির কারণ হতে পারে;)
ক্লোনকেক্স

5
ভবিষ্যতে পাঠকদের জন্য " কনস্ট ইনট স্পিড = (শিফটকিডাউন)? 10: 1; " দ্বারা এটির আগমনকারীদের অর্থ, এর অর্থ হ'ল ধ্রুবকটি প্রথম তৈরি করা হয় তখন এটি 10 ​​বা 1 এ সেট করা হয় It এর অর্থ এই নয় যে প্রতিবার ধ্রুবক অ্যাক্সেস করা হয় এটি একটি চেক করে। (কেবলমাত্র নতুন সি ++ প্রোগ্রামারকে বিভ্রান্ত করার জন্য)
জামিন গ্রে

2
... বা অন্য উপায়ে বলতে constগেলে , একটি ধ্রুবক, অর্থাৎ এটি যে বিবৃতিতে ঘোষণা করা হয় তা কার্যকর করার পরে এটি পরিবর্তন করা যায় না।
জেসন উইলিয়ামস

1
@JaminGrey। readonlyযদিও এটি হওয়া উচিত নয় ? আমি সর্বদা ভাবতাম const" সংকলনের সময় সমাধান করা এবং যেখানেই ব্যবহৃত হবে ইন-রেখাযুক্ত "।
নোলোনার

1
@ColinWiseman, এটি একটি এর উদাহরণ : কিভাবে চিত্রিত করা করতে ব্যবহৃত হবে না। আমি স্পষ্টভাবে জানিয়েছি যে আপনি এটি করতে পারছেন বলেই এর অর্থ এই নয় যে কোনও নির্দিষ্ট ক্ষেত্রে এটি করা উচিত "সেরা" জিনিস। এটি কার্যকর করার জন্য, পাঠক প্রতিবার যখন তাদের কোনও মস্তিষ্ক ব্যবহার করবেন তখন এটি তাদের পক্ষে কার্যকর হতে পারে।
জেসন উইলিয়ামস

14

আমি সাধারণত একটি টেরিনারি অপারেটর নির্বাচন করি যখন আমার অন্যথায় প্রচুর নকল কোড থাকে।

if (a > 0)
    answer = compute(a, b, c, d, e);
else
    answer = compute(-a, b, c, d, e);

একটি টেরিনারি অপারেটরের সাথে, এটি নিম্নলিখিত দ্বারা সম্পন্ন হতে পারে।

answer = compute(a > 0 ? a : -a, b, c, d, e); 

12
ব্যক্তিগতভাবে আমি করতে হবে aVal = a > 0 ? a : -a; answer = compute(aVal,b,c,d,e);বিশেষ করে যদি b, c, dএবং eখুব প্রয়োজনীয় চিকিত্সা।
কর্সিকা

10
এই উদাহরণে শর্তযুক্ত কেন ব্যবহার করবেন? কেবলমাত্র Abs (a) এবং একবার গণনা () কল করুন।
অ্যাশ

2
হ্যাঁ, আমি এর সেরা উদাহরণটি তৈরি করিনি। :)
রায়ান উজ্জ্বল

কোনও নবজাতকের কাছে এটি সমতুল্য দেখাচ্ছে না। এটির উত্তর = গণনা (a> 0? A, b, c, d, e: -a, b, c, d, e) হওয়ার দরকার হবে না; ?
pbreitenbach

@pribitenbach: না - এটি অগ্রাধিকারের বিষয় - প্রথম যুক্তিটি compute(...)হ'ল a > 0 ? a : -1, যা সমস্ত অন্যান্য কমা-বিচ্ছিন্ন যুক্তি থেকে পৃথকভাবে মূল্যায়ন করা হয়। যাইহোক, দুর্ভাগ্যক্রমে সি ++ এর মধ্যে আপনার প্রশ্নটি কমা-বিচ্ছিন্ন মানগুলির "টিপলস" পরিচালনা করার জন্য স্বরলিপিটির অভাব রয়েছে, তাই এমনকি a > 0 ? (a, b, c, d, e) : (-a, b, c, d, e)এটি অবৈধ, এবং এটির মতো খুব বেশি কিছু নেই যা computeনিজেই পরিবর্তন ছাড়াই কাজ করে।
টনি ডেলরয়

12

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


3
ওয়েব দেবের মধ্যে +1 ডিফল্ট মানগুলি টর্নারি অপারেটরটি ব্যবহারের জন্য একটি দুর্দান্ত উদাহরণ
বায়রন হুইটলক

11

একটি দুর্দান্ত ব্যবহার হ'ল:

x = foo ? 1 :
    bar ? 2 :
    baz ? 3 :
          4;

10
পিএইচপি-তে এই বিষয়ে সতর্কতা অবলম্বন করুন, টের্নারি অপারেটর পিএইচপি-তে ভুল উপায়ে সংযুক্ত করে। মূলত, যদি fooমিথ্যা হয়, তবে অন্যান্য পরীক্ষা না করে পুরো জিনিসটি 4 এ মূল্যায়ন করবে।
টম বাসবি

4
@ টমবসবি - বাহ পিএইচপি ঘৃণা করার আরেকটি কারণ, যদি আপনি এমন কেউ হন যা ইতিমধ্যে পিএইচপিকে ঘৃণা করে।
টড লেহম্যান

6

শর্তসাপেক্ষ অপারেটর সংক্ষিপ্ত শর্তগুলির জন্য দুর্দান্ত:

varA = boolB ? valC : valD;

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

doSomeStuffToSomething(shouldSomethingBeDone()
    ? getTheThingThatNeedsStuffDone()
    : getTheOtherThingThatNeedsStuffDone());

তবে, যদি / অন্যগুলি ব্লক করে (এবং কেন আমি তাদের পছন্দ করি) ব্যবহার করার বড় সুবিধা হ'ল পরে আসা এবং শাখায় কিছু অতিরিক্ত যুক্তি যুক্ত করা সহজ,

if (shouldSomethingBeDone()) {
    doSomeStuffToSomething(getTheThingThatNeedsStuffDone());
    doSomeAdditionalStuff();
} else {
doSomeStuffToSomething(getTheOtherThingThatNeedsStuffDone());
}

বা অন্য শর্ত যুক্ত করুন:

if (shouldSomethingBeDone()) {
    doSomeStuffToSomething(getTheThingThatNeedsStuffDone());
    doSomeAdditionalStuff();
} else if (shouldThisOtherThingBeDone()){
    doSomeStuffToSomething(getTheOtherThingThatNeedsStuffDone());
}

সুতরাং, শেষ পর্যন্ত, এটি এখন আপনার সুবিধার জন্য (ব্যবহারে সংক্ষিপ্ত:?) বনাম বনাম আপনার (এবং অন্যদের) সুবিধার জন্য। এটি একটি রায় কল ... তবে অন্যান্য কোড-ফর্ম্যাটিং ইস্যুগুলির মতো, কেবল আসল নিয়মটিই সামঞ্জস্যপূর্ণ হওয়া এবং আপনার কোডটি (বা গ্রেড!) বজায় রাখতে হবে তাদের জন্য দৃষ্টিভঙ্গি হওয়া উচিত।

(সমস্ত কোড চোখের সংকলিত)


5

টার্নারি অপারেটরটি ব্যবহার করার সময় একটি জিনিস সনাক্ত করতে হবে যে এটি কোনও বিবৃতি নয়।

ফাংশনীয় ভাষায় স্কিমের মতো পার্থক্য বিদ্যমান নেই:

(যদি (> আব) আব)

শর্তসাপেক্ষ?? অপারেটর "অন্য / যদি নির্মাণের মতো নমনীয় বলে মনে হয় না"

ক্রিয়ামূলক ভাষায় এটি হয়।

যখন অপরিহার্য ভাষাগুলিতে প্রোগ্রামিং করা হয় তখন আমি সাধারণত যখন আমি প্রকাশ (অ্যাসাইনমেন্ট, শর্তসাপেক্ষ বিবৃতি ইত্যাদি) ব্যবহার করি তখন পরিস্থিতিতে তিনটি অপারেটর প্রয়োগ করি।


5

যদিও উপরের উত্তরগুলি বৈধ, এবং আমি পঠনযোগ্যতা গুরুত্বপূর্ণ হওয়ার সাথে একমত, অন্য দুটি বিষয় বিবেচনা করার আছে:

  1. সি # 6 এ আপনার এক্সপ্রেশন-দেহ পদ্ধতি থাকতে পারে।

এটি ত্রৈমাসিকটি ব্যবহার বিশেষত সংক্ষিপ্ত করে তোলে:

string GetDrink(DayOfWeek day) 
   => day == DayOfWeek.Friday
      ? "Beer" : "Tea";
  1. অন্তর্নিহিত ধরণের রূপান্তর করার ক্ষেত্রে আচরণের পার্থক্য রয়েছে।

আপনার যদি প্রকারগুলি থাকে T1এবং T2তা উভয়ই স্পষ্টত রূপান্তরিত হতে পারে Tতবে নীচে কাজ করবে না :

T GetT() => true ? new T1() : new T2();

(কারণ সংকলক ত্রৈমাসিক প্রকাশের ধরণ নির্ধারণ করার চেষ্টা করে এবং T1এবং এর মধ্যে কোনও রূপান্তর নেই is T2)

অন্যদিকে, if/elseনীচের সংস্করণটি কাজ করে:

T GetT()
{
   if (true) return new T1();
   return new T2();
}

কারণ T1রূপান্তরিত হয় Tএবং তাই হয়T2


5

কখনও কখনও এটি প্রথম স্তরে পড়ার জন্য একটি বুল মান নির্ধারণ সহজ করে তোলে:

// With
button.IsEnabled = someControl.HasError ? false : true;

// Without
button.IsEnabled = !someControl.HasError;

4

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

আপনার আরও আগ্রহের হতে পারে ?? অপারেটর


4

শর্তসাপেক্ষ অপারেটরের সুবিধা হ'ল এটি একটি অপারেটর। অন্য কথায়, এটি একটি মান প্রদান করে। যেহেতু ifএকটি বিবৃতি, সুতরাং এটি কোনও মান ফেরত দিতে পারে না।


4

আমি / অন্য যুক্তি যদি টার্নারি (? :) অপারেটরটিকে সাধারণ একক লাইন অ্যাসাইনমেন্টে সীমাবদ্ধ করার প্রস্তাব দিই। এই প্যাটার্নটির অনুরূপ কিছু:

if(<boolCondition>) {
    <variable> = <value>;
}
else {
    <variable> = <anotherValue>;
}

সহজেই রূপান্তরিত হতে পারে:

<variable> = <boolCondition> ? <value> : <anotherValue>;

আমি সেই পরিস্থিতিতে টেরিনারি অপারেটরটি ব্যবহার করা এড়াতে চাই যার জন্য / অন্যথায় যদি / অন্য, নেস্টেড / / অন্যথায় বা যদি / অন্য কোনও শাখার যুক্তি যুক্ত হয় যা একাধিক লাইনের মূল্যায়নের ফলাফল দেয়। এই পরিস্থিতিতে টেরিনারি অপারেটর প্রয়োগের ফলে অপঠনযোগ্য, বিভ্রান্তিকর এবং নিয়ন্ত্রণহীন কোড হতে পারে। আশাকরি এটা সাহায্য করবে.


2

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


2

আমি নিজেকে যে দৃশ্যটি সবচেয়ে বেশি ব্যবহার করছি তা হ'ল ডিফল্ট মানগুলির এবং বিশেষত রিটার্নগুলির জন্য

return someIndex < maxIndex ? someIndex : maxIndex;

এগুলি সত্যই একমাত্র জায়গা যা আমি এটি দেখতে সুন্দর, কিন্তু তাদের জন্য আমি করি।

আপনি যদি কোনও বুলিয়ান খুঁজছেন তবে এটি কখনও কখনও উপযুক্ত জিনিসগুলির মতো দেখাবে:

bool hey = whatever < whatever_else ? true : false;

কারণ এটি পড়া এবং বুঝতে খুব সহজ, তবে এই ধারণাটি সবসময় আরও স্পষ্ট করার জন্য টস করা উচিত:

bool hey = (whatever < whatever_else);

2

আপনার যদি একই শর্তে একাধিক শাখার প্রয়োজন হয় তবে একটি ব্যবহার করুন:

if (A == 6)
  f(1, 2, 3);
else
  f(4, 5, 6);

আপনার যদি বিভিন্ন শর্তযুক্ত একাধিক শাখার প্রয়োজন হয়, তবে যদি বিবৃতি গণনা তুষারপাত হয়, আপনি তিনটি ব্যবহার করতে চাইবেন:

f( (A == 6)? 1: 4, (B == 6)? 2: 5, (C == 6)? 3: 6 );

এছাড়াও, আপনি আরম্ভের ক্ষেত্রে টার্নারি অপারেটরটি ব্যবহার করতে পারেন।

const int i = (A == 6)? 1 : 4;

যদি খুব অগোছালো হয় তবে তা করা:

int i_temp;
if (A == 6)
   i_temp = 1;
else
   i_temp = 4;
const int i = i_temp;

আপনি আর / এর ভিতরে আরম্ভ করতে পারবেন না, কারণ এটি সুযোগ পরিবর্তন করে। তবে রেফারেন্স এবং কনস্টের ভেরিয়েবল কেবল আরম্ভের সাথে আবদ্ধ হতে পারে।


2

টেরিনারি অপারেটরকে একটি মূল্যের মধ্যে অন্তর্ভুক্ত করা যেতে পারে, অন্যদিকে যদি-তবে-অন্যরা করতে পারে না; অন্যদিকে, যদি-তবে-অন্যথায় লুপগুলি এবং অন্যান্য বিবৃতিগুলি কার্যকর করতে পারে, অন্যদিকে, টেরিনারি অপারেটর কেবলমাত্র (সম্ভবত বাতিল) মূল্যায়ন কার্যকর করতে পারে।

সম্পর্কিত নোটে, && এবং || অপারেটররা কিছু কার্যকর করার ধরণগুলি মঞ্জুরি দেয় যা যদি-তবে-অন্য দিয়ে কার্যকর করা শক্ত হয়। উদাহরণস্বরূপ, যদি কারও কাছে কল করার জন্য কয়েকটি ফাংশন থাকে এবং কোনও কোড ব্যর্থ হয় তবে কোনও কোডের টুকরাকটি কার্যকর করতে ইচ্ছুক থাকলে, এটি অ্যান্ড অপারেটরটি ব্যবহার করে দুর্দান্তভাবে সম্পন্ন করা যায়। অপারেটরটি না করে এটি করার জন্য হয় হয় রিডানড্যান্ট কোড, একটি গোটো বা অতিরিক্ত পতাকা চলক।


1

সঙ্গে সি # 7 , আপনি নতুন ব্যবহার করতে পারেন ; ref স্থানীয়দের সুত্র সামঞ্জস্যপূর্ণ ভেরিয়েবল শর্তসাপেক্ষ নিয়োগ প্রক্রিয়া সহজ করার বৈশিষ্ট্য। সুতরাং এখন, আপনি না শুধুমাত্র করতে পারেন:

int i = 0;

T b = default(T), c = default(T);

// initialization of C#7 'ref-local' variable using a conditional r-value⁽¹⁾

ref T a = ref (i == 0 ? ref b : ref c);

... তবে অত্যন্ত দুর্দান্ত:

// assignment of l-value⁽²⁾ conditioned by C#7 'ref-locals'

(i == 0 ? ref b : ref c) = a;

কোডের এই লাইনটি মানটির উপর নির্ভর করে aহয় bবা এর মান নির্ধারণ করে ।ci



নোটসমূহ
১। আর-মান হ'ল একটি অ্যাসাইনমেন্টের ডান হাতের দিক, যে মানটি নির্ধারিত হয়।
২. l-value হ'ল একটি অ্যাসাইনমেন্টের বাম দিকের দিক, ভেরিয়েবল যা নির্ধারিত মানটি গ্রহণ করে।

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