জাভা ভেরিয়েবল এবং পদ্ধতির নামগুলিতে আন্ডারস্কোর ব্যবহার করা [বন্ধ]


83

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

তাদের ব্যবহার করা উচিত কেবলমাত্র জায়গাটি ধ্রুবকগুলিতে রয়েছে (যেমন "পাবলিক ফাইনাল স্ট্যাটিক ইন্ট IS_OKAY = 1;" তে), কারণ ধ্রুবকগুলি সমস্ত উটের ক্ষেত্রে হওয়া উচিত এবং উটের ক্ষেত্রে নয়। এখানে, আন্ডারস্কোরটি কোডটিকে আরও পঠনযোগ্য করে তুলবে।

আপনি কি মনে করেন জাভাতে আন্ডারস্কোর ব্যবহার করা খারাপ স্টাইল? যদি তাই হয় (বা না) তবে কেন?

উত্তর:


146

যদি এখনই এটি ব্যবহার করার কোনও কোড না থাকে তবে আমি এটি চালিয়ে যাওয়ার পরামর্শ দিই। যদি আপনার কোডবেস এটি ব্যবহার করে তবে এটি চালিয়ে যান।

কোডিং শৈলী সম্পর্কে সবচেয়ে বড় বিষয় হল ধারাবাহিকতা । যদি আপনার সাথে সামঞ্জস্য করার মতো কিছু না থাকে তবে ভাষা বিক্রেতার সুপারিশগুলি সম্ভবত শুরু করার জন্য ভাল জায়গা।


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

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

4
এটি এইভাবে ইন্টারফেসের নামকরণের মতো: ReadableInterface- একেবারে নিরর্থক। আধুনিক আইডিইগুলিতে আপনাকে ধরণের ভেরিয়েবল বা এর ব্যাপ্তি নির্দিষ্ট করার দরকার নেই - রঙিং এবং দ্রুত জাম্পিং আপনার জন্য সমস্ত কাজ করে। সুতরাং আইএমও এটি একটি খারাপ শৈলী হিসাবে আপনি নিরর্থক চরিত্রগুলি টাইপ করেন এবং লোকেদের এটি পড়তে / বজায় রাখতে বাধ্য করেন।
কিডিস্কটোস

122
sunDoesNotRec सिफारिशঅ্যান্ডরসকর্স কারণজবা ভারিবেলঅ্যান্ডফাংশননামসটেন্ডটোবোবেলংএনুএফআইটিআই ();

যেমন_আমরা_ শেভ_সেইড_সংশ্লিষ্টতা_এ_এ_এবং_আর গুরুত্বপূর্ন_কথা_এইখানে_সোসো_সোচেজ_আপনি_থিংক_ইস_মোর_প্রেডেবল ();

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

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

হাঃ হাঃ হাঃ! বলা হচ্ছে, যখন কোডটি বানানচিহ্নযুক্ত সম্পাদকগুলিতে আটকানো হয়ে যায়, তখন 'ভুল বানান' শব্দটি আন্ডারলাইন করা হয়, যার ফলে আন্ডারস্কোরটিকে অস্পষ্ট করা হয়। আন্ডারস্কোর ব্যবহার না করার এটি একটি ভাল কারণ। এছাড়াও, উটের কেসটি ছোট হয়। পরিশেষে, উপরের সারি (যেমন শিফ্ট ড্যাশ '-') এর চেয়ে চিফটি অক্ষরে ব্যবহার করা সহজ।
তিহামার

@ থাইমার অন্যরা যুক্তি দেখান যে snake_caseফর্মটি পড়া সহজ। বিশেষত সংক্ষিপ্ত শব্দ (1-2 টি অক্ষর) সহ, আমি অবশ্যই যুক্তি দিয়ে বলব যে এটিই এটি। যেমন "টাইপ করা শক্ত", লটঅফমিক্সডক্যাসবিথিনআইটি দিয়ে একটি শব্দ টাইপ করাও যথাযথভাবে সুবিধাজনক নয়। আমি অ্যাডভোকেট করতাম যে এটি আপনার অভ্যাসের বিষয়। জাভাতে যদিও, আমি জেএলএস / ইত্যাদি দ্বারা প্রস্তাবিত হিসাবে "প্রচলিত ফর্মটি ব্যবহার করুন" বলি। রুবি / পাইথন / সি-তে সাপের ক্ষেত্রে ব্যবহার করুন। এবং আরও ...
লন্ডবার্গ

37

বিধি:

  1. আপনি যে কোডটি সম্পাদনা করছেন তা করুন
  2. # 1 যদি প্রয়োগ না হয় তবে উট কেস ব্যবহার করুন, কোনও আন্ডারস্কোর নেই

31

আমি মনে করি না জাভা বা অন্য কোনও ভাষায় সদস্য ভেরিয়েবলগুলি চিহ্নিত করতে _ বা m_ ব্যবহার করা খারাপ। এটি আমার মতে এটি আপনার কোডের পঠনযোগ্যতার উন্নতি করে কারণ এটি আপনাকে একটি স্নিপেটটি দেখতে এবং স্থানীয়দের থেকে সমস্ত সদস্যের ভেরিয়েবলগুলি দ্রুত সনাক্ত করতে দেয়।

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

আমার নিজের ব্যক্তিগত স্টাইলটি _ এর পরিবর্তে m_ ব্যবহার করা। বৈশ্বিক এবং স্থির ভেরিয়েবলগুলি থাকার কারণ। M _ / _ এর সুবিধা হ'ল এটি একটি ভেরিয়েবলের সুযোগকে পৃথক করে। সুতরাং আপনি গ্লোবাল বা স্ট্যাটিকের জন্য _ পুনরায় ব্যবহার করতে পারবেন না এবং পরিবর্তে আমি যথাক্রমে g_ এবং s_ বেছে নেব।


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

10
সুতরাং আপনি প্রশ্নের একটি সাবসেট মন্তব্য করার জন্য আমাকে নিচে চিহ্নিত? কিছুটা চরম মনে হচ্ছে
জেয়ার্ডপাড়

4
@ জারেডপার - আপনিই কেবলমাত্র একটি ভাল বিকল্প স্টাইলিং পরামর্শ দেয়। তার জন্য +1।
jangofan

এটি লেখার জন্য (অথবা সি ++ এ এই>> ফু) সম্ভবত স্থানীয় এবং ক্ষেত্র / সদস্যের ভেরিয়েবলের পার্থক্য করার আরও স্পষ্ট উপায়।
কেভিন

7

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

আপনার প্রশ্নের উত্তর দিতে: আমি ব্যক্তিগত ভেরিয়েবলগুলি চিহ্নিত করতে একটি শীর্ষস্থানীয় আন্ডারস্কোর ব্যবহার করি। আমি এটি পরিষ্কার পেয়েছি এবং আমি কোডের মাধ্যমে দ্রুত স্ক্যান করতে পারি এবং যা চলছে তা খুঁজে পেতে পারি।

(নামের সংঘর্ষ প্রতিরোধ ব্যতীত আমি প্রায় "এই" ব্যবহার করি না))


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

6

একটি ভেরিয়েবলের সামনের দিকে 'm_' বা '_' ব্যবহার করার ফলে একটি অবজেক্টের বিভিন্ন পদ্ধতিতে সদস্য ভেরিয়েবলগুলি সহজেই পাওয়া যায়।

পার্শ্ব সুবিধার হিসাবে 'm_' বা '_' টাইপ করলে ইন্টেলসেন্সটি এগুলি প্রথমে পপ আপ করবে;)


4
আপনি যদি জাভা প্রোগ্রামিং করছেন তবে সম্ভবত আপনার একটি আইডিই থাকবে যা আপনার সদস্য ভেরিয়েবলগুলিকে আলাদা রঙে রঙ করবে। "এম_" ঠিক বাজে।
জিবিবি

আমি এটি পড়তে ভাল "এটি" পছন্দ করি:if (itsEmail.equals(email))
davetron5000

7
আমি এই পছন্দ। সদস্য নামের জন্য। একেবারে অনিচ্ছাকৃত।
এস .লট

5
  • আমি (বেসরকারী) উদাহরণের ভেরিয়েবলগুলির জন্য শীর্ষস্থানীয় আন্ডারস্কোরগুলি পছন্দ করি, এটি পড়তে এবং আলাদা করা সহজ বলে মনে হয় course অবশ্যই এই জিনিসটি আপনাকে প্রান্তের ক্ষেত্রে (যেমন জনসাধারণের উদাহরণের ভেরিয়েবলগুলি (সাধারণ নয়, আমি জানি) অসুবিধায় ফেলতে পারে - যেভাবে আপনি নাম লেখান এগুলি আপনি আপনার নামকরণের কনভেনশনটি যুক্তিযুক্তভাবে ভঙ্গ করছেন:
  • private int _my_int; public int myInt;? _my_int? )

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

-আটোমেটেড কোড জেনারেশন (যেমন, গ্রহণের উত্পন্ন গ্রাহক, সেটটার) এটি বুঝতে পারে না তাই আপনাকে এটি সনাক্ত করার জন্য হাতে বা ম্যাকটি যথেষ্ট পরিমাণে গ্রহণ করতে হবে।

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


4
আপনার উপসর্গ (বা প্রত্যয়) পছন্দগুলি বোঝার জন্য Elpipse সেট আপ করা বেশ সোজা-এগিয়ে। ইন Preferences-> Java-> কোড স্টাইল একটি টেবিল যেখানে আপনি ক্ষেত্র স্ট্যাটিক ক্ষেত্র স্ট্যাটিক চূড়ান্ত ক্ষেত্র, পরামিতি ও স্থানীয় ভেরিয়েবল জন্য পরিবর্তনশীল নাম নিয়মাবলী সেট করতে পারেন আছে। সমস্ত কোড জেনারেটর এই সেটিংসকে সম্মান জানায়।
মেটাসিম

5

পুরানো দিনগুলিতে আন্ডারস্কোরগুলি ব্যবহার করা খারাপ স্টাইল হিসাবে বিবেচিত হওয়ার একটি কারণ রয়েছে। একটি রানটাইম কম্পাইলার কিছু সামর্থের বাইরে ছিলেন এবং মনিটর বিস্ময়কর 320x240 পিক্সেল রেজোলিউশনে এসেছিল এটা প্রায়ই সহজ নয় মধ্যে পার্থক্য ছিল _nameএবং __name


এই কারণেই ওক্যামেল কখনই পুরানো মেশিনে চলবে না।
ডেভিড টনহোফার

4

প্রাইভেট বনাম পাবলিক ভেরিয়েবলের পার্থক্য করার জন্য কিছু ভাল লাগছে তবে সাধারণ কোডিংয়ে আমি '_' পছন্দ করি না। আমি যদি এটি নতুন কোডে সহায়তা করতে পারি তবে আমি তাদের ব্যবহার এড়াতে চাই।


4

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

আমার জন্য, '_' টাইপ করা খুব কঠিন :)


3

এটি কোডিং শৈলীর মিশ্রণ। একটি চিন্তাভাবনা হল ব্যক্তিগত সদস্যদের আলাদা করার জন্য একটি আন্ডারস্কোর দিয়ে প্রফেস করা।

setBar( int bar)
{
   _bar = bar;
}

পরিবর্তে

setBar( int bar)
{
   this.bar = bar;
}

অন্যরা একটি অস্থায়ী স্থানীয় ভেরিয়েবল নির্দেশ করতে আন্ডারস্কোর ব্যবহার করবে যা পদ্ধতি কলের শেষে স্কোপ থেকে বাইরে চলে যাবে। (আমি এটি বেশ অপব্যবহার্য বলে মনে করি - একটি ভাল পদ্ধতিটি এত দীর্ঘ হওয়া উচিত নয়, এবং ঘোষণাটি এখানে সঠিক হয়! সুতরাং আমি জানি যে এটির স্কোপের বাইরে নেই) সম্পাদনা: Godশ্বর এই স্কুল থেকে একজন প্রোগ্রামার এবং সদস্য ডেটা স্কুল থেকে কোনও প্রোগ্রামারকে নিষিদ্ধ করবেন ! এটা নরক হবে।

কখনও কখনও, উত্পন্ন কোড _ বা __ সহ ভেরিয়েবলের প্রিফেস করবে। এই ধারণাটি যে কোনও মানুষ কখনই এটি করবে না, তাই এটি নিরাপদ।


আপনার ক্ষেত্রে আমি নিম্নলিখিতটি ব্যবহার করি: সেটবার (ইন্ট এবার) {বার = এবার; } পাঠযোগ্য, এটি ছাড়া। বা _বার ...
জর্জি

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

4
আমি আসলে এমন একটি ক্ষেত্রে দৌড়েছি যেখানে অটোজেনারেটেড কোডটি ভাষার কীওয়ার্ডগুলির মধ্যে একটির সাথে মিলে যায়, তাই এটি এড়ানোর সর্বোত্তম উপায় হ'ল প্রথম দিকে একটি _কে চাপ দেওয়া।
জো প্লান্ট

2

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

সন্দেহ নেই যে কোড আপনি দেখেছেন এমন কেউ লিখেছেন যিনি এমন ভাষায় কাজ করতেন যেখানে আন্ডারস্কোর গ্রহণযোগ্য ছিল।

কিছু লোক কেবল নতুন কোডিং শৈলীতে খাপ খাইয়ে নিতে পারে না ...


কোডিংয়ের সময় আমি বেশিরভাগ ক্ষেত্রে "অন্যের মতো করুন" দর্শনের সাথে একমত হন তবে নিখুঁত হিসাবে নয়। আমি মনে করি যে এখানে একটি দৃ strong় যুক্তি রয়েছে যা যুক্তিসঙ্গত শনাক্তকারী দৈর্ঘ্যের কারণে সাপ_সেসেড_ভেরিয়েবলগুলি ক্যামেল কেসেড ভেরিয়েবলগুলির চেয়ে পড়া সহজ। আমার ন্যায়সঙ্গততা হ'ল দর্শনীয়ভাবে জ্ঞানীয় বোঝা হ্রাস করা একটি ছোট জিনিস, তবে এখনও দরকারী। দস্তাবেজগুলি পড়ার সময় এবং সংগীত শোনার সময় লোকেরা কোডে সাদা জায়গার প্রশংসা করে। উট কেস, আমার ধারণা, 'দক্ষতা' এর নামে সাদা স্থানের প্রতিবন্ধকতা। কার জন্য দক্ষতা?
ডেভিড জে

2

লোকেরা এটি করার কারণটি (আমার অভিজ্ঞতাতে) হ'ল সদস্য ভেরিয়েবল এবং ফাংশন পরামিতিগুলির মধ্যে পার্থক্য। জাভাতে আপনার এর মতো ক্লাস থাকতে পারে:

public class TestClass {
  int var1;

  public void func1(int var1) {
     System.out.println("Which one is it?: " + var1);
  }
}

আপনি যদি সদস্যটিকে পরিবর্তনশীল _var1 বা m_var1 বানিয়ে থাকেন তবে ফাংশনে আপনার অস্পষ্টতা থাকবে না।

সুতরাং এটি একটি স্টাইল, এবং আমি এটি খারাপ বলব না।


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

1

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

কমপক্ষে, ইলিস্পের মতো আইডিইগুলি অজ্ঞেয়বাদী, পরিবর্তনশীল উপসর্গ বা প্রত্যয়, ব্রেস প্লেসমেন্ট এবং স্পেস ম্যানেজমেন্টের বিভিন্ন স্টাইল ইত্যাদির মতো নিয়ম সেট করার অনুমতি দেয় তাই আপনি এটি আপনার নির্দেশিকাগুলির সাথে সংশোধন করে কোড পুনরায় ফর্ম্যাট করতে পারেন ।

দ্রষ্টব্য: আমি তাদের পুরানো অভ্যাসগুলি সি / সি ++ থেকে রক্ষা করছি, সদস্য ভেরিয়েবলের জন্য এম_সেটিকের সাথে জাভা কোডিং করছি (এবং স্ট্যাটিকের জন্য s_), ফাংশনের নামগুলির জন্য প্রাথমিক বড় অক্ষর ব্যবহার করে এবং বন্ধনীগুলি সারিবদ্ধ করি। .. জাভা মৌলবাদীদের জন্য ভয়াবহতা! ;-)
মজাদারভাবে, আমি যেখানে কাজ করি সেগুলি এই কনভেনশনগুলি ব্যবহার করা হয় ... সম্ভবত প্রাথমিক প্রাথমিক বিকাশকারী এমএফসি ওয়ার্ল্ড থেকে আসে! :-D


0

এটি কেবল আপনার নিজস্ব স্টাইল, কোনও খারাপ স্টাইলের কোড এবং কোনও ভাল স্টাইলের কোড কিছুই নয়, কেবল আমাদের কোডকে অন্যের সাথে পার্থক্য করুন।

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