আরও কিছু সংক্ষিপ্ত কোডের চেয়ে আরও ভার্বোজ কোড (আরও লজিক্যাল স্টেটমেন্টের মতো) আরও পরিষ্কার থাকার ক্ষেত্রে কি এমন ঘটনা রয়েছে?
আরও কিছু সংক্ষিপ্ত কোডের চেয়ে আরও ভার্বোজ কোড (আরও লজিক্যাল স্টেটমেন্টের মতো) আরও পরিষ্কার থাকার ক্ষেত্রে কি এমন ঘটনা রয়েছে?
উত্তর:
এর উত্তর দিতে, আসুন একটি বাস্তব বিশ্বের উদাহরণ যা আমার ক্ষেত্রে হয়েছিল। সি # তে একটি লাইব্রেরি যা আমি রক্ষণ করি, আমার কাছে নিম্নলিখিত কোড ছিল:
TResult IConsFuncMatcher<T, TResult>.Result() =>
TryCons(_enumerator) is var simpleMatchData && !simpleMatchData.head.HasValue
? _emptyValue.supplied
? _emptyValue.value
: throw new NoMatchException("No empty clause supplied");
: _recursiveConsTests.Any()
? CalculateRecursiveResult()
: CalculateSimpleResult(simpleMatchData);
সহকর্মীদের সাথে এটি নিয়ে আলোচনা করে সর্বসম্মত রায়টি হয়েছিল যে নেস্টেড ত্রৈমাসিক অভিব্যক্তিগুলি, "চতুর" ব্যবহারের সাথে মিশ্রিত is var
হয়েছে, তবে কোডটি পড়া কঠিন ছিল।
সুতরাং আমি এটিতে রিফ্যাক্টর:
TResult IConsFuncMatcher<T, TResult>.Result()
{
var simpleMatchData = TryCons(_enumerator);
if (!simpleMatchData.head.HasValue)
{
return _emptyValue.supplied
? _emptyValue.value
: throw new NoMatchException("No empty clause supplied");
}
return _recursiveConsTests.Any()
? CalculateRecursiveResult()
: CalculateSimpleResult(simpleMatchData);
}
মূল সংস্করণটিতে একটি অন্তর্নিহিত মাত্র একটি যৌগিক অভিব্যক্তি রয়েছে return
। নতুন সংস্করণে এখন একটি স্পষ্ট পরিবর্তনশীল ঘোষণা, একটি if
বিবৃতি এবং দুটি স্বচ্ছ রয়েছে returns
। এতে আরও বিবৃতি এবং কোডের আরও লাইন রয়েছে। তবুও আমি যাদের সাথে পরামর্শ করেছি তারা পড়া এবং যুক্তিগুলি সহজ করে বিবেচনা করেছে, এটি "ক্লিন কোড" এর মূল দিক।
সুতরাং আপনার প্রশ্নের উত্তর একটি জোরালো "হ্যাঁ", সংক্ষিপ্ত কোডের চেয়ে আরও ভার্বোজ পরিষ্কার হতে পারে এবং এটি একটি বৈধ রিফ্যাক্টরিং।
!
শর্তটি থেকে সরিয়ে ফেলার পরামর্শ দেব । আমি দ্বিতীয় রিটার্নটি একটিতে রাখার পরামর্শ দেব else
। এটি যেমন দাঁড়িয়েছে তেমনি এটি একটি বিশাল উন্নতি।
if (!foo.HasValue)
আপনার কোডটিতে একটি মূর্খতা থাকে তবে আরও দৃ strongly়তার সাথে । তবে এটি সত্যিই প্রস্থান if
নয় - এটি একটি "এটি বা এটি নির্ভর করে।"
1. এলওসি এবং কোডের মানের মধ্যে পারস্পরিক সম্পর্কের অভাব।
রিফ্যাক্টরিংয়ের লক্ষ্য হ'ল এক টুকরো কোডের মান উন্নত করা।
এলওসি একটি খুব মৌলিক মেট্রিক যা কখনও কখনও কোনও কোডের টুকরোটির মানের সাথে সম্পর্কিত হয়: উদাহরণস্বরূপ, কয়েক হাজার এলওসি সহ একটি পদ্ধতিতে মানের সমস্যা হতে পারে। তবে এটি লক্ষ করা উচিত যে এলওসি কেবলমাত্র মেট্রিক নয়, এবং অনেক ক্ষেত্রে মানের সাথে পারস্পরিক সম্পর্ক নেই। উদাহরণস্বরূপ, একটি 4 এলওসি পদ্ধতি 6 টি এলওসি পদ্ধতির চেয়ে অধ্যয়নযোগ্য বা বেশি রক্ষণযোগ্য নয়।
২. কিছু রিফ্যাক্টরিং কৌশলগুলিতে এলওসি যুক্ত করা থাকে।
আপনি নিতে পারেন refactoring কৌশলের একটি তালিকার , আপনি সহজেই যার intentionnally মধ্যে গঠিত স্পট করতে পারেন যোগ LOCs। উদাহরণ:
উভয়ই খুব দরকারী রিফ্যাক্টরিং কৌশল এবং এগুলি ব্যবহার করতে হবে কিনা তা বিবেচনা করার সময় এলওসি-তে তাদের প্রভাব সম্পূর্ণ অপ্রাসঙ্গিক।
এলওসি ব্যবহার করা এড়িয়ে চলুন।
এলওসি একটি বিপজ্জনক মেট্রিক। এটি পরিমাপ করা খুব সহজ এবং সঠিকভাবে ব্যাখ্যা করা খুব কঠিন।
আপনি কোডের মান পরিমাপের কৌশলগুলির সাথে পরিচিত না হওয়া পর্যন্ত প্রথম স্থানে এলওসি পরিমাপ করা এড়ানো বিবেচনা করুন। বেশিরভাগ সময়, আপনি প্রাসঙ্গিক কোনও কিছু পাবেন না এবং এমন কিছু ঘটনাও ঘটবে যেখানে এটি আপনাকে আপনার কোডের মান হ্রাস করতে বিভ্রান্ত করবে।
আপনি যদি আপনার উত্স কোডের বাইট গণনা বা এলওসি গণনাটি কেবলমাত্র হ্রাস করার চূড়ান্ত ফলাফল দেখতে চান তবে স্ট্যাক এক্সচেঞ্জ কোড গল্ফ সাইটের সাবমিশনগুলি একবার দেখুন ।
যদি আপনার উত্স কোডটি এ জাতীয় ফ্যাশনে হ্রাস করা হয় তবে শীঘ্রই আপনার অকল্পনীয় জগাখিচুড়ি হবে। এমনকি আপনি যদি সেই ব্যক্তি যিনি এই জাতীয় কোড লিখেছেন এবং সেই সময়টিকে পুরোপুরি বুঝতে পেরেছেন, আপনি ছয় মাসের সময় ফিরে আসলে আপনি কতটা দক্ষ হবেন? এই জাতীয় ন্যূনতম কোডটি আসলে যে কোনও দ্রুত কার্যকর করে এমন কোনও প্রমাণ নেই।
কোডটি এমনভাবে লেখা উচিত যাতে আপনার দলের কোনও সদস্য এটি দেখতে পারে এবং সরাসরি এটি কী করছে তা বুঝতে পারে।
হ্যাঁ রিফ্যাক্টরিং অবশ্যই কোডের আরও লাইন তৈরি করতে পারে।
সবচেয়ে সাধারণ ক্ষেত্রে আইএমও হ'ল আপনি যখন কোডটি গ্রহণ করেন যা জেনেরিক নয় এবং আপনি এটিকে আরও জেনেরিক / নমনীয় করে তোলেন । কোড জেনারিকাইজিং সহজেই কোডের লাইনগুলি উল্লেখযোগ্যভাবে বৃদ্ধি করে (কখনও কখনও দু'একটি বা তার বেশি ফ্যাক্টর দ্বারা)।
আপনি যদি নতুন জেনেরিক কোডটি অন্যদের দ্বারা (কেবলমাত্র কোনও অভ্যন্তরীণ সফ্টওয়্যার উপাদান হিসাবে পরিবর্তে) লাইব্রেরি হিসাবে ব্যবহার করার প্রত্যাশা করেন তবে আপনি সাধারণত ইউনিটেট কোড এবং কোড-কোড ডকুমেন্টেশন মার্কআপ যুক্ত করেন যা আবার কোডের লাইনগুলিকে বাড়িয়ে তুলবে।
উদাহরণস্বরূপ, এখানে একটি খুব সাধারণ দৃশ্য যা প্রতিটি সফ্টওয়্যার বিকাশকারীদের জন্য ঘটে:
কিছু দৃ concrete় উদাহরণ যা আমার কাছে আমার মাথার উপরে উঠে আসে: