জাভা প্যাকেজ নামে শব্দ বিভাজক জন্য কনভেনশন কি?


370

প্যাকেজের নামে আলাদা আলাদা শব্দ কীভাবে করা উচিত? নিচের কোনটি সঠিক?

  1. com.stackoverflow.my_package (আন্ডারস্কোর)
  2. com.stackoverflow.my-package (হাইফেন)
  3. com.stackoverflow.MyPackage (ক্যামেলকেস)

সাধারণ মান কী?


15
এখনও উল্লেখ করা হয়নি এমন অন্য একটি উদাহরণটি একটি com.stackoverflow.my.package
কালজয়ী

11
(২) আইনী জাভা নয়। আপনি কেন এটি সম্পর্কে জিজ্ঞাসা করছেন তা অস্পষ্ট।
লার্নের মারকুইস

মনে রাখবেন যে এগুলি সমস্তই স্বতন্ত্রতা নিশ্চিত করার জন্য। কেবলমাত্র কার্যকর জিনিসটি জাভা থেকে বাইরে থাকা * * স্থান।
থরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


248

অফিসিয়াল নামকরণের কনভেনশনগুলির নথি যা লিখেছিল তা এখানে:

প্যাকেজগুলি

একটি অনন্য প্যাকেজের নাম উপসর্গ সবসময় সব ছোট হাতের হওয়া ASCII অক্ষর লেখা আছে এবং টপ লেভেল ডোমেইন নেম এক হওয়া উচিত, বর্তমানে com, edu, gov, mil, net, org, অথবা ইংরেজি দুই অক্ষর কোড দেশ চিহ্নিতকরণের এক আইএসও উল্লেখিত স্ট্যান্ডার্ড 3166, 1981।

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

উদাহরণ

  • com.sun.eng
  • com.apple.quicktime.v2
  • edu.cmu.cs.bovik.cheese

তথ্যসূত্র


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

  • com.sun.sunsoft.DOE
  • gov.whitehouse.socks.mousefinder
  • com.JavaSoft.jag.Oak
  • org.npr.pledge.driver
  • uk.ac.city.rugby.game

নিম্নলিখিত অংশগুলি প্রাসঙ্গিক:

কিছু ক্ষেত্রে, ইন্টারনেট ডোমেন নামটি কোনও বৈধ প্যাকেজের নাম নাও হতে পারে। এই পরিস্থিতিগুলি মোকাবেলার জন্য কয়েকটি প্রস্তাবিত কনভেনশন রয়েছে:

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

তথ্যসূত্র


52
অধ্যায় 7.7 এমনকি প্যাকেজের নামগুলিতে আন্ডারস্কোর ব্যবহারের পরামর্শ দেয়!
আন্দ্রেয়াস ডলক

1
আপডেট হওয়া তথ্যসূত্র: docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.1 ডকসস.অরাকল. com / javase/ specs / jls/ se7 / html/ jls- 7.html # jls-7.1 (এখানে আর 6.8.1 এবং 7.7 নেই)
ভিক্টর

6
এখানে: oracle.com/technetwork/java/codeconventions 135099.html এটি সর্বনিম্ন বলেছে, তবে এখানে ডকসস.ওরকল / জাভাসে / স্পেসস / জেলস / সি 7 / এইচটিএমএল / জেজেলস -6html#jls - 6.1 এতে বলা হয়েছে প্রথম উপাদানটি নিম্নতর ক্ষেত্রে হওয়া উচিত, এছাড়াও তারা বড় হাতের শব্দ পৃথককরণের উদাহরণগুলি সরিয়ে ফেলে। এছাড়াও এখানে: docs.oracle.com/javase/tutorial/java/package/namingpkgs.html এটি সর্ব-লোয়ার কেস বলে। সুতরাং মনে হয় প্যাকেজ নামের উচ্চ ক্ষেত্রে বর্তমানে নিরুৎসাহিত।
dhblah

27
অধ্যায়ের Chapter.core আন্ডারস্কোর ব্যবহার করার পরামর্শ দিচ্ছে না, এটি বিশেষ / অবৈধ প্রতীকগুলিকে একটি আন্ডারস্কোর দিয়ে প্রতিস্থাপন করার পরামর্শ দেয় যা সাধারণ ব্যবহারের জন্য কেবল সুপারিশ করা থেকে অনেক দূরে।
eduard.dudar

270

তিনটিই কনভেনশন নয়।

ব্যবহার com.stackoverflow.mypackage

প্যাকেজের নামগুলি উটের কেসিং বা আন্ডারস্কোর বা হাইফেন প্যাকেজ নামকরণের কনভেনশন অনুসরণ করে না ।

এছাড়াও, গুগল জাভা স্টাইল গাইড ঠিক একই (যেমন com.stackoverflow.mypackage) কনভেনশনটি নির্দিষ্ট করে:

5.2.1 প্যাকেজের নাম

প্যাকেজের নামগুলি সমস্ত ছোট হাতের অক্ষর, একটানা শব্দের সাথে একসাথে একত্রিত (কোনও আন্ডারস্কোর নেই)। উদাহরণস্বরূপ, com.example.deepspace, না com.example.deepSpace বা com.example.deep_space

- গুগল জাভা স্টাইল গাইড: 5.2 আইডেন্টিফায়ার টাইপের দ্বারা বিধি: 5.2.1 প্যাকেজের নাম


9
আমি আংশিকভাবে সম্মত হই - জাভা নামকরণ কনভেনশন অনুসারে এগুলি 'ভুল' নয় তবে সেগুলি আমার মতে ব্যবহার করা উচিত নয়। ( java.sun.com/docs/codeconv/html/CodeConventions.doc8.html )
আন্দ্রেস

@ আন্ড্রেস_ডি আপনি যে লিঙ্কটি সরবরাহ করেছেন তাতে বলা হয়েছে যে "একটি স্বতন্ত্র প্যাকেজ নামের উপসর্গটি সর্বদা সর্বস্তরের ASCII অক্ষরে লেখা থাকে"
হোসে গমেজ ২

1
@ জোসেগেমেজ " উপসর্গ "। সুতরাং ইমো এটি প্যাকেজের নামটিকে ক্যামেলকেস বা সাপ_কেস থেকে অন্তর্ভুক্ত করে অন্য সমস্ত শব্দ বাদ দেয় না
আনটেক

21

যে কেউ আন্ডারস্কোর _ (এটি ঠিক আছে) ব্যবহার করতে পারবেন

হাইপেন ব্যবহার করা উচিত নয় - (এটির খারাপ অভ্যাস)

কারও প্যাকেজ নামের ভিতরে বড় অক্ষর ব্যবহার করা উচিত নয় (খারাপ অভ্যাস)

দ্রষ্টব্য: এখানে "খারাপ অনুশীলন" প্রযুক্তিগতভাবে আপনাকে এটি ব্যবহারের অনুমতি দেওয়া হয়, তবে প্রচলিতভাবে এটি লেখার পক্ষে ভাল আচরণ নয়।

উত্স: একটি প্যাকেজটির নামকরণ (ডকস.অরাকল)


47
হ্যাঁ, হাইফেন ব্যবহার করা খারাপ অভ্যাস, কারণ এটি একটি ত্রুটি। এবং কোড লিখি যা সংকলন করে না তা অবশ্যই খারাপ অভ্যাস।
glglgl

ভাল লিঙ্ক - উত্সটি কী বলে আপনি যখন জানেন তখন এই সমস্ত কিছু প্রসঙ্গ দিতে সহায়তা করে। আমি সমস্ত ছোট মামলার কনভেনশনেও অভ্যস্ত। তবে ডক্স অনুসারে, দেখে মনে হচ্ছে এটি কেবল পছন্দ / শৈলীর বিষয়। আমি প্যাকেজ নামের জন্য উটের মামলার বিষয়ে জিজ্ঞাসা করা নির্দিষ্ট পোস্টে একটি মন্তব্য যুক্ত করেছি (যা আমি মনে করি না যে এই পোস্টের নকল, বিটিডব্লিউ - যা সাধারণভাবে কনভেনশন সম্পর্কে জিজ্ঞাসা করে) স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 757575৫78৮৩ / /
জিন বো বো

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

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

দেখা যাচ্ছে আমি এটিকে মিস করেছি: oracle.com/technetwork/java/codeconventions-135099.html সমস্ত ছোট হাতের জিনিসগুলি ওরাকলের প্যাকেজ নাম কনভেনশনের একটি অংশ। আমি এখনও মনে করি যে এটি উট কেসটি বাতিল করার জন্য একটি কৃপণ কনভেনশন যা কম শুরু হয়, (বিরল) সময়গুলিতে যখন আপনাকে দুটি শব্দের প্যাকেজের নাম ব্যবহার করা দরকার এবং এটি দুটি ডিরেক্টরি তৈরি করার কোনও অর্থ হয় না। তবে ওহ ভাল।
ম্যানিয়াস

18

আনুষ্ঠানিক নামকরণের কনভেনশনগুলি কঠোর নয়, এমনকি তারা উটের মামলার স্বীকৃতি উপসর্গ ব্যতীত ( comআপনার উদাহরণে) 'নিষিদ্ধ' করে না ।

তবে আমি ব্যক্তিগতভাবে বড় হাতের অক্ষর এবং হাইফেনেশনগুলি এমনকি সংখ্যাকে এড়িয়ে যাব । আমি com.stackoverflow.mypackageব্র্যাগবয়ের মতো প্রস্তাবিত পছন্দ করব।

(হাইফেনেশন '-' প্যাকেজের নামে বৈধ নয়)

সম্পাদনা

আকর্ষণীয় - নামকরণের সম্মেলন সম্পর্কেও ভাষা স্পেসিফিকেশনের কিছু বলতে হবে।

ইন অধ্যায় 7.7 একটি স্বতন্ত্র প্যাকেজের নাম আমরা যে (তাই ক্যামেলকেস স্বরলিপি ঠিক আছে হবে) বড় হাতের অক্ষরে অক্ষরে গঠিত প্যাকেজের নামের সাথে উদাহরণ দেখুন ও তারা একটি আন্ডারস্কোর ( "মেরি Lou," -> "mary_lou") দ্বারা hyphonation প্রতিস্থাপন করতে সুপারিশ এবং উপসর্গ জাভা একটি আন্ডারস্কোর সহ কীওয়ার্ডগুলি ("com.example.enum" -> "com.example._enum")

প্যাকেজ নামের উচ্চ স্তরের বর্ণগুলির জন্য আরও কয়েকটি উদাহরণ অধ্যায় 6.8.1 প্যাকেজের নামগুলিতে পাওয়া যাবে ।


2
আন্ড্রেয়াস যেমন উল্লেখ করেছেন, প্যাকেজের নামগুলিতে উপরের আবরণ ব্যবহার সম্পর্কে কোনও নিয়ম নেই । এটি এড়ানোর একটি নির্দিষ্ট কারণ হ'ল আমি ক্রস প্ল্যাটফর্ম বিকাশ করার সময় লোকেদের মিশ্র কেস প্যাকেজের নাম নিয়ে সমস্যায় পড়ে থাকতে দেখেছি। বিশেষ করে যখন কেউ নামান্তর বা প্যাকেজের ক্ষেত্রে পরিবর্তন করার সিদ্ধান্ত নেয়, তাহলে আপনি উভয় আপনার VCS ও উন্নয়ন পরিবেশের ওপর নির্ভর করছি না ঠিক ডিরেক্টরির কেস সাথে সঠিক জিনিস।
কর্তিত

2
আসলে, এখানে নিয়ম রয়েছে: "একটি অনন্য প্যাকেজ নামের উপসর্গ সর্বদা সর্বনিম্ন ASCII বর্ণগুলিতে লেখা থাকে" ( oracle.com/technetwork/java/codeconventions 135099.html )
জোসে

4

বুদ্ধিমানরা প্যাকেজের নামগুলিতে কুৎসিত দেখাচ্ছে। কিসের জন্য মূল্য, আমি তিনটি বা তার বেশি শব্দের সংমিশ্রণের ক্ষেত্রে আমি আদ্যক্ষর ব্যবহার করি (উদাহরণস্বরূপ com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo:) এবং তারপরে প্যাকেজটির উদ্দেশ্যটি নথিভুক্ত করি package-info.java


4
প্যাকেজের নামটি দেখে প্যাকেজটির বিষয়বস্তু বুঝতে পারা এবং অসুবিধা নাও হতে পারে
বিশাল আক্কালকোট

1
যথেষ্ট ফর্সা। এজন্য আমি ডকুমেন্টেশন ব্যবহার করার পরামর্শ দিই। আমি এই পদ্ধতির যে কোনও সময় পূর্ণ শব্দের সংশ্লেষের পরিবর্তে ব্যবহার করতে চাই (এপিআইরেটসইট - এটি কি 'এপিআই রেট শিট' বা 'একটি পাইরেট শীট'?)
jpangamarca

1

প্যাকেজের নামে শব্দের সংমিশ্রণ এমন কিছু যা বেশিরভাগ বিকাশকারী না করেন।

আপনি যেমন কিছু ব্যবহার করতে পারেন।

com.stackoverflow.mypackage

পড়ুন JLS নাম ঘোষণা

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