"যদি (0 == মান) ..." ভাল করার চেয়ে বেশি ক্ষতি করে না? [বন্ধ]


49

আমি যখন অন্য কারও কোডে এটি দেখি তখন আমি এই জিনিসগুলির মধ্যে সবচেয়ে বেশি ঘৃণা করি। আমি জানি এর অর্থ কী এবং কেন কিছু লোক এটি করে ("যদি আমি ঘটনাক্রমে এর পরিবর্তে '=' রাখি তবে কী হবে?")। আমার কাছে এটি অনেকটা এমন যে যখন কোনও শিশু সিঁড়ি বেয়ে নামতে থাকে জোরে জোরে ধাপগুলি গণনা করে।

যাইহোক, এর বিরুদ্ধে আমার যুক্তি এখানে রয়েছে:

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

17
আমি এটির জন্য খুব বেশি যত্ন নিই না, তবে এটি আমার ব্যক্তিগত পোষা প্রাণীর তালিকার চেয়ে নিচে।
অ্যাডাম ক্রসল্যান্ড

7
এবং প্রোগ্রামাররা কখনও কখনও '=' ডাবল মিস করে। এটি করা একটি সহজ ভুল এবং এটি যেটিকে উপেক্ষা করা খুব সহজ।
sange

8
এটি কীভাবে গঠনমূলক নয় বা আসল প্রশ্ন নয়?
TheLQ

7
এটি বন্ধ তাই এখানে আমার সংক্ষিপ্ত মতামত: লোকেরা কীভাবে লিখতে 0 == valueমনে রাখে তবে লিখতে মনে রাখে না ==?? আমার অর্থ ব্লিমি, আপনি যদি এটি নিয়ে ভাবছেন তবে কেন এটি শুরু করার জন্য সঠিকভাবে লিখবেন না।
ডাঃ হ্যানিবাল লেকটার

3
@ মন্টু: সংকলকগণের মতে অনেক কিছুই "সঠিক", আমি মনে করি না এটি খুব ভাল একটি মানদণ্ড।
ডাঃ হ্যানিবাল লেকটার

উত্তর:


59

আহ, হ্যাঁ, "ইয়োদা শর্তসাপেক্ষ" ("যদি মানটি শূন্য হয় তবে এই কোডটি কার্যকর করুন আপনার অবশ্যই!")। আমি সর্বদা যে কাউকে দাবী করি যে তারা লিন্ট (1) এর মতো সরঞ্জামগুলিতে "আরও ভাল"। এই বিশেষ সমস্যাটি 70 এর দশকের শেষের দিক থেকে সমাধান করা হয়েছে। বেশিরভাগ আধুনিক ভাষাগুলি এমনকি if(x = 10)কোনও বুলিয়ানকে অর্পণের ফলাফলকে বাধ্য করতে অস্বীকার করায় তারা যেমন মত প্রকাশও সংকলন করে না ।

অন্যরা যেমন বলেছে, এটি অবশ্যই কোনও সমস্যা নয়, তবে এটি কিছুটা জ্ঞানীয় বিভেদ সৃষ্টি করে।


32
"Yoda শর্তসাপেক্ষে" জন্য +1। আমি আসলে এটি করতে চাই। :)
ববি টেবিল

3
অর্ডারিং ঠিক থাকলেও আমি প্লেইন বুলেটিয়ান কাস্টের পরিবর্তে শূন্যের সাথে তুলনা করতে আপত্তি জানাই if(!value)
এসএফ

1
সুতরাং আপনি শর্তসাপেক্ষে অ্যাসাইনমেন্টকে একটি ত্রুটি বিবেচনা করছেন?

4
"বেশিরভাগ আধুনিক ভাষাগুলি এগুলিও সংকলন করে না" সমস্যাটি তখন আসে যখন আপনি এমন একটি ভাষা ব্যবহার করেন যা নিঃশব্দে একটি বুলিয়ানকে অ্যাসাইনমেন্টের ফলাফলকে জোর করে তোলে। আমি যে সর্বাধিক জনপ্রিয় ভাষাটি ভাবতে পারি তা হ'ল এটি জাভাস্ক্রিপ্ট। এই কারণেই আমি সর্বদা জাভাতেও যোডা শর্তাবলীর ব্যবহার করি যাতে আমি জাভাস্ক্রিপ্ট লেখার সময় এটি করতে ভুলে যাই না। আমি দুজনের মধ্যে প্রায়শই পর্যাপ্ত পরিমাণে পরিবর্তন করে যা এটি (এবং এটি) সমস্যা হতে পারে।
স্যাম হাসলার

3
কেউ কি এমন একটি সংকলক জানেন যা সংকলন করবে না if (0 == x)?
ক্রিস্টোফার Ives

56

এটি আপত্তিজনক কারণ এটি একটি ছোট, তবে লক্ষণীয় মানসিক কর আরোপ করে।

লোকেরা কার্যত সমস্ত প্রোগ্রামিং ভাষায় (এবং বেশিরভাগ প্রাকৃতিক ভাষা) বাম থেকে ডানদিকে পড়েন।

যদি আমি দেখি 123 == x, আমি মানসিকভাবে যেভাবে পার্স করছি তা হ'ল:

  • 123- তাতে কি? অসম্পূর্ণ তথ্য
  • == - ভাল, 123 হল 123, কেন এটি পরীক্ষা করুন ...
  • x- ঠিক আছে, তাই আমরা এই বিষয়ে উদ্বিগ্ন। কেবল এখনই আমার প্রসঙ্গ আছে।
  • পুনর্বিবেচনা করতে ফিরে যান 123এবং এক্স এর সাথে কেন তুলনা করা হয়।

আমি যখন দেখি x == 123মানসিক বিশ্লেষণটি হ'ল:

  • x- প্রসঙ্গটি সরবরাহ করে, আমি জানি শর্তটি কী। আমি বাকীগুলিকে উপেক্ষা করতে পছন্দ করতে পারি। পূর্বের প্রবাহের ভিত্তিতে আমার কেন ভাল হবে এবং কী আসবে তা ভাল ধারণা (এবং যদি এটি আলাদা হয় তবে অবাক হন)।
  • == - আমিও তাই ভাবছিলাম.
  • 123 - হা.

ব্যাঘাতটি ছোট (সাধারণ উদাহরণে), তবে আমি সর্বদা এটি লক্ষ্য করি।

আপনি যদি এর দিকে দৃষ্টি আকর্ষণ করতে চান তবে প্রথমে মানটি রাখা ভাল ধারণা হতে পারে if (LAUNCH_NUKES == cmd)। সাধারণত এটি উদ্দেশ্য নয়।


5
যথাযথভাবে। প্রাকৃতিক ভাষায় ধ্রুবক সর্বদা একই কারণে শেষ হয়: যদি আলো লাল হয় ...
মোজুবা

2
@ মোজুবা সত্য, এটি প্রায় সর্বজনীন। অদ্ভুতভাবে, কয়েকটি প্রাকৃতিক ভাষা রয়েছে যেখানে অবজেক্ট সাবজেক্টের আগে আসে (ওভিএস / ওএসভি ক্রম), তবে সেগুলি সমস্ত অস্পষ্ট।
dbkk

1
অন্যদিকে, আমাদের মধ্যে কিছু পরিবর্তনশীলের আগে প্রতীকগুলি পড়ার ঝোঁক থাকে। তারা আরও আকর্ষণীয়। তাই আমি আউট পার্স করব =বা ==সামনে 123বা x, এবং এমনকি আমার মাথায় ইংরেজি কোড অনুবাদ করতে বিরক্ত না শেষ পর্যন্ত।
ইজকাটা

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

47

ক্ষতিকর? না এটি কোনওভাবেই কাজ করে।

খারাপ অনুশীলন? বিতর্কযোগ্য, সেরা। এটি সাধারণ ডিফেন্সিভ প্রোগ্রামিং।

ঘুম ভেঙে যায় কি? নাহ।


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

17

এটি মূলত ফ্লাইম্বাইট।

না, এটি ভাল চেয়ে বেশি ক্ষতি করে না। সহজ।

আরো শব্দ?

সংকলক যুক্তি? এরম, ইসহ, সম্ভবত - নিজেকে থেকে নিজেকে বাঁচাতে কমপ্লায়ারের উপর খুব বেশি বিশ্বাস রাখবেন না।

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

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

পড়া শক্ত? আপনি অভিযোগ করছেন যে কোনও শালীন প্রোগ্রামারকে == হার্ডওয়ার্ড হওয়া উচিত (যা সব ধরণের দুর্বল অনুমান করে) তবে স্ব স্ব একই শালীন প্রোগ্রামার 0 == মান পড়তে পারে না ??

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


6
আমি মনে করি যে প্রোগ্রামিং অধ্যয়নের আগে বীজগণিত পদ্ধতিতে পড়াশোনা করেছেন তাদের জন্য 0 == মান অপ্রাকৃত পড়ে।
মোজুবা

4
এ জাতীয় বিন্দুটি নয় - হ্যাঁ, আপনি ঠিক বলেছেন এটি সঠিকভাবে পড়ে না তবে সমানভাবে আমরা যে কি প্রোগ্রামারস হিসাবে লিখি তা প্রাকৃতিক ভাষা হিসাবে লেখা হয় না এবং এটি কীভাবে আপনি ব্যাখ্যা করেন তা একটি বিষয় আপনি দেখুন
মার্ফ

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

7
@ এমোকজে - অতএব, আমাদের কোডটি পড়া লোকেরা আমাদের কোডটি সত্যই পড়তে হবে তা নিশ্চিত করার জন্য আমাদের সমস্ত কোডটি যথাসম্ভব নিবিড়ভাবে করা উচিত ?
কাজ ড্রাগন

6
@ মোকজ - আমি এটির প্রশংসা করি, তবে আপনার যুক্তিটি ছিল যে আপনি "মস্তিষ্কের তোতলা" আপনি ইয়োদা শর্তাধীন পড়ার সময় এটি একটি ভাল জিনিস। আমি এই প্রশ্নটি জিজ্ঞাসা করছি যে, যদি এটি হয় তবে আমাদের উচিত সমস্ত কোড লেখার লক্ষ্য রাখা উচিত যাতে আমরা "মস্তিষ্কের তোড়জোড়" করি? আসল প্রশ্ন।
কাজ ড্রাগন

11

আমি এটিকে ক্ষতি বলব না, তবে এটি অশ্লীল। তাই না আমি বলব না এটি করে।


10

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


5
এটি প্রশ্নের মূল বক্তব্য নয়, মূল বক্তব্যটি "এটি ক্ষতিকারক" - এবং তা নয়। সবচেয়ে ক্ষুদ্র জ্বালা সবচেয়ে খারাপ, তবে ক্ষতিকারক নয়।
মার্ফ

1
গতিশীল ভাষায় - একেবারে, আপনি একটি চিহ্নকে ভুল টাইপ করতে পারেন এবং পরে আপনার বাগের উত্স সন্ধানে আপনার সময় নষ্ট করতে পারেন
mojuba

3
সমস্ত শ্রদ্ধার সাথে, যখন আপনি একটি গভীর রাত (বা দুটি) অতিবাহিত করেছেন এবং উত্সটি খুঁজে পান (সি ++ কোডে) == এর পরিবর্তে = = এটি কিছুটা ওজন বহন করে।
দেবসোলো

2
@ ডেভসোলো: আমি মনে করি যে আপনার ক্যারিয়ারে সত্যিই একবার বা দু'বার ঘটতে হবে, তবে এর চেয়ে বেশি নয়
মোজুবা

9

কিছু লোক এটি শর্তসাপেক্ষে কী করছে তা পরিষ্কার করে দেওয়ার জন্য এটি ব্যবহার করে। এই ক্ষেত্রে:

উপায় 1:

FILE *fp;

fp = fopen("foo.txt", "w+");
if (fp == NULL) {

উপায় 2:

FILE *fp;

if (NULL == (fp = fopen("foo.txt", "w+"))) {

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

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

এটি এটিকে এমনভাবে মিশ্রিত করুন যেখানে এটি দেখতে দেখতে পৃথক ছয়জন লোকের মতো দেখাবে যাঁর নিজস্ব স্বতন্ত্র শৈলীতে এটি একবারে কাজ করেছিল, আমি একটু বিরক্ত হলাম।


4
দ্বিতীয় উদাহরণটি আমাকে "হাহ?" প্রথমটি অনেক বেশি পাঠযোগ্য। দুর্দান্ত উদাহরণ। :)
মতিন উলহাক

6

আমার কাছে এটি সহজ কন্ডিশনার যে কেউ (90 এর দশকে) সি এবং সি ++ শিখেছে, আমি এর সাথে অভ্যস্ত হয়েছি এবং এখনও কারণগুলি কম করা সত্ত্বেও এটি ব্যবহার করি।

"ধ্রুবক" জন্য বাম দিকে তাকানোর জন্য একবার আপনি "শর্তযুক্ত" হয়ে গেলে এটি দ্বিতীয় প্রকৃতিতে পরিণত হয়।

আমি এটি কেবলমাত্র সমতার জন্য (বা উপেক্ষিত সমতুল্য) জন্য ব্যবহার করি, এর চেয়ে বড় / কমের জন্য নয়।

আমি ডাব্লু / @ ওঙ্কোর উত্তরটি সম্পূর্ণরূপে সম্মত


5

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

উদাহরণস্বরূপ, আমি সিঙ্গল সাইন-অন দিয়ে কিছু কাজ করেছিলাম এমন একটি পরিস্থিতি ছিল যেখানে আপনার নির্দিষ্ট দুটি ধরণের ত্রুটি ঘটলে এবং একটি নির্দিষ্ট উপায়ে পুনরুদ্ধার করা হলে আপনার দুটি সমবর্তী সেশন হতে পারে তাই যদি আমি এটির ভিতরে থাকি তবে এটির জন্য একটি হ্যান্ডলার যুক্ত করতে হয় that এটার মতো কিছু:

if (2 <= application.httpcontext.current.session["thenameofmysessiontoken"].items.count())

স্বীকারযোগ্যভাবে এই উদাহরণে এটি করার অন্যান্য উপায় রয়েছে তবে এটি এমন একটি ক্ষেত্রে হবে যেখানে প্রথম নম্বরটি সম্ভবত আরও পাঠযোগ্য।


2
আমি মনে করি যে এখানে কীওয়ার্ডটি "এটি করার অন্যান্য উপায়";)
মোজুবা

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

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

3

এবং তবু ত্রুটি ঘটে। এবং কখনও কখনও আপনি কোনও লুপ অপারেটরে একটি অ্যাসাইনমেন্ট চান যেখানে আপনি অন্যথায় সাম্যতা পরীক্ষা করতে পারেন, বা কমপক্ষে এটি ব্যবহার করা স্ট্যান্ডার্ড অনুশীলন।

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

সুতরাং আমি বলব:

if ( 0 <= value )

তবে আমি আরও বলব:

if ( value <= 100 )

সাম্যতা আমি বামে ভেরিয়েবলের সাথে যাচাই করার ঝোঁক রাখব যদিও এটি কেবল আরও পাঠযোগ্য।


1
আমি if(y > x)সব সময় ব্যবহার করতে অভ্যস্ত । যদি না yধ্রুবক হয়।
মতিন উলহাক

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