জাভাস্ক্রিপ্টে প্রশ্ন চিহ্ন এবং কোলন


249

আমি নিম্নলিখিত লাইনটি পেরিয়ে এসেছি

hsb.s = max != 0 ? 255 * delta / max : 0;

এই প্রসঙ্গে ?এবং এর :অর্থ কী ?


দেখে মনে হচ্ছে এটিতে স্যাচুরেশন সেট করা এড়ানো হচ্ছে Infinity(ভাগ করে শূন্যের কারণে)।
ক্রিসেন্ট তাজা

উত্তর:


363

একে কন্ডিশনাল অপারেটর (যা একটি টেরিনারি অপারেটর ) বলা হয়।

এটা তোলে আকারে রয়েছে: condition? value-if-true: "তখন" এবং "অন্য" হিসাবে value-if-false
ভাবেন ।?:

আপনার কোড সমান

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;

27
"?" টেরিনারি অপারেটর নয়; "?:" হ'ল টেরিনারি অপারেটর। কোন কিছু সম্বন্ধে কথা বলা "?" টার্নারি অপারেটর যেমন কোস্টেলো ছাড়াই অ্যাবট, হার্ডি ছাড়াই লরেল, চং ছাড়াই চেচ সম্পর্কে কথা বলার মতো ...
জেসন এস

11
ঠিক আছে, ঠিক আছে ... এখন আমি একটি দ্ব্যর্থক সর্বনাম ব্যবহার করছি, খুশি? :)
গ্রেগ

14
পেডেন্টিক হতে, এটি একটি টের্নারি অপারেটর, যা বেশিরভাগ প্রোগ্রামিং ভাষায় একমাত্র হয়। যে কোনও অপারেটর যে তিনটি অংশে কাজ করে তা হ'ল এক দ্বিখণ্ডিত অপারেটর, ঠিক যেমনটি additionএকটি বাইনারি অপারেটর যা পূর্ববর্তী এবং নীচের এক্সপ্রেশনগুলিতে পরিচালনা করে (যেমন 1 + 2 প্লাস 1 এবং 2 তে চালিত হয়), বা প্রত্যাখ্যান একটি অ্যানারি অপারেটর (যেমন -x যেখানে x এর মান অবহেলিত)।
ডেভি

6
@ ডেভি 8: এবং এটিকে নির্দিষ্ট হওয়ার জন্য শর্তাধীন-অপারেটর বলা যেতে পারে।
যান্ত্রিক শামুক 1

আপনি যদি দুটি শর্ত পরীক্ষা করতে চান?
থানোস ডড

38

সুস্পষ্টতার জন্য সঠিকভাবে প্রথম বন্ধনীযুক্ত, এটি

hsb.s = (max != 0) ? (255 * delta / max) : 0;

অর্থ হয় প্রত্যাবর্তন

  • 255*delta/max যদি সর্বোচ্চ! = 0
  • 0 যদি সর্বোচ্চ == 0 হয়

7

যখন বন্ধনীর সাহায্যে নিম্নরূপ লেখা হবে তখন এটি সম্ভবত কিছুটা পরিষ্কার হয়:

hsb.s = (max != 0) ? (255 * delta / max) : 0;

এটি যা করে তা হ'ল প্রথম বন্ধনীগুলির অংশটি মূল্যায়ন করা। ফলাফল যদি সত্য হয় তবে অংশটি পরে? এবং এর আগে: ফিরে আসবে। যদি এটি মিথ্যা হয়, তবে যা অনুসরণ করে: ফিরে আসে।


7
hsb.s = max != 0 ? 255 * delta / max : 0;

?একটি টেরিনারি অপারেটর। এটি ifএর সাথে একযোগে কাজ করে:

!= সমান না মানে

সুতরাং, এই লাইন দীর্ঘ ফর্ম হবে

if (max != 0) { //if max is not zero
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}

1

? : এটা কি টার্নারি অপারেটর নয়?

var x= expression ? true:false


3
এটি এর ব্যবহারের একটি উদাহরণ, তবে প্রকৃতপক্ষে আপনার বক্তব্যের একটি সংক্ষিপ্ত সংস্করণ রয়েছে, সেই ক্ষেত্রে যেখানে আপনি কেবল সত্য / মিথ্যা চান: যদি 'এক্সপ্রেশন' এর কোনও সংখ্যা বা স্ট্রিংয়ের সাথে কিছুটা পরিবর্তনশীল হত, "var x = !! এক্সপ্রেশন "এটি একটি বুলিয়ান ফলাফল তৈরি করবে।
স্কট লাহেটাইন

0

: জন্য একটি সংক্ষিপ্ত সরাসরি অবস্থা else {}এবং if(){}সমস্যা। সুতরাং আপনার কোডটি এটিকে বিনিময়যোগ্য:

if(max != 0){
       hsb.s = 225 * delta / max
}
else {
       hsb.s = 0
}

এমডিএন - শর্তসাপেক্ষ (টেরিনারি) অপারেটর


-3

এই বিষয়ে সতর্কতা অবলম্বন করুন। এ -1 সত্য-এর কাছে মূল্যায়ন করে যদিও -1! = সত্য এবং -1! = মিথ্যা। বিশ্বাস করুন, আমি এটা ঘটতে দেখেছি।

সুতরাং

-1? "সত্য পক্ষ": "মিথ্যা পক্ষ"

"সত্য পক্ষ" মূল্যায়ন


3
"জাভাস্ক্রিপ্টে সত্যবাদী মান এমন একটি মান যা বুলিয়ান প্রসঙ্গে মূল্যায়নের সময় সত্য হিসাবে বিবেচিত হয় All সমস্ত মান সত্যবাদী হয় যদি না সেগুলি মিথ্যা হিসাবে সংজ্ঞায়িত করা হয় (যেমন, মিথ্যা, 0," ", নাল, অপরিজ্ঞাত এবং নাএন) । " এই কারণেই -1 সত্য হিসাবে মূল্যায়ন করা হয়। ( ডেভেলপার.মোজিলা.আর.ইন-
ইউএস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.