আপনি কিভাবে ব্যবহার করবেন? : (শর্তাধীন) জাভাস্ক্রিপ্ট অপারেটর?


434

কেউ দয়া করে আমাকে সরল কথায় ব্যাখ্যা করতে পারেন ?:(শর্তসাপেক্ষ, "টের্নারি") অপারেটর কী এবং কীভাবে এটি ব্যবহার করবেন?


2
তারা অপারেটর হয়। অপারেন্ডগুলি হ'ল মানগুলি যা আপনি এই অপারেটরগুলির সাথে ব্যবহার করেন।
বোল্টক্লক

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


3
গুগলিং প্রতীকগুলি সমস্যাযুক্ত হতে পারে তবে গুগলিং "জাভাস্ক্রিপ্ট অপারেটর" (এবং সেগুলি সব শিখছে) সম্পর্কে কীভাবে?
nnnnnn

এই উইকি এন্ট্রি পরীক্ষা en.wikipedia.org/wiki/Elvis_operator
Nerdroid

উত্তর:


645

এটি যদি অন্য-বিবৃতিতে এক-লাইন শর্টহ্যান্ড। একে শর্তসাপেক্ষ অপারেটর বলা হয়। 1

এখানে কোডের একটি উদাহরণ যা শর্তসাপেক্ষ অপারেটরের সাথে সংক্ষিপ্ত করা যেতে পারে:

var userType;
if (userIsYoungerThan18) {
  userType = "Minor";
} else {
  userType = "Adult";
}

if (userIsYoungerThan21) {
  serveDrink("Grape Juice");
} else {
  serveDrink("Wine");
}

এটি এর ?:মত সংক্ষিপ্ত করা যেতে পারে :

var userType = userIsYoungerThan18 ? "Minor" : "Adult";

serveDrink(userIsYoungerThan21 ? "Grape Juice" : "Wine");

সমস্ত অভিব্যক্তির মতো, শর্তসাপেক্ষ অপারেটরটি পার্শ্ব-প্রতিক্রিয়াযুক্ত স্ট্যান্ডেলোন স্টেটমেন্ট হিসাবেও ব্যবহার করা যেতে পারে, যদিও এটি সংক্ষিপ্তকরণের বাইরে অস্বাভাবিক :

userIsYoungerThan21 ? serveGrapeJuice() : serveWine();

তারা এমনকি শৃঙ্খলিত করা যেতে পারে:

serveDrink(userIsYoungerThan4 ? 'Milk' : userIsYoungerThan21 ? 'Grape Juice' : 'Wine');

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

var k = a ? (b ? (c ? d : e) : (d ? e : f)) : f ? (g ? h : i) : j;

1 প্রায়শই "টার্নারি অপারেটর" নামে অভিহিত হন তবে বাস্তবে এটি কেবল একটি টের্নারি অপারেটর [একটি অপারেটর তিনটি রূপ গ্রহণ করে]। যদিও বর্তমানে এটি কেবলমাত্র একটি জাভাস্ক্রিপ্ট রয়েছে।


56
শুধু নাম নির্মল: ternaryহয় টাইপ অপারেটর (অর্থাত এটা 3 অংশ আছে)। নাম নির্দিষ্ট তিন অপারেটর হয় conditional operator। কেবলমাত্র জেএসে কেবলমাত্র একটি টের্নারি অপারেটর হওয়ার কথা তাই শর্তাদি অপব্যবহার হয়।
কোডিং

1
@ryingToGetProgrammingStraight Ternary form প্রযুক্তিগতভাবে একটি অভিব্যক্তি এবং এক্সপ্রেশনগুলি এক্সপ্রেশন ট্রি গঠনের জন্য অন্যান্য অভিব্যক্তি ধারণ করতে পারে। এই কোডটি ঠিক সেখানে একটি অভিব্যক্তি গাছের মতো দেখতে রয়েছে :) দেখুন: fsharpforfunandprofit.com/posts/expressions-vs-statements
আলেকজান্ডার

1
দৃ use়ভাবে সাধারণ ব্যবহারের ক্ষেত্রে উদাহরণ আপডেট করার পরামর্শ দিন, পার্শ্ব-প্রতিক্রিয়া ব্যবহারের ক্ষেত্রে প্রায়শই অপারেটরের আপত্তিজনক হিসাবে উল্লেখ করা হয় না।
টিজে ক্রাউডার

7
নীচে কেন কিছুটা ব্যাকরণ ব্লার্ব রয়েছে তা নিশ্চিত নয় তবে এটি ভুল। যদি জাভাস্ক্রিপ্টে কেবলমাত্র এক ধরণের অপারেটর থাকে, তবে অবশ্যই এটি অবশ্যই তিনটি অপারেটর হিসাবে বলা উচিত এবং একটি টেরিনারি অপারেটর নয় ... ... "এই ত্রয়ী অপারেটরটি জাভাস্ক্রিপ্টের একটি টার্নারি অপারেটর (এবং এটি কেবলমাত্র এক)" বোকা, শুধু ব্যবহার করুন এবং এটি সমস্ত বোঝায়।
অ্যান্ড্রু

1
@ মার্ককর্পেন্টারজেআর জাভাস্ক্রিপ্টে এটি করার সাধারণ উপায়টি ||অপারেটরের সাথে রয়েছে, কারণ এটি যদি বাম দিকের মান সত্য হয় তবে এটি শর্ট সার্কিট।
পিটার ওলসন

142

আমি প্রদত্ত উত্তরে কিছু যোগ করতে চাই ।

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


পরিবর্তে:

var welcomeMessage  = 'Hello ' + (username ? username : 'guest');

তুমি ব্যবহার করতে পার:

var welcomeMessage  = 'Hello ' + (username || 'guest');

এটি পিএইচপি-র শর্টহ্যান্ড টার্নারি অপারেটরের সমতুল্য জাভাস্ক্রিপ্ট ?:

অথবা এমনকি:

var welcomeMessage  = 'Hello ' + (username || something || maybethis || 'guest');

এটি ভেরিয়েবলটি মূল্যায়ন করে এবং যদি এটি মিথ্যা বা সেট না করে থাকে তবে এটি পরবর্তীটিতে যায়।


4
আমি টার্নারি নিয়ে লড়াই করছি এবং শেষ পর্যন্ত এই উত্তরটি খুঁজে পেয়েছি। ধন্যবাদ!
লুজুবিসা লিভাক

যদি আমি টার্নারি অপারেটরের আশেপাশে ধনুর্বন্ধনী ব্যবহার না করতাম 'Hello ' + (username ? username : 'guest'), Hello + যদি উপেক্ষা করা হয় এবং কেবলমাত্র টের্নারি অপারেশনের ফলাফলটি ফিরে আসে। কেন কেউ ব্যাখ্যা করতে পারেন?
শিব

2
@ শিভা বন্ধনী ব্যতীত এটি পুরো বাম অংশটিকে বিশ্লেষণ করে : 'Hello ' + usernameযা সর্বদা true, কারণ এটি স্ট্রিং 0 এর চেয়ে বেশি দৈর্ঘ্যের with
জেফ্রি রুজেন্ডাল

26

একে বলা হয় 'টার্নারি' বা 'শর্তসাপেক্ষ' অপারেটর।

উদাহরণ

?: অপারেটর যদি একটি ... অন্য বিবৃতিতে শর্টকাট হিসাবে ব্যবহার করা যেতে পারে। এটি সাধারণত বৃহত্তর প্রকাশের অংশ হিসাবে ব্যবহৃত হয় যেখানে একটি যদি ... অন্য বিবৃতিটি বিশ্রী হবে be উদাহরণ স্বরূপ:

var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");

উদাহরণটি "শুভ সন্ধ্যা" যুক্ত একটি স্ট্রিং তৈরি করে। যদি সন্ধ্যা। টার পরে হয় যদি ... অন্য বিবৃতিটি ব্যবহার করে সমমানের কোডটি নীচের মত দেখায়:

var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
   greeting += " evening.";
else
   greeting += " day.";

থেকে দুটিই MSDN জাতীয় ডকুমেন্টেশন

মূলত এটি একটি শর্টহ্যান্ড শর্তাধীন বিবৃতি।

আরও দেখুন:


5
একে আসলে শর্তসাপেক্ষ অপারেটর বলা হয়।
কওসপ্যান্ডিয়ন

5
এটি একটি ত্রিশী শর্তসাপেক্ষ অপারেটর
পেটাঃ

4
@

7
লোকেরা এখনও এই জিনিস নিয়ে তর্ক করছে? গীজ।
বোল্টক্লক

7
@ বল্টক্লক - ঠিক তর্ক করছেন না, কেবল আমাদের প্রয়োজনীয় শব্দভাণ্ডারকে স্বাভাবিক করার চেষ্টা করছেন।
কেওসপ্যান্ডিয়ন

21

গুগল করা আপনার পক্ষে একটু কঠিন যখন আপনার সমস্ত কিছু প্রতীক;) ব্যবহারের শর্তগুলি হ'ল "জাভাস্ক্রিপ্ট শর্তসাপেক্ষ অপারেটর"।

আপনি যদি জাভাস্ক্রিপ্টে আরও মজার চিহ্ন দেখতে পান তবে আপনার প্রথমে জাভাস্ক্রিপ্টের অপারেটরগুলি দেখার চেষ্টা করা উচিত: এমডিসির অপারেটরগুলির তালিকা । আপনি যে ব্যতিক্রমটির মুখোমুখি হবেন তা হ'ল $প্রতীক

আপনার প্রশ্নের উত্তর দেওয়ার জন্য, শর্তসাপেক্ষ অপারেটররা যদি বিবৃতি দেয় তবে সরল প্রতিস্থাপন করে। একটি উদাহরণ সেরা:

var insurancePremium = age > 21 ? 100 : 200;

পরিবর্তে:

var insurancePremium;

if (age > 21) {
    insurancePremium = 100;
} else {
    insurancePremium = 200;
}

ভাল ব্যাখ্যা, তবে উদাহরণটি দুর্বল যেহেতু এটি কোনও বুলিয়ান অভিব্যক্তির ফলাফলের উপর নির্ভর করে বুলিয়ান মান নির্ধারণ করে যা কিছুটা বোধগম্য নয়। আপনি var olderThan20 = age > 20;পরিবর্তে ব্যবহার করতে চাই ।
বালুসসি

@ বালুসসি - হ্যাঁ :) আমি বুঝতে পেরেছি, তবে উদাহরণগুলি আমার টুপি থেকে বের করা শক্ত! আরও ভাল একটি সম্পর্কে ভাবেন ...
ডেভিড টাং


7

বেশিরভাগ উত্তর সঠিক তবে আমি আরও কিছু যুক্ত করতে চাই। তিন অপারেটর ডান-মিশুক, যার মানে এটা করা যেতে পারে শৃঙ্খলিত নিম্নলিখিত পদ্ধতিতে if … else-if … else-if … else:

function example() {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}

সমতুল্য:

function example() {
    if (condition1) { return value1; }
    else if (condition2) { return value2; }
    else if (condition3) { return value3; }
    else { return value4; }
}

আরও বিশদ এখানে


1
এটিই আমি অনুসন্ধান করছি।
সজল দাস

6

একে বলা হয় টার্নারি অপারেটর

tmp = (foo==1 ? true : false);

6
একে শর্তসাপেক্ষ অপারেটর বলা হয়। এটি ভাষায় কোনও টার্নারি অপারেটরের একমাত্র উদাহরণ হতে পারে ।
অরবিটে ডিস্ক

tmp = foo == 1 একই কাজ করে তাই এটি যথেষ্ট হবে
রবার্ট ভার্গা

6

টার্নারি অপারেটর

সাধারণত জাভাস্ক্রিপ্টে আমাদের শর্তাধীন বিবৃতি রয়েছে।

উদাহরণ:

if (true) {
    console.log(1)
} 
else {
    console.log(0)
}
# Answer
# 1

তবে এতে দুটি বা ততোধিক লাইন রয়েছে এবং কোনও ভেরিয়েবলকে বরাদ্দ করতে পারে না। জাভাস্ক্রিপ্টটির এই সমস্যা টার্নারি অপারেটরের জন্য একটি সমাধান রয়েছে । টার্নারি অপারেটর এক লাইনে লিখতে পারে এবং একটি ভেরিয়েবলকে বরাদ্দ করতে পারে।

উদাহরণ:

var operator = true ? 1 : 0
console.log(operator)
# Answer
# 1

এই টার্নারি অপারেটরটি সি প্রোগ্রামিং ভাষায় অনুরূপ।


5

আরে সাথী ঠিক মনে করে জেএসের কাজগুলি সত্য বা মিথ্যা, ডান?

আসুন একটি টার্নারি অপারেটর নিই:

questionAnswered ? "Awesome!" : "damn" ;

প্রথমত, JS কিনা তা পরীক্ষা questionAnswered হয় trueবা false

যদি true( ?) আপনি "অসাধারণ!"

অন্যথায় ( :) আপনি "জঘন্য" পাবেন;

আশা করি এটি বন্ধুকে সাহায্য করবে :)


2

এটি if statementসবই এক লাইনে।

সুতরাং

var x=1;
(x == 1) ? y="true" : y="false";
alert(y);

মূল্যায়ন করা এক্সপ্রেশন হয় ( )

যদি এটি সত্য মিলে যায় তবে কোডটি কার্যকর করুন ?

যদি এটি মিথ্যা সাথে মেলে, তবে কোডটি কার্যকর করুন :


var x = 1; y = (x == 1)? সত্য মিথ্যা;
অগুরোন


1

একে বলা হয় ternary operator। আরও কিছু তথ্যের জন্য, আমি এখানে এই সম্পর্কে আরও একটি প্রশ্নের উত্তর দিয়েছি:

'অন্য' ছাড়া কীভাবে আইএফ স্টেটমেন্ট লিখতে হয়


4
আসলে টেরিনারি হ'ল অপারেটরের ধরণ (যেমন এর 3 টি অংশ রয়েছে)। নাম নির্দিষ্ট তিন অপারেটর হয় conditional operator। কেবলমাত্র জেএসে কেবলমাত্র একটি টের্নারি অপারেটর হওয়ার কথা তাই শর্তাদি অপব্যবহার হয়।
কোডিং

1

এটি সম্ভবত এটি করার জন্য সবচেয়ে মার্জিত উপায় নয়। তবে যে কারো জন্য টার্নারি অপারেটরগুলির সাথে পরিচিত নয়, তাদের পক্ষে এটি কার্যকর প্রমাণিত হতে পারে। আমার ব্যক্তিগত পছন্দটি কন্ডিশন-ব্লকের পরিবর্তে 1-লাইনার ফ্যালব্যাকগুলি করা।

  // var firstName = 'John'; // Undefined
  var lastName = 'Doe';

  // if lastName or firstName is undefined, false, null or empty => fallback to empty string
  lastName = lastName || '';
  firstName = firstName || '';

  var displayName = '';

  // if lastName (or firstName) is undefined, false, null or empty
  // displayName equals 'John' OR 'Doe'

  // if lastName and firstName are not empty
  // a space is inserted between the names
  displayName = (!lastName || !firstName) ? firstName + lastName : firstName + ' ' + lastName;


  // if display name is undefined, false, null or empty => fallback to 'Unnamed'
  displayName = displayName || 'Unnamed';

  console.log(displayName);

টার্নারি অপারেটর


1

আমরা জ্যাকুরির পাশাপাশি দৈর্ঘ্যের সাথে নীচের উদাহরণ হিসাবে ব্যবহার করতে পারি:

মনে করুন আমাদের কাছে গ্যারান্টরনাম পাঠ্যবক্স রয়েছে যার মান রয়েছে এবং প্রথম নাম এবং পদবি পেতে চাই - এটি বাতিল হতে পারে। তাই রাথারের চেয়ে

        var gnamesplit = $("#txtGuarantorName").val().split(" ");
        var gLastName = "";
        var gFirstName = "";
        if(gnamesplit.length > 0 ){
           gLastName  = gnamesplit[0];        
        }
        if(gnamesplit.length > 1 ){
           gFirstName = gnamesplit[1];        
        }

আমরা ন্যূনতম কোড সহ জ্যাকুয়েরির সাথে নীচের কোডটি ব্যবহার করতে পারি

    

    var gnamesplit = $("#txtGuarantorName").val().split(" ");
    var gLastName = gnamesplit.length > 0  ? gnamesplit[0] : "";
    var gFirstName =  gnamesplit.length > 1  ? gnamesplit[1] : "";
    $("#txtLastName").val(gLastName);
    $("#txtFirstName").val(gFirstName);
    
    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div >
  Guarantor Name: <input type="text" id="txtGuarantorName" value="ASP.NET Core"  /><br/>
  <br/>
  <br/>
  
  First Name: <input type="text" id="txtLastName" value="ASP.NET Core"  />
  Last Name: <input type="text" id="txtFirstName" value="ASP.NET Core"  />
</div>


1

জেনারেশনে বিশেষত প্রতিক্রিয়াতে টেরানারি এক্সপ্রেশন খুব দরকারী। এখানে সরবরাহ করা অনেক ভাল, বিস্তারিত উত্তরগুলির একটি সরলীকৃত উত্তর।

condition ? expressionIfTrue : expressionIfFalse

expressionIfTrueযদি বিবৃতিটি সত্য উপস্থাপন করে তবে ওজি হিসাবে ভাবুন ; অন্য বিবৃতি হিসাবে
মনে করি expressionIfFalse

উদাহরণ:

var x = 1;
(x == 1) ? y=x : y=z;

এটি x এর মান পরীক্ষা করে, প্রথম y = (মান) সত্য হলে ফিরে আসে, কোলনের পরে দ্বিতীয় ফেরত আসে: y = (মান) মিথ্যা হলে।


0

শর্তসাপেক্ষে (টেরিনারি) অপারেটর একমাত্র জাভাস্ক্রিপ্ট অপারেটর যা তিনটি অপারেন্ড নেয়। এই অপারেটরটি প্রায়শই যদি বিবৃতিটির শর্টকাট হিসাবে ব্যবহৃত হয়।

condition ? expr1 : expr2 

যদি শর্তটি সত্য হয় তবে অপারেটর এক্সপ্রেস 1 এর মান প্রদান করে; অন্যথায়, এটি expr2 এর মান প্রদান করে।

function fact(n) {
  if (n > 1) {
    return n * fact(n-1);
  } else {
    return 1;
  }
  // we can replace the above code in a single line of code as below
  //return (n != 1) ? n * fact(n - 1) : 1;
}
console.log(fact(5));

আরও স্পষ্টতার জন্য এমডিএন ডকুমেন্ট লিঙ্কটি পড়ুন


0

আপনি এক শর্তে চেক উদাহরণস্বরূপ ফাংশন থাকে জাভাস্ক্রিপ্ট । এটি টার্নারি অপারেটর ব্যবহার করা সহজ । যা বাস্তবায়নের জন্য কেবল একটি একক লাইন প্রয়োজন । উদা:

    private module : string ='';
    private page:boolean = false;
    async mounted(){
     if(this.module=== 'Main')
    {
    this.page = true;}
    else{
    this.page = false;
    }
}

একটি শর্তযুক্ত এর মতো একটি ক্রিয়াকলাপ নিম্নলিখিত হিসাবে লেখা যেতে পারে।

this.page = this.module=== 'Main' ?true:false;

শর্ত? যদি সত্য: মিথ্যা যদি


-3
 (sunday == 'True') ? sun="<span class='label label-success'>S</span>" : sun="<span class='label label-danger'>S</span>";

 sun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"

আপনি টেরিনারি অপারেটরের সাথে এইচটিএমএল সংযোজন করতে পারেন
চন্দ্রশেখর কোমাটি

না না সত্যিই না কিভাবে আপনি তিন নিয়োগ লেখা উচিত এবং ব্যবহার === না == অন্যান্য জ্ঞানী ভাল হিসাবে আপনি শুধু কি হতে পারে sunday ?.এটা হওয়া উচিতsun = "<span class='label " + ((sunday === 'True' ? 'label-success' : 'label-danger') + "'>S</span>"
TheRealMrCrowley

শর্তসাপেক্ষ ত্রৈমাসিকীর পুরো বিষয়টি হ'ল শর্তাধীন অ্যাসাইনমেন্টের মানগুলি সংক্ষিপ্ত করে দেওয়া অন্যথায় আপনার কেবল একটি if স্টেটমেন্ট ব্যবহার করা উচিত
TheRealMrCrowley

এখন আমাকে বলুন এটি একদম ঠিক আছে কি না। যদি আপনি ভুল বলে থাকেন তবে এখনও এটি কাজ করছে এবং আমি আমার প্রকল্পটি ব্যবহার করছি ..
চন্দ্রশেখর কোমাটি

আমি জানি এটি আপনার প্রথম উদাহরণে কীভাবে "কাজ করে" তবে আমি এটি সরবরাহ করে যা আপনি দ্বিতীয় সংস্করণ হিসাবে রেখেছেন। আমি আপনাকে যেটি দিয়েছি তার উপরে ভার্সনে কতটা অপ্রয়োজনীয় সদৃশ রয়েছে তা লক্ষ্য করুন। জেএস হ'ল এমন একটি কোড যা ব্রাউজারে প্রেরণ করা হয়, তাই কোড দৈর্ঘ্যের বিষয়টি
TheRealMrCrowley
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.