জাভাস্ক্রিপ্ট টার্নারি অপারেটর বনাম ||


17

আমি এর আগে কিছু নোড.জেএস কোডটি দেখেছিলাম এবং আমি লক্ষ্য করেছি যে যে লোকটি এটি লিখেছিল সেটি নিম্নলিখিত বাক্য গঠনটিকে সমর্থন করেছে বলে মনে হয়েছে:

var fn = function (param) {
    var paramWithDefault = null == param ? 'Default Value' : param;
}

আমি আরও সংক্ষিপ্ত বলে মনে করি তার উপর:

var fn = function (param) {
    var paramWithDefault = param || 'Default Value';
}

আমি ভাবছিলাম যে দ্বিতীয় রূপটি আসলে আরও সামাজিকভাবে গ্রহণযোগ্য জাভাস্ক্রিপ্ট সিনট্যাক্স কিনা, আমি এই উদ্দেশ্যে টার্নারি অপারেটরের চেয়ে বেশি বার বুনোতে এটি দেখেছি।

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


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

উত্তর:


17

কারণ এই কোডটি আপনাকে "0", "", ভুয়া বা অন্য কোনও মিথ্যা মান দিয়ে পাস করার সাথে সাথে 'ডিফল্ট মান' হিসাবে মূল্যায়ন করবে।

function fn(param) {
  var paramWithDefault = param || 'Default Value';
  return paramWithDefault;
}

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


আপনার কেবল কোনও জিনিসে নাল কোলেসেস ব্যবহার করা উচিত এবং যদি কোনও বস্তুর সংজ্ঞা দেওয়া হয়, তবে এটি কাজ করবে না। খালি স্ট্রিং ব্যতিক্রম ছাড়া।
মালফিস্ট

4
শূন্য তুলনা একটি ভাল পয়েন্ট, এটি বেশ অপ্রত্যাশিত হতে পারে।
এড জেমস

1
+1 - পাইথন (অবশেষে) "x যদি y অন্য z" সিনট্যাক্স যুক্ত করেছে এই সমস্যাটি অবশ্যই। লজিকাল অপারেটরগুলির জন্য এই শব্দার্থবিজ্ঞানগুলি মোটামুটি সাধারণ এবং একই সাধারণ ত্রুটিগুলি যখনই শর্তসাপেক্ষ নির্বাচনের অপারেটরদের কাজ করতে তাদের প্রতি নির্ভর করে crop
স্টিভ 314

আপনার কন্সট্রাক্টসগুলি প্রথম বন্ধনীতে স্থাপন করতে ভুলবেন না, আপনি যদি স্ট্রিং কন্টেটেটিংয়ের সাথে তাদের একসাথে ব্যবহার করেন var txt = 'Hello, ' + (user_name||'User') + '!';তবে কার্যকরী না হয়ে - আপনি পাবেন undefinedjsfiddle.net/4mFAB/1
c69

7

আপনার সত্যিকারের যা দরকার তা হ'ল নাল কোলেসেস অপারেটর। তবে জাভাস্ক্রিপ্টটিতে আসলে একটি নেই বলে প্রোগ্রামাররা সাধারণত '||' ব্যবহার করেন এটি জন্য দাঁড়ানো।

তবে উভয়ই পুরোপুরি যুক্তিসঙ্গত। নাল কোলেসেস অপারেটর কী তা যারা বুঝতে পারে না তাদের জন্য, টের্নারি অপারেটর সম্ভবত বোঝার সম্ভাবনা বেশি।


অন্য সম্পর্কিত অপারেটর হ'ল আইকন অপারেটরটি আইআইআরসি "অন্য" বানান করে। এটি প্রথম যুক্তি থেকে একটি বিশেষ "ব্যর্থ" ফলাফলকে স্বীকৃতি দেয় এবং বিকল্প হিসাবে সেই ক্ষেত্রে দ্বিতীয় যুক্তি ব্যবহার করে। আমি আশা করি পাইথনগুলি "x if y other z" দুটি পৃথক অপারেটর ব্যবহার করে প্রয়োগ করা হয়েছিল - একটি "যদি" বাইনারি দৃser় অপারেটর এবং একটি আইকনের মতো "অন্য" অপারেটর - সেই দুটি অপারেটর স্বাধীনভাবে ব্যবহারযোগ্য হবে। তবে, আইকন এই স্টাইলটিকে সমর্থন করে না, পরিবর্তে আপেক্ষিক অপারেটরদের সাথে উদ্ভট কিছু করে doing
স্টিভ 314

@ স্টিভ ৩১৪: পাইথনের আপনার পছন্দসই কিছু রয়েছে: [false-part, true-part]অপারেটর [..][bool(condition)]একত্রিত হলে পৃথক পৃথক অন্য অপারেটর [false-part, true-part][bool(condition)]। আপনি যদি অলস আচরণ চান, তবে আপনি কেবল সঠিক এবং মিথ্যা অংশটি ল্যাম্বড করতে পারেন।
মিথ্যা রায়ান

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