একটি স্ট্রিং ভেরিয়েবলকে .equals () এর সাথে স্ট্রিং আক্ষরিকের সাথে তুলনা করার সময় আইটেমগুলির ক্রমের জন্য কি কোনও স্ট্যান্ডার্ড অনুশীলন রয়েছে? [বন্ধ]


11

প্রত্যেকের সুবিধাগুলি রয়েছে এবং আমি পার্থক্যগুলি বুঝতে পারি, তবে সেরা / মানক অনুশীলনটি কী বিবেচনা করা হয়? এবং কেন?

উদাহরণ স্বরূপ :

"myString".equals(myStringVar)
  • একটি সম্ভাব্য এনপিই এড়ানো এবং নাল চেকের প্রয়োজন হয় না। (ভাল জিনিস?)
  • নাল চেকের দরকার নেই বলে পড়তে ক্লিনার পড়তে হবে।
  • নাল যদি প্রত্যাশিত মান না হয় তবে আপনার প্রোগ্রামটি কোনও জ্ঞানী না হয়ে ভেঙে যেতে পারে।

যাহোক

myStringVar.equals("myString")
  • নালটি প্রত্যাশিত মান কিনা তা নাল চেকের প্রয়োজন। (ভাল জিনিস?)
  • নাল চেকের সাথে যৌগিক শর্তসাপেক্ষে বিশৃঙ্খলা করতে পারে।
  • এনপিই-র জন্য কোনও কিছু ভেঙে গেছে কিনা তা আমাদের জানানোর অনুমতি দেয়।

জাভাটির জন্য কোন প্রকরণটি মান হিসাবে বিবেচিত হয় এবং কেন?


2
নাল প্রত্যাশিত মান কিনা বা না, "সমান" অপারেশনটি এই সমস্যাটি নির্ধারণ করার জায়গা হওয়া উচিত?
ম্যাথু ফ্লিন 20

আমি এটা মনে করি না। তবে সেটাই আমার মতামত। আমি অন্যের যুক্তি শুনতে চাই।
ব্র্যান্ডনভি

যে ভাষাগুলিতে অ্যাসাইনমেন্ট / তুলনা করার জন্য = এবং / অথবা == ব্যবহার করা হয় সেগুলি বামে পরিবর্তন করতে না পারে এমন জিনিসটি রাখার পক্ষে সাধারণত সর্বোত্তম অনুশীলন যাতে আপনি কোনও তুলনা করার অর্থ যখন কোনও দুর্ঘটনাজনিত অ্যাসাইনমেন্টটি করতে না পারেন। ভাষাগুলির জন্য যেগুলিতে .equals এর মতো কোনও অবজেক্টে পদ্ধতি ব্যবহার করা হয় আমি তা মনে করি না।
গর্ডনএম

উত্তর:


3

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

if (x = 3)

এই শর্তটি সর্বদা সত্য হবে, যেহেতু এটি 3 এর অ্যাসাইনমেন্ট এক্সএ মান 3, এটি x এর সমান 3 পরীক্ষা করে না this এই সূক্ষ্ম বাগগুলি এড়ানোর জন্য, বিকাশকারীরা শর্তটি বিপরীত করতে শুরু করে:

if (3 = x)

এটিতে একই "বাগ" রয়েছে তবে এটি একটি সংকলক ত্রুটি তৈরি করবে, তাই এটি নিরাপদ।

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


-1 এটি জাভা কনভেনশনের জন্য কারণ নয় equals। সি এর থেকে ভিন্ন, জাভার সমস্যা হ'ল শূন্য x.equals(y)হলে এক্সপ্রেশনটি একটি এনপিই ফেলবে x। আপনার যদি স্ট্রিং আক্ষরিক হয় "something"এবং আপনি nullকেসটিকে "সমান নয়" হিসাবে বিবেচনা করতে চান, আপনি যদি নথক হতে পারেন "something".equals(y)কিনা তা জানেন না তবে লিখলে তা বোঝা যায় y। এটি কখনই কোনও এনপিই ফেলবে না।
আন্দ্রেস এফ।

1
  • আপনি যে সংস্থার জন্য কাজ করছেন তার সংস্কৃতির সাথে মানক এবং ভাল অনুশীলন আলাদা হবে

  • .NET এ আমাদের স্ট্যান্ডার্ডটি myStringVar == "myString"কেবল কারণ আমরা এতে একমত হয়েছি, অর্থাৎ আমরা এটি পরিষ্কার এবং সংক্ষিপ্ত বলে বিশ্বাস করি

দ্রষ্টব্য: এটি ==নিজের বস্তুর পরিবর্তে রেফারেন্সগুলির তুলনা করার কারণে জাভাতে প্রযোজ্য নয়। জাভাতে আপনার ব্যবহার করা উচিত myStringVar.equals("myString")


3
অন্তত জাভাতে, ব্যবহার করবেন না ==কারণ এটি কেবল অবজেক্টের রেফারেন্সের সাথে তুলনা করে। এটি বলেছিল, তত্ত্বাবধানের জন্য +1 - সম্মেলন প্রায়শই জিনিসগুলি করার সঠিক "সঠিক" উপায়টিকে সংজ্ঞায়িত করে।
মাইকেল কে

এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ! আমি উত্তর আপডেট করেছি :)
কোডার্ট

@ কোড ওয়ার্কস: আমি মনে করি আপনি মাইকের কথাটি মিস করেছেন। এছাড়াও, এটি জাভা নয় জাভা।
আমারা

প্রশ্ন ছিল: "তবে সর্বোত্তম / মানক অনুশীলনকে কী বিবেচনা করা হয়? কেন?" আমার উত্তর হ'ল মানক এবং সর্বোত্তম অনুশীলন এক সংস্থা থেকে অন্য প্রতিষ্ঠানে পরিবর্তিত হয়। আপনি কি এর সাথে একমত নন?
কোডার্ট

@ কোড ওয়ার্কস: কেউই এর সাথে একমত হতে পারেনি, কোড ওয়ার্কস। কিন্তু সবাই একমত পারে যে myStringVar == "myString"জাভা একটি গভীরভাবে খারাপ ধারণা (যদি না আপনি একেবারে নিশ্চিত myStringVarঅন্তরীণ করা হয়)।
আমারা

0

আমি মনে করি আপনি ঠিক বলেছেন যে এটি ভেরিয়েবলের নালিকা শব্দার্থতন্ত্রের উপর নির্ভর করে। আপনি যদি এটি নালার প্রত্যাশা না করেন এবং এটি পরীক্ষা করতে এবং এটি পরিচালনা করতে না হয় তবে প্রথম ফর্মটি ক্লিনার।

এটি বলেছিল, স্ট্রিং আক্ষরিক এম্বেড করার পরিবর্তে সম্ভবত আরও ভাল বিকল্প এটি হতে পারে:

private final String MY_STRING = "myString";
if(MY_STRING).equals(myStringVar);

বিশেষত যদি একের বেশি জায়গায় স্ট্রিং ব্যবহারের সম্ভাবনা থাকে।


2
-1: আসলে ভাল না; সাধারণত নগণ্য মান সহ বিশৃঙ্খলা যুক্ত করে
আমারা

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

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