কোড পর্যালোচনা: চরম লঙ্ঘনের সাধারণ কারণ এবং এগুলি স্থির করার পক্ষে যুক্তিগুলি এড়ানো

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

কিছু কোড নির্মাণ বা কৌশল চূড়ান্ত লঙ্ঘনের ফলে তৈরি হতে পারে এবং কীভাবে সেই লঙ্ঘনগুলি সংশোধন করবেন সে সম্পর্কে তর্ক বাড়ে। এই অপব্যবহারের অবসান হিংসাত্মক যুক্তি বাড়ে। মতামতের এই পার্থক্যগুলি সমাধান করা যেতে পারে বা নীচে তালিকাভুক্ত নির্দিষ্ট ভাষাগত বৈশিষ্ট্য এবং কৌশলগুলির জন্য কমপক্ষে প্রশমিত করা যেতে পারে।

শর্তসাপেক্ষ অপারেটর বনাম। যদি বিবৃতি

ভাষাগত উপাদান, শর্তসাপেক্ষ অপারেটর এবং যদি বিবৃতিটি বিভিন্ন শিবির যুক্তি দেয় যে প্রতিটি নির্দিষ্ট ক্রিয়াকলাপের জন্য সর্বোত্তম কৌশল is এই কৌশলগুলি বিভিন্ন উপায়ে প্রয়োগ করা যেতে পারে, প্রতিটি কৌশলতে সুবিধা এবং অসুবিধা রয়েছে।

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

if (label1IsRequired) {লেবেল 1.রঙ = "লাল"; } অন্য {লেবেল 1. রঙ = "কালো"; }
if (label2IsRequired) {লেবেল 2.রঙ = "লাল"; } অন্য {লেবেল 2. রঙ = "কালো"; }
if (label3IsRequired) {লেবেল 3.রঙ = "লাল"; } অন্য {লেবেল 3. রঙ = "কালো"; }

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

healthIndicator Color = (স্বাস্থ্য == "ভাল")? "সবুজ": (স্বাস্থ্য == "ফর্সা")? "হলুদ": (স্বাস্থ্য == "খারাপ")? "লাল": (স্বাস্থ্য == "লাইফ সাপোর্ট")? "কমলা": "বেগুনি";

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

if (স্বাস্থ্য == "ভাল") {স্বাস্থ্যকর শ্লোক = "সবুজ"; if অন্যথায় যদি (স্বাস্থ্য == "ফর্সা") {হেলথ ইন্ডিকেটর কালার = "হলুদ"; if অন্যথায় যদি (স্বাস্থ্য == "দুর্বল") {হেলথ ইনডিকেটর কালার = "লাল"; if অন্যথায় যদি (স্বাস্থ্য == "Life_support") {healthIndicator Color = "কমলা"; } else {healthIndicatorColor = "বেগুনি"; }
লেবেল 1.রঙ = (লেবেল 1 প্রয়োজনীয়)? "লাল, কালো"; লেবেল 2. রঙ = (লেবেল 2 প্রয়োজনীয়)? "লাল, কালো"; লেবেল 3. রঙ = (লেবেল 3 প্রয়োজনীয়)? "লাল, কালো";

একাধিক রিটার্ন স্টেটমেন্ট বনাম। একটি রিটার্ন বিবৃতি

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

একাধিক রিটার্ন স্টেটমেন্ট: একাধিক রিটার্ন স্টেটমেন্ট কোডকে যুক্ত করতে পারে যা বোঝা, অনুসরণ করা এবং পরীক্ষা করা শক্ত। তবে একাধিক রিটার্ন সহ পদ্ধতিগুলি একক রিটার্নের সাথে ফাংশনগুলির চেয়ে কম হতে পারে।

কিছু ডেটাটাইপ কিছু ম্যাথোদ (প্যারাম 1, প্যারাম 2, প্যারাম 3) {সোমারডেটাটাইপ রিটওয়াল; if (প্যারাম 1 == নাল) {retVal = নাল} যদি (retVal == নাল) {ret retal; } if (param2! = নাল) {retVal = param2; } যদি (retVal.Equals (param2)) ret retVal; } retVal = প্যারাম 3; রিটার্ন রিটওয়াল; }

একটি রিটার্ন বিবৃতি: একটি একক রিটার্ন বিবৃতি দীর্ঘ পদ্ধতি হতে পারে। তবে, এই পদ্ধতিগুলির একটি একক পয়েন্ট রয়েছে যা পরীক্ষা এবং ডিবাগিংকে আরও সহজ করে তোলে makes

সামোডাটাটাইপ কিছু ম্যাথোদ () {কিছু ডেটাটাইপ টাইপ retal; // কয়েকশো বা কয়েক হাজার লাইনের কোড রিটার্ন রেটওয়াল; }

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

স্যামডাটাটাইপ কিছু ম্যাথোদ (প্যারাম 1, প্যারাম 2, প্যারাম 3) {যদি (প্যারাম 1 == নাল || প্যারাম 3 == নাল) {রিটার্ন নাল; } সোমারডেটাটাইপ retVal = নাল; if (param2! = নাল {retVal = param2;} অন্যথায় যদি (প্যারাম 1! = নাল) {retVal = param1;} ইলে যদি (প্যারাম 3! = নাল) {retVal = param3;} retVal;}
সোমারডেটাটাইপ কিছুমেথোদ (প্যারাম 1, প্যারাম 2) {সোমারডেটাটাইপ রেটওয়াল = নাল; (int i = 0; i) এর জন্য

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

বিরতি এবং ব্যবহার চালিয়ে যান: উপাদানগুলি কোডটি সহজতর করতে পারে তবে অযথা জটিল করে তোলে complicated

সোমারডেটাটাইপ কিছুমেথোদ (প্যারাম 1, প্যারাম 2) {সোমারডেটাটাইপ রেটওয়াল = নাল; (int i = 0; i) এর জন্য
SomeDataType someMethod (ডেটা, প্যারাম 1) {SomeDataType retVal = নাল; কিছু করুন: এর জন্য (int i = 0; i) = ডেটা দৈর্ঘ্য) {বিরতি; } যদি (ডেটা [i]। সমাপ্তি (প্যারাম 1)) {retVal = ডেটা [i]; } অন্য {চালিয়ে যান; }}
যদি (retVal == নাল) {ডেটা - রিফ্রেশডাটা (); কিছু যেতে; }
রিটার্ন রিটওয়াল; }

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

SomeDataType someMethod (ডেটা, প্যারাম 1) {SomeDataType retVal = নাল; (int i = 0; i) এর জন্য

রক্ষণাত্মক ব্যতিক্রম

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

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

অকার্যকর কিছু ম্যাথোদ (প্যারাম 1, প্যারাম 2) {যদি (প্যারাম 1 == নাল || প্যারাম 2 == নাল) {একটি নতুন আর্গুমেন্ট নালেক্সেক্সেশন নিক্ষেপ করুন ("এক বা একাধিক পরামিতি অনুপস্থিত"); } // পদ্ধতি জিনিস করুন}
অকার্যকর কিছু ম্যাথোদ (প্যারাম 1, প্যারাম 2) {// প্রতিরক্ষা নিয়ন্ত্রণের ডজন ডজন ..... // বাকি পদ্ধতিটি করুন}

সম্ভাব্য সমাধান: গ্রহণযোগ্য ব্যবহারের ক্ষেত্রে ডিফেন্সিভ ব্যতিক্রমের ঘাটতি সবচেয়ে ছোট। বাধ্যতামূলক কারণ না দেওয়া থাকলে এই সম্মেলনগুলি থেকে বিচ্যুত যে কোনও কৌশল ব্যবহারের সংশোধন করা উচিত।

সর্বজনীন শূন্য কিছু মঠোড (প্যারাম 1, প্যারাম 2) {// পাবলিক পদ্ধতিতে প্রতিটি প্যারামিটার পরীক্ষা করুন যদি (প্যারাম 1 == নাল || প্যারাম 2 == নাল) {একটি নতুন আর্গুমেন্ট নালেক্সেক্সেশন নিক্ষেপ করুন ("এক বা একাধিক পরামিতি অনুপস্থিত"); ! // অবৈধ ডেটা দ্বারা সৃষ্ট সমস্যাগুলি প্রতিরোধ করুন যদি (! ইসভালিড (প্যারাম 1) || } // পরামিতি দিয়ে কিছু করুন}

শেষ করি

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