জাভা কী ?: অপারেটরকে বলা হয় এবং এটি কী করে?


161

আমি জাভা এর সাথে কয়েক বছর ধরে কাজ করছি, তবে সম্প্রতি অবধি আমি এই নির্মাণটি চালিয়েছি:

int count = isHere ? getHereCount(index) : getAwayCount(index);

এটি সম্ভবত খুব সাধারণ প্রশ্ন, তবে কেউ কি এটি ব্যাখ্যা করতে পারেন? আমি কীভাবে এটি পড়তে পারি? আমি নিশ্চিত যে আমি জানি এটি কীভাবে কাজ করে।

  • যদি isHereসত্য হয়, getHereCount()তাকে বলা হয়,
  • যদি isHereমিথ্যা getAwayCount()বলা হয় তাকে বলা হয়।

সঠিক? এই কনস্ট্রাক্ট কে কী বলা হয়?


2
এই প্রশ্নের সি ++ সংস্করণ (এছাড়াও গতকাল জিজ্ঞাসা করা হয়েছে, বাস্তবে) জিজ্ঞাসা করার জন্য stackoverflow.com/questions/795286/hat-does-do-in-c দেখুন ।
মাইকেল

2
মনে রাখবেন যে সি / সি ++ / জাভা বিশ্বটি এমন লোকদের মধ্যে প্রায় সমানভাবে বিভক্ত যারা মনে করেন যে এটি কুৎসিত এবং বিভ্রান্তিমূলক এবং এটি প্লেগের মতো এড়িয়ে যাবে, এবং আপনি যদি মনে করেন যে সত্যিকার অর্থে আপনি সি, সি ++ বা জাভা জানার দাবি করতে পারবেন না তবে আপনি এটি চিনতে এবং ভাবতে বিরতি ছাড়াই এটি ব্যবহার করতে পারে না।
পল টমবলিন

3
এটিকে জাফের মধ্যে সাধারণত সবচেয়ে সহজ এবং সহজতম ক্ষেত্রে ব্যবহার করার জন্য খারাপ রূপ হিসাবে বিবেচনা করা হয়। যদি আপনি নিজেকে বাসা বাঁধতে দেখেন তবে আপনি বাইরে চলে যাচ্ছেন। অন্যদিকে, সি সংস্কৃতিতে যেখানে দ্রুত এবং চতুর কোডের স্পষ্টতার উপরে মূল্য দেওয়া হয়, এটি গ্রহণযোগ্য বলে মনে করা হয়।
যিশাই

17
উত্তর_ থেকে_উক্তি = (স্বীকৃতি_অপারেটর)? (সামাজিক_স্বীকার্য): (কনডেসেন্ডিং_ফিংগার_ওয়াগ)
ড্যান

আপনি আরও তথ্যের জন্য এই সংস্থানটি উল্লেখ করতে পারেন ।
শিব

উত্তর:


189

হ্যাঁ, এটি একটি সংক্ষিপ্ত রূপ

int count;
if (isHere)
    count = getHereCount(index);
else
    count = getAwayCount(index);

একে শর্তসাপেক্ষ অপারেটর বলা হয় । অনেক লোক (ভ্রান্তভাবে) এটিকে টার্নারি অপারেটর বলে , কারণ এটি জাভা, সি, সি ++ এবং সম্ভবত অন্যান্য অনেক ভাষায় একমাত্র ত্রিনিয়ী (ত্রি-যুক্তি) অপারেটর। তবে তাত্ত্বিকভাবে আরও একটি টেরিনারি অপারেটর থাকতে পারে, যেখানে কেবলমাত্র একটি শর্তসাপেক্ষ অপারেটর থাকতে পারে

অফিসিয়াল নামটি জাভা ভাষার নির্দিষ্টকরণে দেওয়া হয়েছে :

§15.25 শর্তাধীন অপারেটর? :

শর্তসাপেক্ষ অপারেটর ? :অন্য দুটি এক্সপ্রেশনগুলির মধ্যে কোনটির মূল্যায়ন করা উচিত তা সিদ্ধান্ত নিতে একটি এক্সপ্রেশনের বুলিয়ান মান ব্যবহার করে।

নোট করুন যে উভয় শাখায় অবশ্যই ফিরতি মান সহ পদ্ধতিগুলি হতে হবে:

এটি দ্বিতীয় বা তৃতীয় অপারেন্ড এক্সপ্রেশনটি একটি শূন্য পদ্ধতির প্রার্থনা হওয়ার জন্য একটি সংকলন-সময় ত্রুটি।

প্রকৃতপক্ষে, অভিব্যক্তি বিবৃতিগুলির ব্যাকরণের দ্বারা ( .814.8 ), শর্তাধীন অভিব্যক্তিটি কোনও প্রসঙ্গে যেখানে শূন্য পদ্ধতির ডাকে উপস্থিত হতে পারে সেখানে উপস্থিত হওয়ার অনুমতি নেই।

সুতরাং, যদি doSomething()এবং doSomethingElse()অকার্যকর পদ্ধতি হয়, আপনি এটি সংকোচন করতে পারবেন না:

if (someBool)
    doSomething();
else
    doSomethingElse();

এটিতে:

someBool ? doSomething() : doSomethingElse();

সহজ কথা:

booleanCondition ? executeThisPartIfBooleanConditionIsTrue : executeThisPartIfBooleanConditionIsFalse 

আমি বুঝতে পারছি না নীচেরটি কীটি ভুল করে। আমি আপনাকে এবং সমস্ত বিশ্বাস করি। এটি আমার কাছে আসল হিসাবে একই দেখায়। এর কারণ কি তারা কেবলমাত্র একটি অন্য ফাংশন কল করে যা কোনও মান ফিরে আসতে পারে এবং নাও করতে পারে এবং পরবর্তী কোড সেটটি চালানোর অনুমতি দেয়?
জননি

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

এটি তার চেয়ে কিছুটা বেশি বলে। এটি বলে যে শর্তসাপেক্ষ অপারেটরকে অনুমতি দেওয়া হয় না যেখানে শূন্য পদ্ধতিতে কুল উপস্থিত হয়। সুতরাং, উদাহরণস্বরূপ, নিম্নলিখিত বিবৃতি: ভ্যালিড: স্ট্রিং x = (মিথ্যা)? "এক্স": "ওয়াই"; ভ্যালিড নয়: (মিথ্যা)? "এক্স": "ওয়াই";
kenj0418

4
ভবিষ্যতে অন্য রাষ্ট্রপতি থাকার সম্ভাবনা থাকলেও ওবামাকে "রাষ্ট্রপতি" হিসাবে উল্লেখ করা যেমন ভুল (২০১ 2016 সালে) ভুল হয় না, তেমনি এটিকে "টার্নারি অপারেটর" বলা ভুল হবে না।
দাউদ ইবনে কেরেম

2
@DawoodibnKareem আমি মাইকেল ইচ্ছাকৃতভাবে অন্তর্ভুক্ত মনে theএর italicisation মধ্যে the ternary operator, এবং যে তিনি কি এর মানে হল ভ্রান্ত, যে হয় না ternary operatorভ্রান্ত হয়। তিন অপারেটর যে বোঝা, মাইকেল বলেছেন, এটি শুধুমাত্র এক, পালাক্রমে এক নেতৃত্ব অন্য কোন তিন অপারেটর, যা কি মাইকেল বলছে ভ্রান্ত হয় হতে পারে অনুমান করা যেতে পারে, যা, এবং আমি একমত চাই, এটা হবে হতে একটি ভুল ধারণা।
ঘোটি এবং চিপস

32

অন্যরা যুক্তিযুক্ত পরিমাণে এর উত্তর দিয়েছেন, তবে প্রায়শই "টার্নারি অপারেটর" নাম দিয়ে।

আমি যে প্যাডেন্ট হয়েছি, আমি এটিকে পরিষ্কার করতে চাই যে অপারেটরের নাম শর্তসাপেক্ষ অপারেটর বা "শর্তসাপেক্ষ অপারেটর?:"। এটি একটি টার্নারি অপারেটর (এটিতে তিনটি অপারেশন রয়েছে) এবং জাভাতে এই মুহুর্তে এটিই একমাত্র টেরিনারি অপারেটর হিসাবে ঘটে।

তবে অনুমানটি বেশ পরিষ্কার যে এর নামটি শর্তসাপেক্ষ অপারেটর বা "শর্তসাপেক্ষ অপারেটর?:" হ'ল একেবারেই দ্ব্যর্থহীন। আমি মনে করি এটি নামটি দিয়ে কল করা আরও স্পষ্ট, কারণ এটি অপারেটরের কতটা অপারেশন রয়েছে তার চেয়ে কিছুটা (শর্তের মূল্যায়ন) আচরণের ইঙ্গিত দেয়।


3
এই উত্তরটি প্রযুক্তিগতভাবে সঠিক। তবে, যেহেতু কেবলমাত্র একটি মাত্র তিনটি অপারেটর রয়েছে আপনি প্রায়শই দেখেন যে এটি টার্নারি অপারেটর হিসাবে পরিচিত। যদিও এই নামটি অপারেটরের সম্পূর্ণ অর্থ বোঝায় না, এটি আটকে যাওয়া একটি নাম। আপনি যদি "টার্নারি অপারেটর" নামটি উল্লেখ করেন তবে প্রোগ্রামাররা জানেন যে আপনি কী বলছেন। আপনি যে অনুমানের কথা উল্লেখ করেছেন তা এই অপারেটরটিকে "টেরিনারি শর্তসাপেক্ষ" হিসাবে উল্লেখ করে যা আরও তথ্যবহুল বলে মনে হয়। java.sun.com/docs/books/jls/third_edition/html/…
গ্যারি

17
আমি কেবল মনে করি এটির সংজ্ঞায়িত নাম দিয়ে কোনও কল করা ভাল। বিশেষত, জাভা যদি আর কোনও ত্রিনিরি অপারেটর পায় তবে "শর্তসাপেক্ষ অপারেটর" শব্দটি ব্যবহার করা লোকেরা এখনও সঠিক এবং দ্ব্যর্থহীন হবে - যারা কেবল "টার্নারি অপারেটর" বলে তাদের বিপরীতে। হ্যাঁ, "টার্নারি অপারেটর" বাক্যাংশটি আটকেছে - আমার উত্তর এটি "আনস্টিক" করার প্রয়াসের অংশ, ঠিক যেমন আমি দাবিটি সংশোধন করার চেষ্টা করেছি যে "অবজেক্টগুলি রেফারেন্স দ্বারা পাস হয়েছে"।
জন স্কিটি

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

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

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

17

সান জাভা স্পেসিফিকেশন অনুসারে , এটিকে শর্তাধীন অপারেটর বলা হয়। 15.25 বিভাগ দেখুন। আপনি এটি ঠিক কি ঠিক আছে।

শর্তসাপেক্ষ অপারেটর? : অন্য দুটি প্রকাশের মধ্যে কোনটির মূল্যায়ন করা উচিত তা সিদ্ধান্ত নিতে একটি এক্সপ্রেশনের বুলিয়ান মান ব্যবহার করে।

শর্তসাপেক্ষ অপারেটরটি সিন্ট্যাক্টিকভাবে ডান-অ্যাসোসিয়েটিভ (এটি ডান থেকে বামে গ্রুপ করে), যাতে a? B: c? D: e? F: g এর অর্থ একটি? B: (সি? ডি: (ই? এফ) : গ্রাম))।

ConditionalExpression:
        ConditionalOrExpression
        ConditionalOrExpression ? Expression : ConditionalExpression

শর্তসাপেক্ষ অপারেটরের তিনটি অপারেন্ড এক্সপ্রেশন রয়েছে; ? প্রথম এবং দ্বিতীয় প্রকাশের মধ্যে উপস্থিত হয় এবং: দ্বিতীয় এবং তৃতীয় এক্সপ্রেশনগুলির মধ্যে উপস্থিত হয়।

প্রথম এক্সপ্রেশন অবশ্যই বুলিয়ান বা বুলিয়ান টাইপ হতে হবে, বা একটি সংকলন-সময় ত্রুটি ঘটে।



5

ঠিক সঠিক নয়, সুনির্দিষ্ট হতে:

  1. যদি হয় এখানে সত্য, getHereCount () এর ফলাফল ফিরে আসবে
  2. getAwayCount () এর ফলাফল ফিরে পেয়েছে result

এটি "ফেরত" অত্যন্ত গুরুত্বপূর্ণ। এর অর্থ হল পদ্ধতিগুলি অবশ্যই একটি মূল্য ফেরত দেয় এবং সেই মানটি কোথাও নির্ধারিত হতে হবে

এছাড়াও, এটা ঠিক না চিহ্নগুলি সিন্টেক্সের যদি 'অন্য সংস্করণে সমতুল্য। উদাহরণ স্বরূপ:

String str1,str2,str3,str4;
boolean check;
//...
return str1 + (check ? str2 : str3) + str4;

যদি-অন্যের সাথে কোড করা থাকে তবে সর্বদা আরও বাইকোডের ফলাফল হয়।


আমি বিশ্বাস করি যে জাভাক একই বাইকোড তৈরির স্বাধীনতায় রয়েছে। যদিও আপনি সঠিক যে এখানে অস্পষ্ট কোণার কেস রয়েছে যেখানে সেগুলি সমতুল্য নয়।
টম হাটিন - ২৪:৪7

হ্যা অবশ্যই. আমার জন্য, শর্তসাপেক্ষ অপারেটরের আসল যোগ্যতা হ'ল আমি যে উদাহরণ দিয়েছি। বিকল্পটি হ'ল: // হাঁফান !! স্ট্রিং টেম্প = str1; if (চেক) অস্থায়ী + = str2; অন্য টেম্প + = স্ট্র 3; অস্থায়ী + = স্ট্র 4; রিটার্ন অস্থায়ী অথবা স্ট্রিংবিল্ডার অ্যাপেন্ড অপারেশনটি হ্যান্ডকোডিং। 1 ম একজন গুরুতর দক্ষতার সমস্যায় ভুগছেন যখন দ্বিতীয়টি খুব ভার্জোজ এবং অনেক লাভ ছাড়াই শ্রমসাধ্য প্রচেষ্টা।
রিচএন

4

টার্নারি, শর্তাধীন; টমেটো, টমেটো এর জন্য এটি আসলে মূল্যবান যা ভেরিয়েবল ইনিশিয়েশন ization যদি (আমার মত) আপনি যখন ভেরিয়েবলগুলি সংজ্ঞায়িত করেছেন সেখানে আরম্ভ করার শখ করছেন, শর্তসাপেক্ষ টের্নারি অপারেটর (এটি উভয়ই জন্য) আপনাকে তার ক্ষেত্রে এটির অনুমতি দেয় যেখানে এর মান সম্পর্কে শর্ত আছে। চূড়ান্ত ক্ষেত্রে বিশেষত উল্লেখযোগ্য তবে অন্যত্রও কার্যকর useful

উদাহরণ:

public class Foo {
    final double    value;

    public Foo(boolean positive, double value) {
        this.value = positive ? value : -value;
    }
}

যে অপারেটর ছাড়া - যে কোনও নামেই - আপনাকে ক্ষেত্রটি চূড়ান্ত-চূড়ান্ত করতে হবে বা কেবল এটি সূচনা করার জন্য কোনও ফাংশন লিখতে হবে। প্রকৃতপক্ষে, এটি ঠিক নয় - এটি এখনও / অন্যথায়, অন্তত জাভা ব্যবহার করে আরম্ভ করা যেতে পারে। তবে আমি এই ক্লিনারটি খুঁজে পাই।


4
condition ? truth : false;

যদি শর্তটি থাকে trueতবে প্রথম অভিব্যক্তিটি মূল্যায়ন করুন। যদি শর্তটি থাকে falseতবে দ্বিতীয় এক্সপ্রেশনটি মূল্যায়ন করুন।

একে কন্ডিশনাল অপারেটর বলা হয় এবং এটি এক ধরণের টের্নারি অপারেশন


1
জেএলএস অনুসারে , 15.25। শর্তাধীন অপারেটর? : এটি "পরামিতি" না দিয়ে "রিটার্ন" এবং অভিব্যক্তির চেয়ে মূল্যায়ন করে
গেরোল্ড ব্রোজার

3

এই কনস্ট্রাক্টটিকে কম্পিউটার বিজ্ঞান এবং প্রোগ্রামিং কৌশলগুলিতে টার্নারি অপারেটর বলা হয় ।
এবং উইকিপিডিয়া নিম্নলিখিত ব্যাখ্যা প্রস্তাব:

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

শুধু জাভাতেই নয়, এই সিনট্যাক্সটি পিএইচপি-র মধ্যেও উপলভ্য-সি উপলব্ধ।

নিম্নলিখিত লিঙ্কে এটি নিম্নলিখিত ব্যাখ্যা দেয় যা এটি বোঝার জন্য শান্ত quiet

একটি টার্নারি অপারেটর 3 ইনপুটগুলিতে কিছু অপারেশন পরিচালনা করে। এটি যদি অন্য বিবৃতিতে শর্টকাট হয় তবে এটি শর্তসাপেক্ষ অপারেটর হিসাবেও পরিচিত।

পার্ল / পিএইচপি এ এটি হিসাবে কাজ করে:
boolean_condition ? true_value : false_value

সি / সি ++ এ এটি হিসাবে কাজ করে:
logical expression ? action for true : action for false

এটি কিছু যৌক্তিক অবস্থার জন্য পঠনযোগ্য যা খুব জটিল নয় অন্যথায় শর্তাধীন যুক্তির সংমিশ্রণে ইফ-অন্য ব্লক ব্যবহার করা ভাল ।

আমরা যদি একটি কোড বিবৃতি লাইনের জন্য এই টার্নারি অপারেটরের সাথে if- অন্য ব্লকগুলি সরল করতে পারি ।
উদাহরণ স্বরূপ:

if ( car.isStarted() ) {
     car.goForward();
} else {
     car.startTheEngine();
}

নিম্নলিখিতগুলির সাথে সমান হতে পারে:

( car.isStarted() ) ? car.goForward() : car.startTheEngine();

সুতরাং আমরা যদি আপনার বিবৃতি উল্লেখ করি:

int count = isHere ? getHereCount(index) : getAwayCount(index);

এটি আসলে নীচের ইফ-অন্য ব্লকের 100% সমতুল্য :

int count;
if (isHere) {
    count = getHereCount(index);
} else {
    count = getAwayCount(index);
}

এটাই!
আশা করি এটি কারও পক্ষে সহায়ক ছিল!
চিয়ার্স!


2

সঠিক। এটা বলা তিন অপারেটর । কেউ কেউ এটিকে শর্তাধীন অপারেটরও বলে থাকেন


9
অ্যালিস ইন ওয়ান্ডারল্যান্ডকে উদ্ধৃত করার জন্য, এটি টার্নারি অপারেটর নামে পরিচিত, তবে এর নামটি শর্তসাপেক্ষ অপারেটর।
পল টমবলিন

তবে এর নামকে বলা হয় প্রশ্ন-চিহ্ন কোলন অপারেটর।
মাইকেল

1
নামকরণের নামকরণ শব্দটি কিছুটা সি ++ ইশ। প্রশ্ন চিহ্ন কোলন অপারেটর?: (একটি টোকেন) এলভিস অপারেটর হিসাবে পরিচিত।
টম হাটিন -

2

এর টার্নারি অপারেটর (? :)

The ternary operator is an operator that takes three arguments. The first 
argument is a comparison argument, the second is the result upon a true 
comparison, and the third is the result upon a false comparison.

1

আপনি শর্তসাপেক্ষ অপারেটরের অনুরূপ কিছু নতুন অপারেটরগুলির প্রস্তাবতে আগ্রহী হতে পারেন । নাল-সেফ অপারেটরগুলি এই জাতীয় কোড সক্ষম করবে:

String s = mayBeNull?.toString() ?: "null";

এটি বিশেষত সুবিধাজনক হবে যেখানে অটো-আনবক্সিং হয়।

Integer ival = ...;  // may be null
int i = ival ?: -1;  // no NPE from unboxing

এটি জেডিকে 7 এর "প্রকল্পের মুদ্রা" এর অধীনে আরও বিবেচনার জন্য নির্বাচন করা হয়েছে ।


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

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

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

আমি কেবল প্রস্তাবটির ভূমিকাটি পড়েছি, এবং আপনি ঠিক বলেছেন। এটি জোদার স্টিফেন কোলবর্ন এবং "জাভা 7 নেই" খ্যাতি।
এরিকসন

1

আসলে এটি 3 টিরও বেশি আর্গুমেন্ট নিতে পারে। উদাহরণস্বরূপ আমরা যদি কোনও নম্বর ধনাত্মক, নেতিবাচক বা শূন্য হয় তা পরীক্ষা করতে চাই আমরা এটি করতে পারি:

String m= num > 0 ? "is a POSITIVE NUMBER.": num < 0 ?"is a NEGATIVE NUMBER." :"IT's ZERO.";

যা যদি ব্যবহার করা থেকে ভাল, অন্যথায় যদি, অন্যথায়।


0

এটি শর্তসাপেক্ষ অপারেটর, এবং বিবৃতিগুলি লেখার কেবল একটি সংক্ষিপ্ত উপায়ের চেয়ে বেশি।

যেহেতু এটি একটি অভিব্যক্তি যা কোনও মান ফেরত দেয় এটি অন্যান্য এক্সপ্রেশনগুলির অংশ হিসাবে ব্যবহার করা যেতে পারে।


0

হ্যাঁ আপনি সঠিক. ?: সাধারণত "টার্নারি কন্ডিশনাল অপারেটর" নামে পরিচিত, প্রায়শই কেবল "টার্নারি অপারেটর" হিসাবে পরিচিত। এটি স্ট্যান্ডার্ডের শর্টহ্যান্ড সংস্করণ যদি / অন্য শর্তযুক্ত হয়।

টার্নারি শর্তসাপেক্ষ অপারেটর


0

আমি সত্যিই এই অপারেটরটি পছন্দ করি তবে পাঠকের বিষয়টি বিবেচনায় নেওয়া উচিত।

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

প্রথমত, আসল আসকারের কেস আছে case তিনি এই সম্পর্কে পোস্ট করতে এবং প্রতিক্রিয়াগুলি পড়তে কেবল একটি ঘন্টা ব্যয় করেছিলেন। লেখককে প্রতিটি লিখতে আর কত সময় লাগত?: একটি হিসাবে যদি / তার পুরো জীবন জুড়ে থাকে। নিশ্চিত হওয়ার এক ঘন্টাও নয়।

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

callMethodWhatever(Long + Expression + with + syntax) if conditional

আমি যদি দীর্ঘ সময় রুবি ব্যবহারকারী হয়ে থাকি তবে সম্ভবত এই লাইনটি নিয়ে আমার সমস্যা হত না, তবে সি থেকে আগত যখন আপনি লাইনের প্রথম জিনিস হিসাবে "কলমিথডওয়েজিং" দেখেন, আপনি এটি সম্পাদন করার প্রত্যাশা করেন। ?: কম ক্রিপ্টিক, তবে এখনও একজন পাঠককে ফেলে দেওয়া যথেষ্ট অস্বাভাবিক।

সুবিধাটি হ'ল আপনার পেটের মধ্যে সত্যিই শীতল অনুভূতি হয় যখন আপনি লাইনের 1 স্পেসে 3-লাইন লিখতে পারেন। তা অস্বীকার করতে পারবেন না :) তবে সত্যই, প্রয়োজন কেবল তার 'বিরলতার কারণে 90% লোকের দ্বারা বেশি পাঠযোগ্য।

এটি সত্যিকার অর্থে একটি বুলিয়ান এবং মানগুলির উপর ভিত্তি করে একটি অ্যাসাইনমেন্ট হয়ে গেলে আমার এতে সমস্যা হয় না তবে এটি সহজেই আপত্তিজনকভাবে ব্যবহার করা যেতে পারে।


0

শর্তসাপেক্ষ প্রকাশগুলি সম্পূর্ণ ভিন্ন স্টাইলে থাকে, বিবৃতিতে কোনও স্পষ্ট না থাকলে।

বাক্য গঠনটি: বুলিয়ান-এক্সপ্রেশন? এক্সপ্রেশন 1: এক্সপ্রেশন 2;

এই শর্তসাপেক্ষ প্রকাশের ফলাফল

এক্সপ্রেশন 1 যদি বুলিয়ান-এক্সপ্রেশনটি সত্য হয়;

অন্যথায় ফলাফল 2 হয়।

মনে করুন আপনি বৃহত্তর সংখ্যাটি ভেরিয়েবলের নাম্বার এবং নম্ব 2 সর্বাধিকতে নির্ধারণ করতে চান। আপনি কেবল শর্তাধীন অভিব্যক্তিটি ব্যবহার করে একটি বিবৃতি লিখতে পারেন: সর্বোচ্চ = (num1> num2)? num1: num2;

দ্রষ্টব্য: প্রতীকগুলি? এবং: শর্তাধীন অভিব্যক্তিতে একসাথে উপস্থিত হন। তারা একটি শর্তসাপেক্ষ অপারেটর গঠন করে এবং একটি তিন্নি অপারেটরও বলে কারণ এটি তিনটি অপারেন্ড ব্যবহার করে। এটি জাভার একমাত্র টেরিনারি অপারেটর।

এর থেকে উদ্ধৃত: ওয়াই ড্যানিয়েল লিয়াং দ্বারা জাভা প্রোগ্রামিং 10 ম সংস্করণে ইন্ট্রো পৃষ্ঠা 126 - 127

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