সাফ কোড - আমার কি আক্ষরিক 1 একটি ধ্রুবক পরিবর্তন করা উচিত?


14

যাদু সংখ্যাগুলি এড়াতে, আমরা প্রায়শই শুনতে পাই যে আমাদের আক্ষরিক অর্থপূর্ণ নাম দেওয়া উচিত। যেমন:

//THIS CODE COMES FROM THE CLEAN CODE BOOK
for (int j = 0; j < 34; j++) {
    s += (t[j] * 4) / 5;
}

-------------------- Change to --------------------

int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for (int j = 0; j < NUMBER_OF_TASKS; j++) {
    int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
    int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK);
    sum += realTaskWeeks;
}

আমার কাছে এর মতো ডামি পদ্ধতি রয়েছে:

ব্যাখ্যা করুন: আমি অনুমান করি যে আমার কাছে পরিষেবা দেওয়ার জন্য তালিকাভুক্ত লোক রয়েছে এবং ডিফল্টরূপে, আমরা কেবল খাদ্য কিনতে $ 5 ব্যয় করি তবে যখন আমাদের একাধিক ব্যক্তি রয়েছে, আমাদের জল এবং খাবার কিনতে হবে, আমাদের অবশ্যই আরও অর্থ ব্যয় করতে হবে, সম্ভবত $ 6। আমি আমার কোডটি পরিবর্তন করব, দয়া করে আক্ষরিক 1 এর উপরে আমার প্রশ্নটি ফোকাস করুন

public int getMoneyByPersons(){
    if(persons.size() == 1){ 
        // TODO - return money for one person
    } else {
        // TODO - calculate and return money for people.
    }

}

আমি যখন আমার বন্ধুদের আমার কোডটি পর্যালোচনা করতে বলি, একজন বলেছিল যে 1 মানটির একটি নাম দেওয়ার ফলে ক্লিনার কোড আসবে, এবং অন্যটি বলেছিল যে আমাদের এখানে একটি স্থির নাম প্রয়োজন নেই কারণ মানটি নিজেই অর্থবহ হয়।

সুতরাং, আমার প্রশ্নটি হ'ল আমি কি আক্ষরিক মান 1 এর জন্য একটি নাম দেব? যখন একটি ম্যাজিক নম্বর একটি মান হয় এবং কখন হয় না? আমি কীভাবে সেরা সমাধানটি বেছে নিতে প্রসঙ্গটি আলাদা করতে পারি?


কোথা personsথেকে আসে এবং এটি কী বর্ণনা করে? আপনার কোডটিতে কোনও মন্তব্য নেই তাই এটি কী করছে তা অনুমান করা শক্ত।
হুবার্ট গ্রেজস্কোইয়াক

7
এটি 1 এর চেয়ে বেশি পরিষ্কার হয় না I যদিও আমি "আকার" পরিবর্তন করে "কাউন্ট" করব। এবং মানি সার্ভিসেসটি যেমন নির্বোধ, ব্যক্তি সংগ্রহের উপর নির্ভর করে কত টাকা ফেরত দিতে হবে তা সিদ্ধান্ত নিতে সক্ষম হওয়া উচিত। সুতরাং আমি ব্যক্তিগুলিকে মনি পাওয়ার জন্য পাস করব এবং এটি কোনও ব্যতিক্রমী কেস বাছাই করুক।
মার্টিন মাট

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


2
সম্ভবত এই যুক্তি মানি সার্ভিস.জেটমনি () এ আরও ভাল উপযোগী হতে পারে? 1 জন ব্যক্তির ক্ষেত্রে আপনি কখনই getMoney কল করতে চান? তবে আমি সাধারণ অনুভূতির সাথে একমত হই যে 1 স্পষ্ট is ম্যাজিক নম্বরগুলি এমন একটি নম্বর যেখানে আপনাকে প্রোগ্রামটি কীভাবে সেই নম্বরটিতে উপস্থিত হয়েছিল জিজ্ঞাসা করে আপনার মাথা if(getErrorCode().equals(4095)) ...
নীল

উত্তর:


23

না। উদাহরণে 1 টি পুরোপুরি অর্থবহ।

যাইহোক, ব্যক্তি.সাইজ () যদি শূন্য হয় তবে কী হবে? অদ্ভুত বলে মনে হচ্ছে যা persons.getMoney()0 এবং 2 এর জন্য কাজ করে তবে 1 এর জন্য নয়।


আমি সম্মত হই যে 1 অর্থবহ। ধন্যবাদ, যাইহোক, আমি আমার প্রশ্ন আপডেট করেছি। আপনি আমার ধারণা পেতে এটি আবার দেখতে পারেন।
জ্যাক 7

3
আমি বহু বছর ধরে একাধিকবার শুনেছি এমন একটি বাক্য হ'ল যাদুসংখ্যার সংখ্যা 0 এবং 1 ব্যতীত অন্য কোনও নামহীন ধ্রুবক While সময়।
বাল্ড্রিক

@ বালড্রিক্ক কখনও কখনও, অন্যান্য সংখ্যাসূচক অক্ষরগুলি কোনও নামের পেছনে লুকানো উচিত নয়।
Deduplicator

@ অনুচ্ছেদে কোন উদাহরণ মাথায় আসে?
বাল্ড্রিক

@ বালড্রিক এলোমেলো দেখুন
Deduplicator

18

কোডের একটি অংশে কেন সেই নির্দিষ্ট আক্ষরিক মান থাকে?

  • এই মানটির কি সমস্যা ডোমেনে কোনও বিশেষ অর্থ আছে ?
  • অথবা এই মানটি কি কেবল একটি বাস্তবায়ন বিশদ , যেখানে সেই মানটি পার্শ্ববর্তী কোডের প্রত্যক্ষ পরিণতি হয়?

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

  • আপনার প্রথম উদাহরণে, যেমন লিটারেল অর্থ 34, 4, 5না প্রসঙ্গ থেকে স্পষ্ট দেখা যায়। পরিবর্তে, এই সমস্যাগুলির কিছুটির আপনার সমস্যার ডোমেনে একটি বিশেষ অর্থ রয়েছে। তাদের নাম দেওয়া ভাল ছিল।

  • আপনার দ্বিতীয় উদাহরণে, আক্ষরিক অর্থ 1প্রসঙ্গ থেকে খুব স্পষ্ট। একটি নাম পরিচয় করানো সহায়ক নয়।

প্রকৃতপক্ষে, প্রকৃত মানগুলির জন্য নাম প্রবর্তন করাও খারাপ হতে পারে কারণ এটি আসল মানটিকে আড়াল করে।

  • যদি নামটির মানটি পরিবর্তন করা হয় বা ভুল হয় তবে বিশেষত যদি একই ভেরিয়েবল কোডের সাথে সম্পর্কিত নয় এমন টুকরাগুলিতে পুনরায় ব্যবহার করা হয় তবে এটি বাগগুলিকে অস্পষ্ট করতে পারে।

  • কোডের একটি অংশটি একটি নির্দিষ্ট মানের জন্যও সূক্ষ্মভাবে কাজ করতে পারে তবে সাধারণ ক্ষেত্রে এটি ভুল হতে পারে। অপ্রয়োজনীয় বিমূর্ততা প্রবর্তনের মাধ্যমে কোডটি আর স্পষ্টতই সঠিক নয়।

"সুস্পষ্ট" আক্ষরিক উপর কোনও আকারের সীমা নেই কারণ এটি সম্পূর্ণ প্রসঙ্গে নির্ভর করে। উদাহরণস্বরূপ আক্ষরিক 1024ফাইল আকারের গণনা, বা 31একটি হ্যাশ ফাংশন padding: 0.5emপ্রসঙ্গে আক্ষরিক, বা সিএসএস স্টাইলশিটের প্রসঙ্গে আক্ষরিকভাবে সম্পূর্ণ স্পষ্ট হতে পারে ।


8

এই কোডের টুকরোটিতে বেশ কয়েকটি সমস্যা রয়েছে, যা এই উপায়ে ছোট করা যেতে পারে:

public List<Money> getMoneyByPersons() {
    return persons.size() == 1 ?
        moneyService.getMoneyIfHasOnePerson() :
        moneyService.getMoney(); 
}
  1. কেন একজন ব্যক্তি বিশেষ মামলা তা স্পষ্ট নয়। আমি মনে করি যে এখানে একটি নির্দিষ্ট ব্যবসায়ের নিয়ম রয়েছে যা বলে যে একজন ব্যক্তির কাছ থেকে অর্থ প্রাপ্তি বেশ কয়েকটি ব্যক্তির কাছ থেকে অর্থ প্রাপ্তি থেকে সম্পূর্ণ আলাদা। যাইহোক, আমি গিয়ে ভেতরে সন্ধান আছে getMoneyIfHasOnePersonএবং getMoneyবুঝতে কেন স্বতন্ত্র মামলা হয় প্রত্যাশী।

  2. নামটি getMoneyIfHasOnePersonঠিক দেখাচ্ছে না। নাম থেকে, আমি পদ্ধতিটি একজন ব্যক্তি আছে কিনা তা যাচাই করার আশা করব এবং যদি এটি হয় তবে তার কাছ থেকে অর্থ গ্রহণ করুন; অন্যথায়, কিছুই করবেন না। আপনার কোড থেকে, এটি যা ঘটছে তা নয় (বা আপনি শর্তটি দু'বার করছেন)।

  3. List<Money>সংগ্রহের পরিবর্তে ফেরার কোনও কারণ আছে কি ?

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

আমি কীভাবে সেরা সমাধানটি বেছে নিতে প্রসঙ্গটি আলাদা করতে পারি?

আপনার কোডটি আরও স্পষ্ট করে তোলে তা আপনি করেন।

উদাহরণ 1

নিম্নলিখিত কোডের টুকরোটি কল্পনা করুন:

if (sequence.size() == 0) {
    return null;
}

return this.processSequence(sequence);

এখানে কি শূন্য একটি যাদু মান? কোডটি বরং স্পষ্ট: যদি অনুক্রমের কোনও উপাদান না থাকে তবে আসুন এটি প্রক্রিয়া না করে একটি বিশেষ মান ফেরত দিন। তবে এই কোডটি এর মতো আবারও লেখা যায়:

if (sequence.isEmpty()) {
    return null;
}

return this.processSequence(sequence);

এখানে, আর ধ্রুবক নেই এবং কোডটি আরও পরিষ্কার।

উদাহরণ 2

কোডের অন্য অংশটি নিন:

const result = Math.round(input * 1000) / 1000;

জাভাস্ক্রিপ্ট যেমন round(value, precision)ওভারলোড নেই এমন ভাষাগুলিতে এটি কী করে তা বুঝতে খুব বেশি সময় লাগে না ।

এখন, আপনি যদি একটি ধ্রুবক পরিচয় করিয়ে দিতে চান, তবে এটি কীভাবে বলা হবে? আপনি পেতে পারেন নিকটতম শব্দটি Precision। তাই:

const precision = 1000;
const result = Math.round(input * precision) / precision;

এটি পাঠযোগ্যতার উন্নতি করে? এটা হতে পারে. এখানে, একটি ধ্রুবকের মান বরং সীমাবদ্ধ এবং আপনি নিজেকে জিজ্ঞাসা করতে পারেন যদি আপনার সত্যিকারের রিফ্যাক্টরিং সঞ্চালনের প্রয়োজন হয় কিনা। এখানে সুন্দর জিনিসটি হ'ল এখন, নির্ভুলতা কেবল একবার ঘোষণা করা হয়েছে, সুতরাং যদি এটি পরিবর্তন হয় তবে আপনি কোনও ভুল করার ঝুঁকি রাখবেন না যেমন:

const result = Math.round(input * 100) / 1000;

এক জায়গায় মান পরিবর্তন করা, এবং অন্যটিতে এটি করতে ভুলে যাওয়া।

উদাহরণ 3

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

নিম্নলিখিত কোডের টুকরা নিন:

class Point
{
    ...
    public void Reset()
    {
        x, y = (0, 0);
    }
}

আপনি যদি কোনও ভেরিয়েবল দ্বারা শূন্যগুলি প্রতিস্থাপনের চেষ্টা করেন, তবে অর্থবোধক নামটি খুঁজে পেতে অসুবিধা হবে। কীভাবে নাম রাখবেন? ZeroPosition? Base? Default? এখানে একটি ধ্রুবকের পরিচয় দেওয়া কোনওভাবেই কোডটিকে বাড়িয়ে তুলবে না। এটি এটি কিছুটা দীর্ঘ করে দেবে, এবং কেবল এটি।

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


আমি 3 এ যোগ করব: ভেরিয়েবল নাম, অর্থ, ভারসাম্য বা এই জাতীয় মত অর্থ শব্দটি ব্যবহার করবেন না। অর্থ সংগ্রহের অর্থ হয় না, পরিমাণ বা ব্যালেন্সের সংগ্রহ করে। (ঠিক আছে আমার কাছে বিদেশী অর্থের একটি ছোট সংগ্রহ রয়েছে (বা বরং কয়েন) তবে এটি একটি নন-প্রোগ্রামিং বিষয়)।
বেন্ট করুন

3

আপনি এমন একটি ফাংশন তৈরি করতে পারেন যা একটি একক প্যারামিটার নেয় এবং চারটি পাঁচটি দ্বারা ভাগ করে ফেরত দেয় যা প্রথম উদাহরণটি ব্যবহার করার পরেও কী করে তার মধ্যে একটি ক্লিন ওরফে দেয়।

আমি কেবল আমার নিজস্ব কৌশলটি দিচ্ছি তবে আমিও কিছু শিখতে পারি।

আমি যা ভাবছি তা হ'ল।

// Just an example name  
function normalize_task_value(task) {  
    return (task * 4) / 5;  // or to `return (task * 4) / NUMBER_OF_TASKS` but it really matters what logic you want to convey and there are reasons to many ways to make this logical. A comment would be the greatest improvement

}  

// Is it possible to just use tasks.length or something like that?  
// this NUMBER_OF_TASKS is the only one thats actually tricky to   
// understand right now how it plays its role.  

function normalize_all_task_values(tasks, accumulator) {  
    for (int i = 0; i < NUMBER_OF_TASKS; i++) {  
        accumulator += normalize_task_value(tasks[i]);
    }
}  

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


5
তবে 4 এবং 5 এর মানগুলি কী বোঝায়? যদি তাদের কোনওটির যদি কখনও পরিবর্তনের প্রয়োজন হয়, আপনি কি সেই সমস্ত জায়গাগুলি সন্ধান করতে পারবেন যেখানে নম্বরটি একই প্রসঙ্গে ব্যবহৃত হয়েছে এবং সেই জায়গাগুলি সেই অনুযায়ী আপডেট করতে পারবেন? এটিই মূল প্রশ্নটির প্রশ্ন।
বার্ট ভ্যান ইনজেন শেেনা

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

পুনঃটুইট করুন আমি আরও ভাল ফাংশনটির নাম, ফাংশনটি কী ফিরিয়ে আনবে তা নিয়ে একটি মন্তব্য এবং * 4/5 কেন এটি অর্জন করেছে তার একটি মন্তব্য পছন্দ করব। অবিচ্ছিন্ন নামের সত্যই প্রয়োজন হয় না।
gnasher729

@ gnasher729: যদি কোনও নামযুক্ত, ভাল ডকুমেন্টেড ফাংশনের উত্স কোডে ধ্রুবকগুলি ঠিক একবার উপস্থিত হয়, তবে এটির নাম ধ্রুবক ব্যবহার করার প্রয়োজন হবে না। যত তাড়াতাড়ি ধ্রুবক একই অর্থ সহ একাধিকবার উপস্থিত হয়, সেই ধ্রুবকটিকে একটি নাম প্রদান নিশ্চিত করে যে আপনাকে আক্ষরিক 42 এর সমস্ত উদাহরণ একই জিনিসটি বোঝায় বা না তা নিশ্চিত করতে হবে না।
বার্ট ভ্যান ইনজেন শেেনা

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

2

এই নম্বর 1, এটি একটি পৃথক নম্বর হতে পারে? এটি 2, বা 3 হতে পারে, বা যুক্তিযুক্ত কারণগুলি কেন এটি 1 হতে হবে? এটি যদি অবশ্যই 1 হয় তবে 1 ব্যবহার করা ভাল। অন্যথায়, আপনি একটি ধ্রুবক সংজ্ঞায়িত করতে পারেন। এই ধ্রুবকটিকে কল করবেন না। (আমি দেখেছি)।

এক মিনিটে 60 সেকেন্ড - আপনার কি ধ্রুবক দরকার? ওয়েল, এটা হয় 60 সেকেন্ড না 50 বা 70. এবং সবাই এটা জানে। যাতে একটি সংখ্যা থাকতে পারে।

প্রতি পৃষ্ঠায় 60 টি আইটেম মুদ্রিত হয়েছে - সেই সংখ্যাটি সহজেই 59 বা 55 বা 70 হতে পারে Act আসলে, আপনি যদি ফন্টের আকার পরিবর্তন করেন তবে এটি 55 বা 70 হয়ে যেতে পারে So সুতরাং এখানে অর্থবহ ধ্রুবকটির জন্য আরও বলা হয়।

অর্থটি কতটা পরিষ্কার তা এটিও একটি বিষয়। আপনি যদি "মিনিট = সেকেন্ড / 60" লিখেন তবে তা পরিষ্কার। আপনি যদি "x = y / 60" লিখেন তবে তা পরিষ্কার নয়। কোথাও কিছু অর্থপূর্ণ নাম থাকতে হবে ।

একটি নিখুঁত নিয়ম আছে: কোন নিরঙ্কুশ নিয়ম আছে। অনুশীলনের সাহায্যে আপনি বের করতে পারবেন কখন নম্বরগুলি ব্যবহার করতে হবে, এবং কখন নামযুক্ত ধ্রুবক ব্যবহার করতে হবে। এটি করবেন না কারণ কোনও বই এমনটি বলেছে - যতক্ষণ না বুঝতে পারে এটি কেন এটি বলে।


"এক মিনিটের মধ্যে seconds০ সেকেন্ড ... এবং সকলেই এটি জানেন। যাতে এটি একটি সংখ্যক স্থানে থাকতে পারে।" - আমার কাছে বৈধ যুক্তি নয়। আমার কোডে আমার যেখানে 200 "60" ব্যবহার করা হয় সেখানে কী হবে? এটি যে জায়গাগুলিতে সেকেন্ড হিসাবে মিনিট হিসাবে ব্যবহার করা হয় সেগুলি কীভাবে খুঁজে পাব? অন্যান্য সম্ভবত এটির সমান "প্রাকৃতিক" ব্যবহার? - বাস্তবে, তবে আমিও অতিরিক্ত সাহাবীদের কথা না বলেই প্রয়োজন পড়ার minutes*60পরেও hours*3600আমি এটি ব্যবহার করার সাহস করি। কয়েক দিন ধরে আমি সম্ভবত লিখতে পারি d*24*3600বা d*24*60*60কারণ 86400এটি এমন প্রান্তের কাছে যেখানে কোনও এক নজরে সেই যাদু নম্বরটি চিনতে পারে না।
জিমিবি

@ জিমিবি আপনি যদি আপনার কোডে 200 টি জায়গায় "60" ব্যবহার করছেন তবে খুব সম্ভবত এই সমাধানটি একটি ধ্রুবককে পরিচয় করিয়ে দেওয়ার পরিবর্তে কোনও ফাংশন রিফ্যাক্টর করছে।
Klutt

0

আমি ডিবি পুনরুদ্ধারগুলিতে (সংশোধিত) ওপি এর মতো মোটামুটি কোড দেখেছি। ক্যোয়ারী একটি তালিকা ফেরত দেয় তবে ব্যবসায়ের নিয়ম বলে যে এখানে কেবল একটি উপাদান থাকতে পারে। এবং তারপরে অবশ্যই 'একমাত্র এই এক মামলার' জন্য একাধিক আইটেমের সাথে তালিকায় কিছু পরিবর্তন হয়েছে। (হ্যাঁ, আমি বেশিরভাগ সময় বলেছি It's এটি প্রায় তাদের মতো ... এনএম)

সুতরাং তারপরে একটি ধ্রুবক তৈরি করার পরিবর্তে, আমি (ক্লিন কোড পদ্ধতিতে) একটি নাম দেওয়ার জন্য একটি পদ্ধতি তৈরি করব বা শর্তসাপেক্ষে শনাক্তকরণ কী তা নির্ধারণ করার উদ্দেশ্যে কী তা স্পষ্ট করব (এবং এটি কীভাবে এটি সনাক্ত করে তা encapsulate):

public int getMoneyByPersons(){
  if(isSingleDepartmentHead()){ 
    // TODO - return money for one person
  } else {
    // TODO - calculate and return money for people.
  }
}

public boolean isSingleDepartmentHead() {
   return persons.size() == 1;
}

হ্যান্ডলিং একত্রিত করার চেয়ে ভাল। এন উপাদানগুলির একটি তালিকা এন যাই হোক না কেন সমানভাবে চিকিত্সা করা যেতে পারে।
Deduplicator

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