অ্যান্ড্রয়েড আইডি নামকরণের কনভেনশন: আন্ডারস্কোর বনাম উটের ক্ষেত্রে নিম্নতর ক্ষেত্রে


90

আমি বর্তমানে অ্যান্ড্রয়েডের জন্য একটি অ্যাপ্লিকেশন প্রোগ্রাম করছি। এখন আমি যা জানতে পেরেছি তা হল আপনি অঙ্কনযোগ্য ফোল্ডারে কোনও ছবি রিসোর্স অবজেক্টস, বলতে পারবেন না এবং "myTestImage.jpg" এর মতো নাম রাখতে পারবেন না। এটি আপনাকে সংকলক ত্রুটি দেবে যেহেতু উটের কেস সিনট্যাক্স অনুমোদিত নয়, সুতরাং আপনাকে এটির নাম "my_test_image.jpg" রাখতে হবে।

তবে এক্সএমএল ফাইলটিতে আইডিগুলি আপনি কীভাবে সংজ্ঞায়িত করবেন what আপনার নিম্নলিখিত সংজ্ঞা আছে বলে

<TextView android:id="@+id/myTextViewFirstname"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Firstname" />

এটি একটি বৈধ সংজ্ঞা, সংকলন করে এবং আমার অ্যান্ড্রয়েড এমুলেটরটিতে ঠিক জরিমানা কাজ করে - আপনি যেমন দেখেন - আমি উটের কেস সিনট্যাক্সে আইডি নির্দিষ্ট করছি।

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

ধন্যবাদ

উত্তর:


87

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

আমি ধীরে ধীরে উটের ক্ষেত্রে আমার মন পরিবর্তন করছি, যদিও আপনি দুটি ভিন্ন নামকরণের সম্মেলন শেষ করেছেন - উদাহরণস্বরূপ:

// This must be undescored due to naming constrictions
setContentView(R.layout.my_long_layout_name);

// Now this looks a little out of place
findViewById(R.id.myLongSpecificId);

আমিও এখানে মানদণ্ড নিয়ে অবাক হই। গুগল তাদের উদাহরণগুলিতে অসঙ্গতিপূর্ণ; কখনও কখনও তারা সমস্ত ছোট হাতের ব্যবহার করে, কখনও কখনও তারা আন্ডারস্কোর sertোকায় এবং কখনও কখনও তারা উটের ক্ষেত্রে ব্যবহার করে।


19
হ্যাঁ, এটাই আমার সমস্যা। আপনি XML লেআউট সংজ্ঞায়নের অভ্যন্তরে আইডির রেফারেন্সিং নিয়ন্ত্রণ / উইজেটগুলির জন্য উট-কেস বা আন্ডারস্কার্ড ব্যবহার করতে পারেন এমন সময় লেআউটগুলির জন্য আন্ডারকর্ডিং নামকরণ কনভেনশনটি ব্যবহার করতে বাধ্য করেন। গুগলের সত্যই এখানে কিছু মান নির্ধারণ করা উচিত (যদি তারা ইতিমধ্যে না পেয়ে থাকে তবে কমপক্ষে আমি কিছু খুঁজে পাইনি)। সুতরাং একটি উপায়ে যাওয়ার বিষয়টি নিশ্চিত হ'ল আপনি আউটপুট লেআউটগুলি বা আইডি-রেফারেন্সযুক্ত ক্ষেত্রগুলি রেফারেন্স করুন না কেন অ্যাপ্লিকেশন জুড়ে সবচেয়ে ভাল consistent
জুড়ী

কেবল কৌতূহলের জন্য: গুগল কী অসঙ্গতিযুক্ত এমন কোনও লিঙ্ক আপনার কাছে রয়েছে যার অর্থ তারা আইডির জন্য উট-কেস স্বরলিপি ব্যবহার করেছেন?
জুড়ী

6
জিনিসগুলিকে আরও বিভ্রান্ত করার জন্য, প্রকল্পের টেম্পলেটগুলিতে শৈলীর নাম (যা শৈলীর আইডির মতো) পাস্কেলকেস ব্যবহার করে, যেমন AppBaseThemeএবং AppTheme
এডওয়ার্ড ব্রে

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

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

13

আপনি যদি android.R.id.*ক্ষেত্রগুলির দিকে নজর রাখেন তবে লক্ষ্য করবেন যে এগুলি সমস্তই উটের ক্ষেত্রে রয়েছে। সুতরাং অ্যান্ড্রয়েড আইডিগুলি যদি উটের ক্ষেত্রে লিখিত হয় তবে আমার ধারণা এই সম্মেলনটি আমাদের অনুসরণ করতে হবে :)


তারা সেখানে উটের ক্ষেত্রে রয়েছে কারণ তারা উট কেসে তৈরি হয়েছিল। এটি সম্প্রদায়ের পক্ষে কোনও কোডিং শৈলীর নজির স্থাপন করে না এবং এটি আইডি স্ট্রিংগুলির তুলনায় রিসোর্স ফাইলগুলির নামকরণের সম্মেলনের সাথে যুক্ত নয় যা মূল পোস্টারটি জিজ্ঞাসা করছে।
রিচিএইচ এইচ

4
হ্যাঁ, এগুলি উটের ক্ষেত্রে তৈরি হয়েছিল। তবে এই আইডিগুলি নিজেই অ্যান্ড্রয়েড এপিআই থেকে আসে তাই যদি এপিআইটির নির্মাতা উটের কেস ব্যবহার করেন তবে আমার ধারণা এটি তাঁর সম্মেলনটি অনুসরণ করা একটি ভাল পদ্ধতি is
কিরিল আলেকসান্দ্রভ

8
সেখানে widget_frameক্ষেত্র [ developer.android.com/reference/android/R.id.html#widget_frame] এছাড়াও android.R.id.*ক্ষেত্র। এই ক্ষেত্রে গুগল উটের ক্ষেত্রে আন্ডারস্কোর ব্যবহার করে না তাই আইডি কনভেনশনের জন্য উট-কেস কনভেনশন সম্পর্কে আপনার সিদ্ধান্ত সঠিক হতে পারে
আহমদ হামি

4

আমি মনে করি যদি আমরা আন্ডারস্কোর সহ সমস্ত ছোট অক্ষর ব্যবহার করি তবে এটি ভাল।

শুধু এটি দেখুন (ড্যানিয়েল উত্তর দিয়েছিল কি যোগ করা)

  // Camel Case
    TextView tvUserName = (TextView) findViewById(R.id.tvUserName);
    // Small Caps and Underscores
    TextView tvUserName = (TextView) findViewById(R.id.tv_user_name);

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


এটি অত্যন্ত বিষয়ভিত্তিক এবং আপনি যেমন স্ট্রিং আইডি করতে পারেন তেমনি নাম রিসোর্স ফাইল কেন ক্যান, তা প্রশ্নটির উত্তর দেয় না।
রিচিএইচএইচ

3

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


3

আপনি যদি কিছু গুগল অ্যাপসের নমুনার দিকে নজর দেন যেমন:

https://github.com/google/iosched

তারা আন্ডারস্কোর ব্যবহার করে। সুতরাং .... সম্ভবত আমাদের এটি করা উচিত কিভাবে?


3
android:id="@+id/frag_account_button"
frag_account_button = ((ListView)view.findViewById(R.id.frag_account_button));

android:id="@+id/fragAccountButton"
fragAccountButton = ((ListView)view.findViewById(R.id.fragAccountButton));

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

  1. এক্সএমএল এবং জাভা উভয় দিকই প্রজেক্টটি অনুসন্ধান করে চলকটিতে পৌঁছানো সহজ।

  2. বাটারকনিফ গ্রন্থাগার সংজ্ঞা

    @BindView (R.id.infoTextView) টেক্সটভিউফন্ট তথ্যপ্রবন্ধ;

এইভাবে রাখা আরও উপযুক্ত।


4
কোটলিনের ভিউ বাঁধাই বাটারকনিফের মতোই ফিরে আসে, তাই আমি সাপ_কে পুরোপুরি বাদ দিচ্ছি।
রিক মার্টিনস

1

এক্সএমএল ফাইলের নাম (যা অঙ্কনযোগ্য ফোল্ডারে ব্যবহৃত হয়) অবশ্যই নিম্নতর অক্ষর দ্বারা পৃথক হওয়া সমস্ত ছোট কেস হতে হবে _ যেহেতু মূলধনী ফাইলের নাম এক্সএমএল সমর্থন করে না।


4
এটি ফাইলের নামগুলির বিষয়ে নয় এবং এছাড়াও, কিছু লোক উট কেস করার সময় প্রথম অক্ষরটিকে মূলধন করতে পছন্দ করেন না।
জেস্পার

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

(বিটিডব্লিউ এটি ফাইলের নাম বনাম রিসোর্স আইডি সম্পর্কে:
ওপিতে পুনরায় পরীক্ষা করুন

0

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

শস্যের বিরুদ্ধে যাওয়া কেবল অহেতুক বিভ্রান্তি সৃষ্টি করবে। যেখানে সম্ভব সেখানে জিনিসগুলিকে সামঞ্জস্য রাখুন।


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