আমার বস আমাকে ছোট ফাংশনগুলি লেখা বন্ধ করতে এবং একই লুপে সমস্ত কিছু করতে বলে


209

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

তার যুক্তি ছিল

  • ছোট ফাংশনগুলি লেখা একটি ব্যথা কারণ এটি কোডটি কী করছে তা দেখার জন্য আপনাকে প্রতিটি ছোট ফাংশনে যেতে বাধ্য করে।
  • মূল লুপটি 300 লাইন বেশি হলেও, এটি পড়তে আরও দ্রুত একটি প্রধান বড় লুপে সবকিছু রাখুন।
  • আপনার যদি কোডটির সদৃশ করতে হয় তবে কেবল ছোট ফাংশন লিখুন।
  • মন্তব্যের নাম সহ কোনও ফাংশন লিখবেন না, উপরে একটি মন্তব্য সহ আপনার জটিল রেখার কোড (3-4 রেখা) রাখুন; একইভাবে আপনি ব্যর্থ কোডটি সরাসরি সংশোধন করতে পারেন

এটি আমি যা পড়েছি তার বিপরীতে। আপনি সাধারণত কোডটি কীভাবে লিখবেন? একটি প্রধান বড় লুপ, কোন ছোট ফাংশন?

আমি যে ভাষাটি ব্যবহার করি তা মূলত জাভাস্ক্রিপ্ট। আমার এখনই পড়তে সত্যিই অসুবিধা হচ্ছে যেহেতু আমি আমার সমস্ত ছোট পরিষ্কারভাবে নামকরণ করা ফাংশন মুছে ফেলেছি এবং সবকিছুকে একটি বড় লুপে রেখেছি। তবে আমার বস এটি পছন্দ করেন this

একটি উদাহরণ ছিল:

// The way I would write it
if (isApplicationInProduction(headers)) {
  phoneNumber = headers.resourceId;
} else {
  phoneNumber = DEV_PHONE_NUMBER;
}

function isApplicationInProduction(headers) {
   return _.has(headers, 'resourceId');
}

// The way he would write it
// Take the right resourceId if application is in production
phoneNumber = headers.resourceId ? headers.resourceId : DEV_PHONE_NUMBER;

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

ঠিক আছে, আমি কিছু পরামর্শ চাই, কোন কোড / অনুশীলন পরিষ্কার কোড লিখতে ভাল?



4
ফোননম্বার = হেডার্স.সোর্সআইডি?: DEV_PHONE_NUMBER;
জোশুয়া

10
যাচাই করুন, আপনি যে জায়গায় কাজ করতে চান, যেখানে পরিচালনা আপনাকে কীভাবে সমাধান করতে হবে তার পরিবর্তে আপনার কাজটি কীভাবে করতে বলেছিল।
কনস্ট্যান্টিন পেটরুখনভ

8
@ আরজমুনরো আপনি যদি আপনার কাজটি সত্যিই পছন্দ না করেন তবে মনে রাখবেন চাকরীর চেয়ে কম বিকাশকারী রয়েছে। সুতরাং মার্টিন ফাউলারের উদ্ধৃতি দিতে: "আপনি যদি নিজের সংগঠনটি পরিবর্তন করতে না পারেন তবে আপনার সংস্থাটি পরিবর্তন করুন!" এবং বোস আমাকে কোড কীভাবে বলছেন তা হ'ল এমন একটি পরামর্শ যা আমি আপনাকে পরিবর্তন করতে চাই।
নিলস ভ্যান রেইমার্সডাল

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

উত্তর:


215

প্রথমে কোডের উদাহরণ নেওয়া। আপনার পক্ষে:

if (isApplicationInProduction(headers)) {
  phoneNumber = headers.resourceId;
} else {
  phoneNumber = DEV_PHONE_NUMBER;
}

function isApplicationInProduction(headers) {
   return _.has(headers, 'resourceId');
}

এবং আপনার বস এটি লিখতে হবে:

// Take the right resourceId if application is in production
phoneNumber = headers.resourceId ? headers.resourceId : DEV_PHONE_NUMBER;

আমার দৃষ্টিতে, উভয়েরই সমস্যা আছে। আমি আপনার কোডটি পড়ার সাথে সাথে আমার তাত্ক্ষণিক চিন্তা ছিল "আপনি এটি ifএকটি বার্ষিক ভাবের সাথে প্রতিস্থাপন করতে পারেন "। তারপরে আমি আপনার বসের কোডটি পড়েছিলাম এবং ভেবেছিলাম "তিনি কেন একটি মন্তব্য দিয়ে আপনার ফাংশনটি প্রতিস্থাপন করলেন?"

আমি পরামর্শ দিচ্ছি যে সর্বোত্তম কোড দুটির মধ্যে রয়েছে:

phoneNumber = isApplicationInProduction(headers) ? headers.resourceId : DEV_PHONE_NUMBER;

function isApplicationInProduction(headers) {
   return _.has(headers, 'resourceId');
}

এটি আপনাকে উভয় বিশ্বের সেরা দেয়: একটি সরলীকৃত পরীক্ষার এক্সপ্রেশন এবং মন্তব্যটি পরীক্ষামূলক কোডের সাথে প্রতিস্থাপন করা হয়েছে।

কোড ডিজাইনে যদিও আপনার বসের দৃষ্টিভঙ্গি সম্পর্কিত:

ছোট ফাংশনগুলি লেখা একটি ব্যথা কারণ এটি কোডটি কী করছে তা দেখার জন্য আপনাকে প্রতিটি ছোট ফাংশনে যেতে বাধ্য করে।

যদি ফাংশনটি সুনামযুক্ত হয় তবে এটি কেস নয়। isApplicationInProductionএটি স্বতঃসিদ্ধ এবং কোডটি কী করে তা দেখার জন্য এটি পরীক্ষা করা প্রয়োজন হবে না। বাস্তবে বিপরীতটি সত্য: কোডটি পরীক্ষা করে ফাংশন নামটির চেয়ে অভিপ্রায়টি কম প্রকাশ পায় (যে কারণে আপনার বসকে মন্তব্যে অবলম্বন করতে হবে)।

মূল লুপটি 300 লাইন বেশি হলেও, এটি পড়তে তত দ্রুত হয় তবে একটি বড় বড় লুপে সবকিছু রাখুন

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

আপনার যদি কোডটির সদৃশ করতে হয় তবে কেবলমাত্র ছোট ফাংশন লিখুন

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

মন্তব্যের নাম সহ কোনও ফাংশন লিখবেন না, উপরে একটি মন্তব্য সহ আপনার জটিল রেখার কোড (3-4 রেখা) রাখুন। এটির মতো আপনি ব্যর্থ কোডটি সরাসরি সংশোধন করতে পারেন

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

স্ব-ডকুমেন্টিং কোড লেখা শক্ত এবং পরিপূরক ডক্স (এমনকি মন্তব্য আকারেও) কখনও কখনও প্রয়োজন হয়। তবে "আঙ্কেল বব" এর মতামত যে মন্তব্যগুলি কোডিং ব্যর্থতা তা প্রায়শই সত্য হয়ে থাকে।

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


26
ছোট ফোকনগুলি ইজিলি ইউনিট পরীক্ষিত
মগ

13
বলিলেন @ ExpertBeginner1 : "আমি সব আমাদের কোডে জায়গায় বেশি সামান্য পদ্ধতি টন এইজন্য ক্লান্ত, তাই এটি হলো পর থেকে সেখানে সব পদ্ধতি উপর একটি 15 এলওসি সর্বনিম্ন আছে।"
গ্রেগ বেকন

34
"মন্তব্যগুলির একটি মৌলিক ত্রুটি রয়েছে: সেগুলি সংকলিত / ব্যাখ্যা করা হয় না এবং তাই ইউনিট পরীক্ষা করা যায় না" শয়তানের উকিল এখানে বাজানো, আপনি যদি "ফাংশন নাম" দিয়ে "মন্তব্যগুলি" প্রতিস্থাপন করেন তবে এটিও সত্য।
ম্যাটেকাপু

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

4
@ ডেভিড আর্নো সমস্ত ফাংশনগুলির প্রাক-পোস্টকন্ডিশন রয়েছে, প্রশ্ন আপনি সেগুলি নথিভুক্ত করেছেন কিনা তা। যদি আমার ফাংশনটি কোনও পরামিতি নেয়, যা মাপা ফুটগুলির একটি দূরত্ব, আপনাকে অবশ্যই এটি কিলোমিটারে নয়, পায়ে সরবরাহ করতে হবে। এটি পূর্ব শর্ত।
জর্জেন ফোগ

223

অন্যান্য সমস্যা আছে

উভয়ই কোড ভাল নয়, কারণ উভয়ই একটি ডিবাগ পরীক্ষার ক্ষেত্রে কোডটি মূলত ফোটান । আপনি যদি কোনও কারণে আরও কিছু পরীক্ষা করতে চান তবে কী হবে?

phoneNumber = DEV_PHONE_NUMBER_WHICH_CAUSED_PROBLEMS_FOR_CUSTOMERS;

অথবা

phoneNumber = DEV_PHONE_NUMBER_FROM_OTHER_COUNTRY;

আপনি কি আরও শাখা যুক্ত করতে চান?

তাত্পর্যপূর্ণ সমস্যাটি হ'ল আপনি মূলত আপনার কোডটির কিছু অংশ নকল করেন এবং এইভাবে আপনি প্রকৃত কোডটি পরীক্ষা করছেন না। আপনি ডিবাগ কোডটি পরীক্ষা করতে ডিবাগ কোড লিখেন, তবে উত্পাদন কোড নয় code এটি আংশিকভাবে একটি সমান্তরাল কোডবেস তৈরির মতো।

আপনি আরও খারাপভাবে কীভাবে খারাপ কোড লিখবেন সে সম্পর্কে আপনার বসের সাথে তর্ক করছেন। পরিবর্তে, আপনার নিজের কোডটির সহজাত সমস্যাটি সমাধান করা উচিত।

ইনজেকশন নির্ভরতা

আপনার কোডটি এভাবে দেখতে হবে:

phoneNumber = headers.resourceId;

এখানে কোনও শাখা নেই, কারণ এখানে যুক্তির কোনও শাখা নেই। প্রোগ্রামটির শিরোনাম থেকে ফোন নম্বরটি টানতে হবে। সময়কাল।

আপনি যদি DEV_PHONE_NUMBER_FROM_OTHER_COUNTRYফলাফল হিসাবে পেতে চান তবে আপনার এটি করা উচিত headers.resourceId। এটি করার একটি উপায় হ'ল headersপরীক্ষার কেসগুলির জন্য কেবল কোনও ভিন্ন অবজেক্ট ইনজেকশন করা (দুঃখিত এটি যদি সঠিক কোড না হয় তবে আমার জাভাস্ক্রিপ্ট দক্ষতা কিছুটা মরিচা হয়ে উঠেছে):

function foo(headers){
    phoneNumber = headers.resourceId;
}

// Creating the test case
foo({resourceId: DEV_PHONE_NUMBER_FROM_OTHER_COUNTRY});

এটি headersএকটি সার্ভারের কাছ থেকে প্রাপ্ত প্রতিক্রিয়ার অংশ বলে ধরে নিচ্ছি : আদর্শভাবে আপনার কাছে একটি সম্পূর্ণ পরীক্ষা সার্ভার রয়েছে যা headersপরীক্ষার উদ্দেশ্যে বিভিন্ন ধরণের সরবরাহ করে। এইভাবে আপনি আসল উত্পাদন কোডটি যেমন আছেন তেমন পরীক্ষা করেন এবং কোনও অর্ধ নকল কোড নয় যা উত্পাদন কোডের মতো কাজ করতে পারে বা নাও করতে পারে।


11
আমি আমার নিজের উত্তরে এই বিষয়টিকে সম্বোধন করার বিষয়টি বিবেচনা করেছি, তবে অনুভব করেছি যে এটি ইতিমধ্যে যথেষ্ট দীর্ঘ ছিল। সুতরাং এটি করার জন্য আপনার কাছে +1 :)
ডেভিড আরনো

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

56
@ ডেভিড আরনো হয়ত আপনার উত্তরটি ছোট উত্তরগুলিতে ভাগ করে নেওয়া উচিত ছিল। ;)
ক্রিলগার

2
@ ব্যবহারকারী949300 কিছুটা দিকনির্দেশ ব্যবহার করা বা বুদ্ধিমানের কাজ হবে না;)
কৌতূহলীদনি


59

এর কোনও "সঠিক" বা "ভুল" উত্তর নেই। তবে আমি সফটওয়্যার সিস্টেম ডিজাইনিং এবং বিকাশকারী 36 বছরের পেশাদার অভিজ্ঞতার উপর ভিত্তি করে আমার মতামত উপস্থাপন করব ...

  1. "স্ব-ডকুমেন্টিং কোড" বলে কোনও জিনিস নেই। কেন? কারণ পুরোপুরি বিষয়গতভাবে সে দাবি।
  2. মন্তব্য কখনও ব্যর্থতা হয় না। কি হল একটি ব্যর্থতা কোড যে সব বোঝা যাবে না হয় ছাড়া মন্তব্য নেই।
  3. একটি কোড ব্লকে কোডের 300 টি নিরবচ্ছিন্ন লাইনগুলি রক্ষণাবেক্ষণের দুঃস্বপ্ন এবং ত্রুটির পক্ষে অত্যন্ত প্রবণ। এই জাতীয় ব্লক খারাপ নকশা এবং পরিকল্পনার দৃ strongly়ভাবে নির্দেশক।

আপনি যে উদাহরণটি দিয়েছেন isApplicationInProduction()তার সাথে সরাসরি কথা বলুন ... নিজের রুটিনে স্থাপন করা হ'ল স্মার্ট (এর) কাজ। আজ সেই পরীক্ষাটি কেবল "শিরোনাম" এর একটি চেক এবং একটি টার্নারি ( ?:) অপারেটরে পরিচালনা করা যায় । আগামীকাল, পরীক্ষা আরও জটিল হতে পারে। অতিরিক্তভাবে, "হেডার্স.সোর্সআইডি" এর "উত্পাদন স্থিতিতে" অ্যাপ্লিকেশনটির কোনও স্পষ্ট সম্পর্ক নেই; আমি যুক্তি দিয়ে বলব যে এই জাতীয় স্থিতির জন্য একটি পরীক্ষা অন্তর্নিহিত ডেটা থেকে decoupled করা প্রয়োজন ; একটি subroutine এটি করবে এবং একটি ternary না। অতিরিক্ত হিসাবে, একটি সহায়ক মন্তব্য কেন "রিসোর্সআইডি" "উত্পাদন" এর জন্য পরীক্ষা।

"ছোট পরিষ্কারভাবে নামকরণ করা ফাংশন" দিয়ে ওভারবোর্ডে না যেতে সতর্ক হন। একটি রুটিন "আইটেম কোড" এর চেয়ে আরও বেশি ধারণা ধারণ করতে পারে। আমি আমনের পরামর্শকে সমর্থন করি phoneNumber = getPhoneNumber(headers)এবং যুক্ত getPhoneNumber()করি যা এর সাথে "উত্পাদন অবস্থা" পরীক্ষা করা উচিতisApplicationInProduction()


25
ভালো মন্তব্যগুলির মতো জিনিস রয়েছে যা কোনও ব্যর্থতা নয়। তবে, মন্তব্যগুলি যা প্রায়শই ভারব্যাটিম কোড যা তারা অনুমিতভাবে ব্যাখ্যা করে বা কোনও পদ্ধতি / শ্রেণি / ইত্যাদির পূর্ববর্তী খালি মন্তব্য ব্লক are অবশ্যই একটি ব্যর্থতা।
jpmc26

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

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

7
@ টিমবো আপনার অর্থ, "... তাদের মধ্যে কমপক্ষে একটিরও ভুল রয়েছে" " ;)
jpmc26

5
@ মিম্বিস আপনি যদি মন্তব্য না করে কোডটি কী করে বুঝতে না পারেন তবে কোডটি সম্ভবত যথেষ্ট পরিমাণে পরিষ্কার নয়। মন্তব্যের মূল উদ্দেশ্যটি কোডটি কী করছে তা কেন করছে তা স্পষ্ট করে দেওয়া। এটি কোডার তার নকশাটি ভবিষ্যতের রক্ষণাবেক্ষণকারীদের কাছে ব্যাখ্যা করছে। কোডটি কখনই সেই ধরণের ব্যাখ্যা সরবরাহ করতে পারে না, সুতরাং মন্তব্যগুলি বুঝতে পারার ফাঁকগুলি পূরণ করে।
গ্রাহাম

47

"সত্তা অবশ্যই প্রয়োজনের বাইরে বহুগুণ করা উচিত নয়।"

- ওকামের রেজার

কোডটি যতটা সম্ভব সহজ হতে হবে। বাগগুলি জটিলতার মধ্যে লুকিয়ে থাকতে পছন্দ করে, কারণ সেখানে উপস্থিত করা তাদের পক্ষে কঠিন। সুতরাং কোড সহজ করে তোলে?

ছোট ইউনিট (ফাইল, ফাংশন, ক্লাস) একটি ভাল ধারণা । ছোট ইউনিটগুলি বোঝা সহজ কারণ আপনার একবারে কম বুঝতে হবে there's সাধারণ মানুষ একসাথে কেবল ~ 7 টি ধারণা জাগল করতে পারে। তবে আকারটি কেবল কোডের লাইনে পরিমাপ করা হয় না । আমি কোডটি "গল্ফিং" করে যতটা সম্ভব সংক্ষিপ্ত কোডটি লিখতে পারি (সংক্ষিপ্ত পরিবর্তনশীল নামগুলি বেছে নেওয়া, "চতুর" শর্টকাট গ্রহণ করে, একক লাইনে যতটা সম্ভব কোড ভাঙা), তবে শেষ ফলাফলটি সহজ নয়। এই জাতীয় কোড বোঝার চেষ্টা করা রিডিং ইঞ্জিনিয়ারিংয়ের মতো।

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

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

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

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

একটি খুব গুরুত্বপূর্ণ মেট্রিক হ'ল সাইক্লোমেটিক জটিলতা (ম্যাককেব জটিলতা)। এটি কোনও অংশের কোডের মাধ্যমে স্বাধীন পাথের সংখ্যা পরিমাপ করে। এই সংখ্যাটি প্রতিটি শর্তযুক্তের সাথে তাত্পর্যপূর্ণভাবে বৃদ্ধি পায় । প্রতিটি শর্তযুক্ত বা লুপ পাথের সংখ্যা দ্বিগুণ করে। 10 টির বেশি পয়েন্টের স্কোর প্রস্তাব দেওয়ার পক্ষে প্রমাণ খুব জটিল। এর অর্থ একটি দীর্ঘ ফাংশন যার সম্ভবত 5 টির স্কোর 25 এর স্কোর সহ খুব সংক্ষিপ্ত এবং ঘন ফাংশনের চেয়ে ভাল। আমরা আলাদা ফাংশনে নিয়ন্ত্রণ প্রবাহ নিষ্কাশন করে জটিলতা হ্রাস করতে পারি।

আপনার শর্তসাপেক্ষে জটিলতার এক অংশ যা পুরোপুরি উত্তোলন করা যায়:

function bigFatFunction(...) {
  ...
  phoneNumber = getPhoneNumber(headers);
  ...
}

...

function getPhoneNumber(headers) {
  return headers.resourceId ? headers.resourceId : DEV_PHONE_NUMBER;
}

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


জটিলতা কখনই মুছে যায় না। এটি কেবল চারপাশে বদলে যেতে পারে। অনেক বড় জিনিস কি কয়েকটি বড় জিনিসের চেয়ে সহজ? এটি পরিস্থিতিতে খুব নির্ভর করে। সাধারণত, কিছু সংমিশ্রণ রয়েছে যা সঠিক মনে হয়। বিভিন্ন জটিলতার কারণগুলির মধ্যে সমঝোতা সন্ধান করতে স্বজ্ঞাততা এবং অভিজ্ঞতা লাগে এবং ভাগ্য কিছুটা লাগে।

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

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

(দ্রষ্টব্য: এই উত্তরটি জিমি হোফার হোয়াইটবোর্ডে যুক্তিসঙ্গত কোড ব্লগ পোস্টের চিন্তাধারার অংশগুলিতে ভিত্তি করে তৈরি করা হয়েছে , যা কোড কী সহজ করে তোলে সে সম্পর্কে একটি উচ্চ-স্তরের দৃষ্টিভঙ্গি সরবরাহ করে))


আমি জেনারেল আমি আপনার প্রতিক্রিয়া পছন্দ। আমি যাইহোক, ম্যাক্যাবস সাইক্লোমাটিক জটিলতা পরিমাপের সাথে বিষয়টি বিবেচনা করি। আমি এটি যা দেখেছি তা থেকে এটি জটিলতার সত্যিকারের পরিমাপ উপস্থাপন করে না।
রবার্ট ব্যারন

27

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

তাদের কথা শুনবেন না!

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

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


53
"তাদের কথা শোনো না!" : ওপিকে তাঁর মনিব দ্বারা বিভাজন কোড বন্ধ করতে বলেছে এই সত্যটি প্রদত্ত , ওপিকে সম্ভবত আপনার পরামর্শ এড়ানো উচিত। এমনকি বস তার পুরানো অভ্যাস পরিবর্তন করতে রাজি না থাকলেও। পূর্ববর্তী জবাব দ্বারা হাইলাইট হিসাবে, উভয় ওপি কোড এবং তার বসের কোড দুটি খারাপভাবে লেখা আছে এবং আপনি (ইচ্ছাকৃতভাবে বা না) আপনার উত্তরে সেটির উল্লেখ করেন না।
আর্সেনী মোরজেনকো

10
@ আর্সেনি মৌরজেনকো: আমাদের প্রত্যেককেই তার বসের সামনে মাথা ঘামানো উচিত নয়। আমি আশা করি ওপিটি এতক্ষণ বয়স্ক হয়ে উঠেছে যে কখন তাকে সঠিক কাজটি করতে হবে, বা যখন তাঁর বসের বক্তব্য আছে তা করতে হবে know এবং হ্যাঁ, আমি ইচ্ছাকৃতভাবে উদাহরণের বিশদটিতে যাচ্ছিলাম না, ইতিমধ্যে সেই বিবরণগুলি নিয়ে ইতিমধ্যে আলোচনা করা যথেষ্ট অন্যান্য উত্তর রয়েছে।
ডক ব্রাউন

8
@ ডকব্রাউন একমত 300 লাইন সম্পূর্ণ শ্রেণীর জন্য প্রশ্নবিদ্ধ। একটি 300 লাইন ফাংশন অশ্লীল।
জিমি জেমস

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

9
এছাড়াও, আমি চাচা বব এর ageষি পরামর্শকে ভুল ব্যাখ্যা এবং এতটা গালাগালি করে দেখেছি যে আমার সন্দেহ আছে যে এটি অভিজ্ঞ কারিগরির তবে কারও পক্ষে কার্যকর ।
রবার্ট হার্ভে

23

আপনার ক্ষেত্রে: আপনি একটি ফোন নম্বর চান। হয় এটি স্পষ্টত আপনি কীভাবে একটি ফোন নম্বর পাবেন, তারপরে আপনি সুস্পষ্ট কোডটি লিখবেন। অথবা আপনি কীভাবে ফোন নম্বর পাবেন তা সুস্পষ্ট নয়, তারপরে আপনি এটির জন্য একটি পদ্ধতি লিখবেন।

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

"IsApplicationInPr Productions" পদ্ধতিটি যথেষ্ট অর্থহীন। আপনার getFhonenumber পদ্ধতি থেকে এটিকে কল করা বাস্তবায়নটিকে আরও সুস্পষ্ট করে না এবং কী চলছে তা নির্ধারণ করা আরও শক্ত করে তোলে।

ছোট ফাংশন লিখবেন না। একটি কার্য-সংজ্ঞায়িত উদ্দেশ্য রয়েছে এমন ফাংশনগুলি লিখুন এবং সেই সু-সংজ্ঞায়িত উদ্দেশ্যটি পূরণ করুন।

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


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

16

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

লাইনের সংখ্যা বেশিরভাগ ক্ষেত্রে কার্যকর মেট্রিক নয়।

300 টি (বা এমনকি 3000) সম্পূর্ণ তুচ্ছ খাঁটি অনুক্রমিক কোডের লাইন (সেটআপ, বা এর মতো কিছু) খুব কমই একটি সমস্যা (তবে এটি আরও ভাল স্বয়ংক্রিয়ভাবে উত্পন্ন বা ডেটা টেবিল বা কিছু হিসাবে হতে পারে), প্রচুর জটিল সহ নেস্টেড লুপের 100 লাইন lines গাউসিয়ান এলিমিনেশন বা ম্যাট্রিক্স ইনভার্শন বা এটির মতো নির্গমন পরিস্থিতি এবং গণিতগুলি সহজেই অনুসরণ করার উপায় হতে পারে।

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

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

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

এই বিশেষ উদাহরণটি আমার কাছে তুচ্ছ বিবরণে উঠছে বলে মনে হচ্ছে, আমি উচ্চতর স্তরের স্টাফগুলির দ্বারা আরও বেশি উদ্বিগ্ন হব কারণ এটি কোনও সিস্টেমকে সহজেই বুঝতে এবং ডিবাগ করার ক্ষমতা থেকে অনেক বেশি গুরুত্বপূর্ণ।


1
আমি দৃ strongly়ভাবে সম্মত - এটি একটি ফাংশন এ মোড়ানো বিবেচনা করার জন্য আমার জন্য খুব জটিল এক-লাইনার লাগবে ... আমি অবশ্যই কোনও ত্রৈমাসিক / ডিফল্ট মান রেখাটি মোড়াতে চাই না। আমি একটি লাইনার আবৃত করেছি, তবে সাধারণত এটি কোন শেল স্ক্রিপ্ট যেখানে কোনও কিছুকে বিশ্লেষণের জন্য দশটি পাইপ এবং কোডটি চালনা ছাড়াই বোঝা যায় না।
টেম্পোরাল ওল্ফ

15

সবকিছুকে একটি বড় লুপের মধ্যে রাখবেন না, তবে এটি প্রায়শই করবেন না:

function isApplicationInProduction(headers) {
   return _.has(headers, 'resourceId');
}

বড় লুপের সমস্যাটি হ'ল এটি যখন অনেকগুলি স্ক্রিন বিস্তৃত করে তখন এর সামগ্রিক কাঠামোটি দেখতে পাওয়া সত্যিই শক্ত। সুতরাং একক দায়বদ্ধ এবং পুনরায় ব্যবহারের যোগ্য এমন আদর্শ অংশগুলি বের করার চেষ্টা করুন।

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

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


2
আমি বুঝতে পারি যে একটি বুলিয়ান ওয়ান লাইনার পড়া সহজ তবে এটি কেবলমাত্র "কী" ঘটছে তা ব্যাখ্যা করে। আমি এখনও সহজ ফাংশনগুলি লিখি যা সাধারণ ত্রৈমাসিক এক্সপ্রেশনগুলি মোড়ানো কারণ ফাংশনটির নামটি "কেন" এই শর্তটি পরীক্ষা করে যাচ্ছি কারণ ব্যাখ্যা করতে সহায়তা করে। এটি বিশেষত সহায়ক যখন কোনও নতুন (বা 6 মাসের মধ্যে নিজেকে) ব্যবসায়ের যুক্তি বোঝার প্রয়োজন হয়।
এজে এক্স

14

দেখে মনে হচ্ছে আপনি আসলে যা চান তা হ'ল:

phoneNumber = headers.resourceId || DEV_PHONE_NUMBER

সেট এই স্বশাসিত যারা এটা সার্চ উচিত phoneNumberকাছে resourceIdযদি এটি উপলব্ধ হবে, বা ডিফল্টে DEV_PHONE_NUMBERযদি এটা না।

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


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

14

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

এর একক টুকরো ফাংশনগুলিতে ফ্যাক্টরিং করা আপনাকে সেই অন্তর্নিহিত সমস্যার সাথে খুব বেশি সহায়তা করবে না।

সন্ধানের জন্য কয়েকটি কীওয়ার্ড:

  • decoupling
  • সংযোগ
  • ইনজেকশন নির্ভরতা

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

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

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


1
আমি 100% এর সাথে সম্মত হই যে এখানে এমন অন্তর্নিহিত উপাদান রয়েছে যা পৃথক করা উচিত, তবে ভাষা / কাঠামো সম্পর্কে আরও কিছু না জেনেও ওও পদ্ধতির অর্থ বোঝে কি না তা জানা শক্ত। খাঁটি ফাংশনাল (যেমন হাস্কেল) থেকে খাঁটি অপরিহার্য (যেমন সি।) যে কোনও ভাষায় ডিকপলিং এবং সিঙ্গল দায়বদ্ধতার নীতিটি গুরুত্বপূর্ণ, আমার প্রথম পদক্ষেপ - যদি বস এটির অনুমতি দেয় be মূল ফাংশনটিকে প্রেরণকারী ফাংশনে রূপান্তরিত করতে পারে ( একটি রূপরেখা বা বিষয়বস্তুর সারণির মতো) যা ঘোষণামূলক শৈলীতে পড়তে হবে (নীতিগুলি বর্ণিত হয়, অ্যালগোরিদম নয়) এবং কাজটি অন্যান্য কার্যক্রমে চালিত করে।
ডেভিড লেপপিক

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

13

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


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

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

6

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

আমি এটি বলব না যে আপনার একদম তিনটি ব্যবহার করা উচিত, কিছু লোক যাদের সাথে আমি কাজ করেছি তারা কিছুটা দীর্ঘ পছন্দ করে if () {...} else {...}, বেশিরভাগ ক্ষেত্রে এটি ব্যক্তিগত পছন্দ। আমি "একটি লাইন এক কাজ করতে পছন্দ করি" পছন্দ করি তবে আমি সাধারণত কোডবেস যা ব্যবহার করি তা আঁকড়ে থাকি।

লার্জিক চেকটি লাইনটি দীর্ঘ বা দীর্ঘতর করে তোলে যদি টের্নারি ব্যবহার করার সময় মানটি ধরে রাখার জন্য একটি নামযুক্ত ভেরিয়েবল / গুলি তৈরি করার বিষয়টি বিবেচনা করুন।

// NOTE "resourceId" not present in dev build, use test data
let isProduction = 'resourceId' in headers;
let phoneNumber = isProduction ? headers.resourceId : DEV_PHONE_NUMBER;

আমি এও বলতে চাই যে কোডবেস যদি 300 লাইন ফাংশনগুলির দিকে প্রসারিত হয় তবে এটির জন্য কিছু মহকুমা প্রয়োজন। তবে আমি কিছুটা বিস্তৃত স্ট্রোক ব্যবহারের পরামর্শ দেব।


5

আপনি যে কোড উদাহরণটি দিয়েছেন তা আপনার বস সঠিক। একক পরিষ্কার লাইন সেই ক্ষেত্রে ভাল।

সাধারণভাবে, জটিল লজিককে ছোট ছোট টুকরো টুকরো করা সামর্থ্য, কোড রক্ষণাবেক্ষণ এবং সাবক্লাসগুলির বিভিন্ন আচরণের সম্ভাবনা (এমনকি কিছুটা হলেও সামান্য হলেও) ভাল।

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


1
"ফাংশন ওভারহেড": এটি সংকলক পর্যন্ত। "অস্পষ্টতা": ওপি এই সম্পত্তিটি যাচাই করার একমাত্র বা সর্বোত্তম উপায় কিনা তা নির্দেশ করে নি; আপনি নিশ্চিতভাবে জানতে পারবেন না। "জটিল স্প্যাগেটি যুক্তি": কোথায়? "মৃত ক্রিয়াকলাপের সম্ভাবনা": এই জাতীয় ডেড কোড বিশ্লেষণ হ'ল ফল হ'ল ফল, এবং বিকাশের সরঞ্জামচেনগুলি যার অভাব অপরিণত।
রাইময়েড

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

2

দীর্ঘ ফাংশনের পক্ষে কমপক্ষে দুটি যুক্তি সম্পর্কে আমি ভাবতে পারি:

  • এর অর্থ প্রতিটি লাইনের চারপাশে আপনার প্রচুর প্রসঙ্গ রয়েছে। এটি আনুষ্ঠানিক করার একটি উপায়: আপনার কোডের নিয়ন্ত্রণ প্রবাহ গ্রাফটি আঁকুন। ফাংশন এন্ট্রি এবং ফাংশন প্রস্থানের মধ্যে একটি শীর্ষস্থান (~ = লাইন) এ, আপনি আগত সমস্ত প্রান্ত জানেন । ফাংশনটি দীর্ঘতর, আরও আরও অনেকগুলি উল্লম্ব রয়েছে।

  • অনেক ছোট ফাংশন মানে একটি বৃহত্তর এবং আরও জটিল কল গ্রাফ। একটি এলোমেলো ফাংশনে একটি এলোমেলো রেখাটি চয়ন করুন এবং "এই রেখাটি কোন প্রসঙ্গে (গুলি) কার্যকর করা হয়?" প্রশ্নের উত্তর দিন? এটি কল গ্রাফের চেয়ে বৃহত্তর এবং জটিলতর হয়ে ওঠে, কারণ আপনাকে সেই গ্রাফের আরও শীর্ষে দেখতে হবে।

দীর্ঘ ক্রিয়াকলাপের বিরুদ্ধে যুক্তিগুলিও রয়েছে — ইউনিট-টেস্টিবিলিটি মনে মনে ings একে অপরের মধ্যে বেছে নেওয়ার সময় আপনার অভিজ্ঞতা ব্যবহার করুন।

দ্রষ্টব্য: আমি বলছি না যে আপনার বস সঠিক, কেবল তার দৃষ্টিভঙ্গিটি পুরোপুরি মূল্য থেকে বঞ্চিত না হতে পারে।


আমার ধারণা আমার মতামতটি হ'ল ভাল অপটিমাইজেশন প্যারামিটারটি ফাংশনের দৈর্ঘ্য নয়। আমি মনে করি যে একটি দেশীয়রতা বিবেচনার জন্য আরও কার্যকর the নিম্নলিখিতটি সমস্ত কিছু সমান হ'ল, ব্যবসায়ের যুক্তি এবং বাস্তবায়ন উভয়েরই একটি উচ্চ-স্তরের বিবরণ কোডের বাইরে পড়তে পারা ভাল to (আপনি যদি কোডের প্রাসঙ্গিক বিটটি খুঁজে পান তবে সর্বদা নিম্ন-স্তরের বাস্তবায়ন বিশদটি পড়া যায়))


ডেভিড আরনোর উত্তর সম্পর্কে মন্তব্য :

ছোট ফাংশনগুলি লেখা একটি ব্যথা কারণ এটি কোডটি কী করছে তা দেখার জন্য আপনাকে প্রতিটি ছোট ফাংশনে যেতে বাধ্য করে।

যদি ফাংশনটি সুনামযুক্ত হয় তবে এটি কেস নয়। # অ্যাপ্লিকেশনআইএনপ্রডাকশনটি স্বতঃসিদ্ধ এবং কোডটি কী করে তা দেখার জন্য এটি পরীক্ষা করার প্রয়োজন হবে না। বাস্তবে বিপরীতটি সত্য: কোডটি পরীক্ষা করে ফাংশন নামটির চেয়ে অভিপ্রায়টি কম প্রকাশ পায় (যে কারণে আপনার বসকে মন্তব্যে অবলম্বন করতে হবে)।

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

কখনও কখনও আপনি একটি চান, কখনও কখনও অন্য চান, সুতরাং এই পর্যবেক্ষণটি একতরফা সর্বজনীন বৈধ সিদ্ধান্তের নিয়ম তৈরি করে না।

মূল লুপটি 300 লাইন বেশি হলেও, এটি পড়তে তত দ্রুত হয় তবে একটি বড় বড় লুপে সবকিছু রাখুন

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

আমি সম্মত হই যে আপনি এটি আপনার মাথায় চালিত করতে হবে। অনেক ছোট ফাংশনে বনাম একটি বড় ফাংশনে আপনার যদি 500 লাইনের কার্যকারিতা থাকে তবে এটি কেন সহজ হয় তা আমার কাছে স্পষ্ট নয়।

ধরুন, সরল-রেখার উচ্চতর পার্শ্ব-প্রভাবকারী কোডের 500 টি লাইনের চূড়ান্ত ক্ষেত্রে, এবং আপনি যদি জানতে চান যে প্রভাব এ এর ​​আগে বা পরে ঘটে থাকে তবে বড় ফাংশনের ক্ষেত্রে, দুটি লাইন সন্ধান করতে পৃষ্ঠা আপ / ডাউন ব্যবহার করুন এবং তারপরে তুলনা করুন লাইন সংখ্যা বহু-ছোট-কার্যকারী ক্ষেত্রে, আপনাকে অবশ্যই মনে রাখতে হবে কল ট্রিতে এর প্রভাবগুলি কোথায় ঘটে। এবং যদি আপনি ভুলে যান তবে আপনাকে এই গাছের কাঠামোটি পুনরায় আবিষ্কার করতে একটি অপ্রয়োজনীয় সময় ব্যয় করতে হবে।

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

(*) কমপক্ষে আমি এ সম্পর্কে সত্যবাদী ;-)

আবারও, আমি মনে করি উভয় পদ্ধতির শক্তি এবং দুর্বলতা রয়েছে।

আপনার যদি কোডটির সদৃশ করতে হয় তবে কেবলমাত্র ছোট ফাংশন লিখুন

আমি একমত নই যেমন আপনার কোড উদাহরণটি দেখায়, ছোট, সুনামযুক্ত ফাংশনগুলি কোডের পঠনযোগ্যতা উন্নত করে এবং যখনই ব্যবহার করা উচিত [উদাহরণস্বরূপ] আপনি "কীভাবে", কোনও কার্যকারিতার কেবল "কী" তে আগ্রহী নন।

আপনি কীভাবে "কী" বা "কী" আগ্রহী সে উদ্দেশ্যটির একটি ক্রিয়া যা আপনি কোডটি পড়ছেন (উদাঃ একটি সাধারণ ধারণা বনাম কোনও বাগ সন্ধান করা)। প্রোগ্রামটি লেখার সময় আপনি যে উদ্দেশ্যে কোডটি পড়ছেন তা উপলভ্য নয় এবং আপনি সম্ভবত বিভিন্ন উদ্দেশ্যে কোডটি পড়বেন; বিভিন্ন সিদ্ধান্ত বিভিন্ন উদ্দেশ্যে অনুকূলিত করা হবে।

এটি বলেছিল, এটি সম্ভবত বসের দৃষ্টিভঙ্গির অংশ আমি সম্ভবত সবচেয়ে বেশি একমত নই।

মন্তব্যের নাম সহ কোনও ফাংশন লিখবেন না, উপরে একটি মন্তব্য সহ আপনার জটিল রেখার কোড (3-4 রেখা) রাখুন। এটির মতো আপনি ব্যর্থ কোডটি সরাসরি সংশোধন করতে পারেন

আমি সত্যই এটি গুরুতর বলে ধরে নিয়ে এর পিছনে যুক্তিটি বুঝতে পারি না। [...] মন্তব্যে একটি মৌলিক ত্রুটি রয়েছে: সেগুলি সংকলিত / ব্যাখ্যা করা হয় না এবং তাই ইউনিট পরীক্ষা করা যায় না। কোডটি সংশোধিত হয়ে যায় এবং মন্তব্যটি একা হয়ে যায় এবং কোনটি সঠিক তা আপনি জানেন না।

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


-1

আমার মতে, আপনার প্রয়োজনীয় কার্যকারিতার জন্য সঠিক কোডটি হ'ল:

phoneNumber = headers.resourceId || DEV_PHONE_NUMBER;

অথবা আপনি যদি এটি কোনও ফাংশনে বিভক্ত করতে চান তবে সম্ভবত এর মতো:

phoneNumber = getPhoneNumber(headers);

function getPhoneNumber(headers) {
  return headers.resourceId || DEV_PHONE_NUMBER
}

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

function isApplicationInProduction() {
  process.env.NODE_ENV === 'production';
}

তারপরে আপনি ফোন নম্বরটি সাথে পেতে পারেন:

phoneNumber = isApplicationInProduction() ? headers.resourceId : DEV_PHONE_NUMBER;

-2

বুলেট পয়েন্ট দুটি সম্পর্কে একটি মন্তব্য

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

অনেক সম্পাদক (উদাঃ ইন্টেলিজ) আপনাকে কেবলমাত্র Ctrl- ক্লিক করে ব্যবহারের মাধ্যমে কোনও ফাংশন / শ্রেণিতে যেতে দেবেন। তদ্ব্যতীত, আপনার কোডটি পড়ার জন্য প্রায়শই কোনও ক্রিয়াকলাপের বাস্তবায়নের বিশদটি জানতে হবে না, ফলে কোডটি পড়া দ্রুত হয়।

আমি আপনাকে তোমার বসকে বলছি; তিনি আপনার উকিল পছন্দ করবেন এবং নেতৃত্ব হিসাবে দেখুন। শুধু নম্র হতে।

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