জাভাস্ক্রিপ্ট একক লাইন 'যদি' বিবৃতি - সেরা সিনট্যাক্স, এই বিকল্প?


201

এটি পরিষ্কারভাবে বলা হয়েছে, যদিও মতামত কম কম, একক লাইনের ifবিবৃতিতে কোঁকড়ানো বন্ধনীগুলি রক্ষণাবেক্ষণযোগ্যতা এবং পঠনযোগ্যতার জন্য আদর্শ নয়।

তবে এই কি?

if (lemons) { document.write("foo gave me a bar"); }

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

আমার মধ্যে দুষ্ট দু'টি এটি পরামর্শ দিতে চায়, যদিও সিনট্যাক্স স্পষ্টতই এর জন্য নয়, এবং সম্ভবত এটি একটি খারাপ ধারণা।

(syntax) ? document.write("My evil twin emerges"): "";

2
জাভাস্ক্রিপ্ট যদি বাক্যাংশ শর্তাবলীর সমাপ্তি সমর্থন করে তবে খুব ভাল হবে:document.write("My evil twin emerges") if lemons
Beau স্মিথ

7
আমি মনে করি আপনি সংক্ষেপে যদি অন্যথায় বিবৃতিতে ভাবতে পারেন তবে thinking ( variable = (condition) ? true-value : false-value;।) শুভকামনা।
প্রোগো

উত্তর:


328

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

lemons && document.write("foo gave me a bar");  

ব্যক্তিগতভাবে, আমি প্রায়শই ifবন্ধনী ছাড়াই একক-লাইন ব্যবহার করব :

if (lemons) document.write("foo gave me a bar");

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


11
আমি পরেরটি পছন্দ করি। প্রথম ইনপুট এবং আরও একটি সৃজনশীল বিকল্পের জন্য ধন্যবাদ!
ডেভিড হবস

আপনি কী আশা করছেন তা আপনার জানা উচিত, যেহেতু খালি স্ট্রিং এবং 0 টি মিথ্যা মান রয়েছে, এটি দ্বিতীয় বিবৃতিটি কার্যকর করতে ব্যর্থ হবে
অরল্যান্ডো

1
অবশ্যই, আপনি পাশাপাশি আরও স্পষ্টভাবে বুলিয়ান বিবৃতি দিতে পারেন
আকজাই

7
@ পিটারআলসন কেন রক্ষণাবেক্ষণের আপত্তিটি চালাচ্ছেন? অন্য কোনও বিকাশকারী যদি আপনার আইডিইর কনফিগারেশনটি ব্যবহার না করে তবে কি হয়।
Agconti

2
যদি বন্ধনী ছাড়াই বিবৃতি দেয় তবে একক লাইনের সমর্থনে কথা বলতে যথেষ্ট সাহসী হওয়ার জন্য আপনাকে ধন্যবাদ। একদিন আমাদের বাচ্চারা আপনাকে ধন্যবাদ জানাবে।
মার্ক এম।


43

আপনি এই ফর্ম্যাটটি ব্যবহার করতে পারেন যা সাধারণত পিএইচপিতে ব্যবহৃত হয়:

(lemon) ? document.write("foo gave me a bar") : document.write("if condition is FALSE");

12
আপনার উপর বন্ধনী প্রয়োজন নেই lemon
leymannx

6
শর্তাধীন বিবৃতিতে () অন্তর্ভুক্ত করার পক্ষে সর্বোত্তম অনুশীলন হতে পারে - অন্যান্য বিকাশকারীদের ক্রিয়াকলাপের ক্রম সম্পর্কিত কোনও বিভ্রান্তি দূর করে। আমি সাধারণত এটি নির্দিষ্ট করার দিকে ভ্রান্ত হই except ব্যতীত যখন ভদ্রভাবে যোগ্য ব্যক্তির বিভ্রান্ত হওয়ার কোনও উপায় না থাকে।
djvs

1
document.write(lemon ? "foo gave me a bar" : "if condition is FALSE");:)
জোসেফ গোহ

আমি আমার মতো বন্ধনীগুলি পছন্দ করি তারা একটি বুলিয়ান জোর বোঝায় ly
ড্যানিয়েল সোকলোভস্কি

18

এই এক লাইন অনেক পরিষ্কার।

if(dog) alert('bark bark');

আমি এই পছন্দ। আশা করি এটি কাউকে সাহায্য করবে


16

এটি ব্যবহার করতে পারেন,

lemons ? alert("please give me a lemonade") : alert("then give me a beer");

ব্যাখ্যা: যদি lemonsউপস্থিত থাকে তবে আমাকে একটি দিনalert("please give me a lemonade") else alert("then give me a beer")


দুর্দান্ত সমাধান।
ডেভিডসন লিমা

1
lemons? alert("please give me a fancy beer with a lemon wedge in it"): alert(please give me a beer")এফটিএফওয়াই
আট ই

15

// আরও একটি সহজ উদাহরণ

 var a = 11;
 a == 10 ? alert("true") : alert("false");

15
কেন কেবল .. var a = 11; alert(a === 10);?
মানুকারচাচ

@ মানুকারাকো ত্রৈমাসিক বিবৃতি দিয়ে কাজ করার সময় আমি এই সমস্যাটি অনেকটাই দেখতে পাই। আমি বুঝতে পেরেছি যে ওপি সম্ভবত একটি সহজ লেখার চেষ্টা করছে তবে এটি আমি কাজের কোডে পড়ি in
অ্যাডাম-বেক

alert(a === 10 ? "true" : "false")
জোশ উড

@ জোশউড সতর্কতাটি বুলিয়ানগুলিও মুদ্রণ করবে, তাই আপনি ঠিক alert(a===10)মনু যেমন বলেছিলেন তেমন করতে পারেন ।
কিথ

12

অনেক লোক যেমন বলেছে, আপনি যদি সত্যিকারের 1 লাইন সন্ধান করেন তবে:

    if (Boolean_expression) do.something();

পছন্দসই তবে, যদি আপনি কোনও / যদি অন্য কিছু করতে চান তবে তার্নি আপনার বন্ধু (এবং আরও দুর্দান্ত):

    (Boolean_expression) ? do.somethingForTrue() : do.somethingForFalse();

এছাড়াও:

    var something = (Boolean_expression) ? trueValueHardware : falseATRON;

যাইহোক, আমি একটি খুব দুর্দান্ত উদাহরণ দেখেছি। অ্যান্ড ও এর জন্য পিটার-ওসলসনকে অনুসরণ করুন

    (Boolean_expression) && do.something();

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


7

যেমন ইতিমধ্যে বলা হয়েছে, আপনি ব্যবহার করতে পারেন:

&& শৈলী

lemons && document.write("foo gave me a bar");  

অথবা

বন্ধনী কম শৈলী

if (lemons) document.write("foo gave me a bar");

শর্ট সার্কিট রিটার্ন

যাইহোক, আপনি যদি ifএকটি ফাংশন শর্ট সার্কিট করতে ওয়ান লাইন স্টেটমেন্টটি ব্যবহার করতে চান তবে আপনাকে ব্র্যাককেট-কম সংস্করণটি নিয়ে এ রকম চলতে হবে:

if (lemons) return "foo gave me a bar";

যেমন

lemons && return "foo gave me a bar"; // does not work!

আপনি একটি দিতে হবে SyntaxError: Unexpected keyword 'return'


একক লাইনে শর্ট সার্কিটগুলিতে, আমরা 'রিটার্ন' বাদ দিতে পারি এবং এটি প্রত্যাশা অনুযায়ী কাজ করা উচিত। m `` লেবু && "ফু আমাকে একটি বার দিয়েছে"; // কাজ! `` `
সিওয়ালিক্ম

@siwalikm আপনি কি ব্যাখ্যা করতে পারেন? এটি সেই ক্ষেত্রে যেখানে আপনি ফিরতে চান না lemons(যদি এটি মিথ্যা হয়) - সত্যবাদী হলে আপনি কেবল " lemonsফু আমাকে দিয়েছিলেন" ফিরিয়ে দিতে চান ।
মার্ক

যদি (লেবু) ফেরত "ফু আমাকে একটি বার দিয়েছে"; এটা ভুল. এটি আপনাকে "আনকাচড সিনট্যাক্স এরিয়ার: অবৈধ রিটার্ন স্টেটমেন্ট" দেবে
ফেনেক

@ ফেনেক আপনি কি ব্রাউজার এবং সংস্করণটি ভাগ করবেন যা আপনাকে এই ত্রুটির কারণ করে? এটি আমার জন্য প্রায় 2 বছর আগে কাজ করেছিল এবং আমার জন্য কাজ করে চলেছে।
মার্ক

4

টার্নারি অপারেটরটি ব্যবহার করে অনেক ভোটের পক্ষে আমি অনেক উত্তর দেখেছি। তিনটি মহান যদি ক) আপনার কাছে বিকল্প বিকল্প আছে এবং খ) আপনি একটি সাধারণ শর্ত থেকে মোটামুটি সহজ মানটি ফিরিয়ে দিচ্ছেন। কিন্তু ...

মূল প্রশ্নের বিকল্প ছিল না, এবং কেবলমাত্র একটি একক (বাস্তব) শাখাযুক্ত টের্নারি অপারেটর আপনাকে একটি স্বীকারোক্ত উত্তর ফেরত দিতে বাধ্য করে।

lemons ? "foo gave me a bar" : "who knows what you'll get back"

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

ত্রিনিয়ার কোনও অংশ জটিল হয়ে যাওয়ার সাথে সাথে আপনি শর্তাধীন আরও সুস্পষ্ট রূপের সাথে আরও ভাল।

দীর্ঘ সময় বলতে চাই যে আমি ভোট দিচ্ছি if (lemons) "foo"


2

এটি whileলুপগুলি সহ একটি একক লাইন ব্যবহার করে এবং এর মতোও করা যেতে পারে if:

if (blah)
    doThis();

এটি whileলুপগুলির সাথেও কাজ করে ।



9
ওপি ওয়ান-লাইনারও চেয়েছিল।
অ্যারন-কোডিং

2

তীর ফাংশনগুলির উদাহরণ:

let somethingTrue = true
[1,2,3,4,5].map(i=>somethingTrue && i*2)

প্রতিশ্রুতিতে:

Promise.resolve()
  .then(_=>checkTrueFalse && asyncFunc())
  .then(_=>{ .. })

অন্যথায়:

if(somethingTrue) thenDo()

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


1
**Old Method:**
if(x){
   add(x);
}
New Method:
x && add(x);

এমনকি অপারেশন নির্ধারণ করুন এছাড়াও আমরা বৃত্তাকার বন্ধনীগুলির সাথে করতে পারি

exp.includes('regexp_replace') && (exp = exp.replace(/,/g, '@&'));

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