নামকরণের সম্মেলন: চূড়ান্ত ক্ষেত্র (স্থির নয়)


23

finalজাভা ক্লাসে ক্ষেত্রের নামকরণের বিষয়ে আজ আমি সহকর্মীর সাথে আলোচনা করেছি ।

তার মতামত finalক্ষেত্রগুলিকেও ধ্রুবক হিসাবে বিবেচনা করা উচিত কারণ উদাহরণটি তৈরির পরে তাদের মান পরিবর্তন হবে না।

এটি finalক্ষেত্রগুলির জন্য নিম্নলিখিত নামকরণের সম্মেলনে নেতৃত্ব দেবে :

public class Foo {
    private static final String BLA_BLA = "bla";

    private final String BAR_BATZ;

    ...
}

আমার মতে শুধুমাত্র static finalক্ষেত্রগুলিকে ধ্রুবক হিসাবে বিবেচনা করা উচিত যখন ক্ষেত্রগুলি কেবলমাত্র finalউট কেস নামকরণ কনভেনশন অনুসরণ করে।

public class Foo {
    private static final String BLA = "bla";

    private final String barBatz;

    ...
}

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

এটির কোনও ইনপুট?


আপনার উদাহরণগুলি ধ্রুবক নয়; সংকলনের সময় আপনি তাদের কাছে কোনও মান বরাদ্দ করেননি। কিন্তু, তারা ধ্রুবকগুলির জন্য নামকরণের সম্মেলনগুলি অনুসরণ করে না।
রবার্ট হার্ভে

@ রবার্ট হার্ভে ধন্যবাদ, আপনি ঠিক বলেছেন। ...কোন সম্ভাব্য কন্সট্রাকটর যা সেট করে প্রতীকায়িত অভিপ্রেত ছিল finalক্ষেত্র, কিন্তু যে স্পষ্টত জন্য সম্ভব নয় static finalক্ষেত্র।
সাসচা ওল্ফ

1
@ জাইকার আপনার static { }ব্লকগুলির প্রতি আগ্রহী হতে পারে যা ক্লাসটি লোড হওয়ার পরে কোনও শ্রেণীর মধ্যে স্থির ক্ষেত্রগুলি সেট করতে ব্যবহার করা যেতে পারে। জাভাতে স্থির নির্মাতার সাথে সম্পর্কিত সম্পর্কিত ।

@ রবার্ট হার্ভে আমি তাদের সাথে পরিচিত। তবে ধন্যবাদ।
স্যাশা ওল্ফ

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

উত্তর:


20

সান (এবং এখন ওরাকল) জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজের জন্য কোড কনভেনশনগুলির শিরোনামের একটি নথি রেখেছিলেন । এটির সর্বশেষ আপডেটটি ছিল'৯৯ সালে, তবে স্টাইল গাইড লাইনের সারমর্মটি চলমান।

অধ্যায় 9 নামকরণ কনভেনশন অন্তর্ভুক্ত।

ধ্রুবকগুলির একটি সনাক্তকারী ধরণের জন্য:

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

দেওয়া উদাহরণ:

static final int MIN_WIDTH = 4;

static final int MAX_WIDTH = 999;

static final int GET_THE_CPU = 1;

আরও সাম্প্রতিক নথিতে - এটি সেখানে পিছলে গেছে। ভেরিয়েবলগুলি থেকে (জাভা টিউটোরিয়ালস> জাভা ভাষা শিখতে> ভাষার মূল বিষয়গুলি :

আপনি যে নামটি চয়ন করেছেন তাতে যদি কেবল একটি শব্দ থাকে তবে সমস্ত ছোট হাতের অক্ষরে সেই শব্দটি বানান। যদি এটি একাধিক শব্দের সমন্বিত হয়, তবে প্রতিটি পরবর্তী শব্দের প্রথম অক্ষরকে মূলধন করুন। নাম gearRatioএবং currentGearএই সম্মেলনের প্রধান উদাহরণ। যদি আপনার ভেরিয়েবল একটি ধ্রুবক মান সঞ্চয় করে, যেমন static final int NUM_GEARS = 6, কনভেনশনটি সামান্য পরিবর্তিত হয়, প্রতিটি অক্ষরকে মূলধন করে এবং পরবর্তী শব্দগুলিকে আন্ডারস্কোর চরিত্রের সাথে পৃথক করে। কনভেনশন অনুসারে, আন্ডারস্কোর চরিত্রটি অন্য কোথাও ব্যবহৃত হয় না।

জাভা জন্য অনেক স্থিতিশীল বিশ্লেষক এটি প্রয়োগ করার চেষ্টা করে। উদাহরণস্বরূপ চেকস্টাইল প্রয়োগ করে:

স্থির নামগুলি ফর্ম্যাট বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা বিন্যাসের সাথে মিলে যায় তা পরীক্ষা করে। একটি ধ্রুবক হ'ল স্থিতিশীল এবং চূড়ান্ত ক্ষেত্র বা একটি ইন্টারফেস / টীকা ক্ষেত্র, ব্যতীত serialVersionUIDএবং serialPersistentFields। ফর্ম্যাটটি একটি নিয়মিত প্রকাশ এবং এর ডিফল্ট ^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$


কোডটি লেখার ... এবং আদর্শভাবে এটি একই রাখার জন্য সম্প্রদায়ের সম্মেলনে এটি সত্যিই উত্সাহিত ।

উপরের উদাহরণগুলি static finalসি-কনভেনশন থেকে প্রাপ্ত হিসাবে সম্ভবত দেওয়া হয়েছে #define- যা সি এর মতো, রানটাইম পরিবর্তে সংকলনের সময় কোডে প্রতিস্থাপন করা হয়।

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

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



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

এই বিস্তারিত উত্তরের জন্য ধন্যবাদ। অবজেক্টের সিরিয়ালাইজেশন সম্পর্কে লিটমাস পরীক্ষাটি আমার জন্য চুক্তি করে।
স্যাশা ওল্ফ

একজন সহকর্মী সম্প্রতি এই বৈধ বক্তব্যটি বলেছিলেন যে এককালে, সম্পাদকরা স্ট্যাটিক / স্ট্যাটিক ফাইনাল ইত্যাদি হাইলাইট করতে খুব ভাল ছিলেন না, তাই এই নামকরণের সম্মেলনটি গুরুত্বপূর্ণ ছিল। আজকাল IDEs তাই আমরা হয়তো তাদের জন্য নাম খুঁজছেন সুন্দর করতে পারেন, যেমন প্রশংসনীয় ভাল হয়: MinWidthপরিবর্তে MIN_WIDTH। আর একটি প্রশ্ন হ'ল স্ট্যাটিক ফাইনাল লগার সম্পর্কে কী? আপনি কি তাদের LOG/ LOGGERঅথবা log/ কল করেন logger? ব্যক্তিগতভাবে, logকোডের সাথে আরও ভাল ইনলাইন দেখায়, তবে অসম্পূর্ণতা কখন গ্রহণযোগ্য, যদি তা আদৌ হয়?
ndtreviv

5

BAR_BATZএই উদাহরণে একটি ধ্রুবক নয়। এর Fooনির্মাতারা এটি বস্তুর স্তরে বিভিন্ন মানকে সেট করতে পারেন। উদাহরণ স্বরূপ

public class Foo {
    private final String BAR_BATZ;

    Foo() {
       BAR_BATZ = "ascending";
    } 

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