paint-brush
কীভাবে আপনার কোডের দুর্গন্ধযুক্ত অংশগুলি খুঁজে পাবেন [অংশ XXXIV]দ্বারা@mcsee
773 পড়া
773 পড়া

কীভাবে আপনার কোডের দুর্গন্ধযুক্ত অংশগুলি খুঁজে পাবেন [অংশ XXXIV]

দ্বারা Maximiliano Contieri7m2023/04/07
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

এটির গন্ধ আছে কারণ সম্ভবত এমন অনেক উদাহরণ রয়েছে যেখানে এটি সম্পাদনা বা উন্নত করা যেতে পারে। এই গন্ধগুলির বেশিরভাগই এমন কিছুর ইঙ্গিত যা ভুল হতে পারে। অতএব, সেগুলিকে প্রতি নিজের স্থির করার প্রয়োজন নেই... (যদিও আপনার এটির দিকে নজর দেওয়া উচিত।) পূর্ববর্তী কোড গন্ধ আপনি পূর্বের সমস্ত কোড গন্ধ (Part i - XXXIII) এখানে খুঁজে পেতে পারেন।
featured image - কীভাবে আপনার কোডের দুর্গন্ধযুক্ত অংশগুলি খুঁজে পাবেন [অংশ XXXIV]
Maximiliano Contieri HackerNoon profile picture

এটির গন্ধ রয়েছে কারণ সম্ভবত এমন অনেক উদাহরণ রয়েছে যেখানে এটি সম্পাদনা বা উন্নত করা যেতে পারে।


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

পূর্ববর্তী কোড গন্ধ

আপনি এখানে আগের সমস্ত কোড গন্ধ (Part i - XXXIII) খুঁজে পেতে পারেন।


চল অবিরত রাখি...


কোড গন্ধ 166 - ইউজার ইন্টারফেসে নিম্ন-স্তরের ত্রুটি

মারাত্মক ত্রুটি: ধরা পড়া ত্রুটি: ক্লাস 'logs_queries_web' /var/www/html/query-line.php:78 এ পাওয়া যায়নি


স্ট্যাক ট্রেস: 718 লাইনে /var/www/html/query-line.php-এ #0 {main} নিক্ষেপ করা হয়েছে


TL;DR: আপনার ভুল ধরুন। এমনকি যাদের আপনি আশা করেন না।

সমস্যা

  • নিরাপত্তা


  • ত্রুটি পরিচালনা


  • ত্রুটি লগিং


  • খারাপ UX অভিজ্ঞতা

সমাধান

  1. একটি উচ্চ-স্তরের হ্যান্ডলার ব্যবহার করুন।


  2. রিটার্ন কোডের পক্ষে ভাষাগুলি এড়িয়ে চলুন।


  3. ডাটাবেস এবং নিম্ন-স্তরের ত্রুটি আশা করুন।

প্রসঙ্গ

এমনকি 2022 সালে, আমরা নৈমিত্তিক ব্যবহারকারীদের একটি স্ট্যাক বা ডিবাগিং বার্তা দেখাচ্ছে "গুরুতর" ওয়েবসাইটগুলি দেখতে পাচ্ছি।

কোডের উদাহরণ

ভুল

 <? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9

ঠিক

 <? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");

সনাক্তকরণ

  • [x] স্বয়ংক্রিয়

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

ট্যাগ

  • নিরাপত্তা

উপসংহার

আমাদের পরিপক্ক হতে হবে।


আমাদের সমাধান অগোছালো হওয়া উচিত নয়।



গুরুতর সফ্টওয়্যার ইঞ্জিনিয়ার হিসাবে আমাদের খ্যাতি উন্নত করতে হবে।

সম্পর্ক

কোড গন্ধ 72 - রিটার্ন কোড

অধিক তথ্য

দ্রুত ব্যর্থ

দাবিত্যাগ

কোড গন্ধ শুধু আমার মতামত .

ক্রেডিট

আনস্প্ল্যাশে জেসি অরিকোর ছবি


আমার সমস্যার 80 শতাংশ সরল লজিক ত্রুটি। বাকি সমস্যার 80 শতাংশ পয়েন্টার ত্রুটি। বাকি সমস্যাগুলো কঠিন।

মার্ক ডোনার

সফটওয়্যার ইঞ্জিনিয়ারিং মহান উক্তি


কোড গন্ধ 167 - হ্যাশিং তুলনা

হ্যাশিং গ্যারান্টি দেয় দুটি বস্তু ভিন্ন। তারা যে একই রকম তা নয়।


TL;DR: আপনি যদি হ্যাশ পরীক্ষা করেন, তাহলে আপনার সমতাও পরীক্ষা করা উচিত

সমস্যা

সমাধান

  1. হ্যাশ (দ্রুত) জন্য পরীক্ষা করুন এবং তারপর সমতা (ধীর) জন্য পরীক্ষা করুন

প্রসঙ্গ

7ই অক্টোবর, 2022-এ, বৃহত্তর ব্লকচেইনগুলির একটিকে থামাতে হয়েছিল।


এই খবরটি হতবাক কারণ বেশিরভাগ ব্লকচেইন সংজ্ঞা দ্বারা বিকেন্দ্রীকৃত।


আপনি এখানে একটি সম্পূর্ণ নিবন্ধ পড়তে পারেন:

কিভাবে একজন হ্যাকার একটি কোডের গন্ধকে কাজে লাগিয়ে $566M USD চুরি করেছে৷

কোডের উদাহরণ

ভুল

 public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }

ঠিক

 public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }

সনাক্তকরণ

  • [x] আধা-স্বয়ংক্রিয়

অনেক লিন্টারের হ্যাশ এবং সমতা পুনর্নির্ধারণের নিয়ম রয়েছে।


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

  • পরিচয়
  • নিরাপত্তা

উপসংহার

প্রতিটি কর্মক্ষমতা উন্নতি তার ত্রুটি আছে.


ক্যাশে এবং প্রতিলিপিগুলি উল্লেখযোগ্য উদাহরণ।


আমরা তাদের সাবধানে ব্যবহার করতে পারি (অবশ্যই)।

সম্পর্ক

কোড গন্ধ 49 - ক্যাশে

কোড গন্ধ 150 - সমান তুলনা

অধিক তথ্য

সমতা এবং হ্যাশ

জাভাতে হ্যাশকোড

হ্যাশকোড বনাম সমান

দাবিত্যাগ

কোড গন্ধ শুধু আমার মতামত .


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

উইটসে ভেনেমা

সফটওয়্যার ইঞ্জিনিয়ারিং মহান উক্তি


কোড গন্ধ 168 - অনথিভুক্ত সিদ্ধান্ত

আমাদের কিছু পরিবর্তন করতে হবে। আমরা কেন পরিষ্কার হতে হবে

TL;DR: আপনার নকশা বা বাস্তবায়নের সিদ্ধান্ত সম্পর্কে ঘোষণামূলক হন।

সমস্যা

  • কোড মন্তব্য
  • পরীক্ষাযোগ্যতার অভাব

সমাধান

  1. কারণ সম্পর্কে স্পষ্ট হন.
  2. মন্তব্যটিকে একটি পদ্ধতিতে রূপান্তর করুন।

প্রসঙ্গ

কখনও কখনও আমরা স্বেচ্ছাচারী নিয়মগুলিকে এত সহজে পরীক্ষাযোগ্য নয়।


যদি আমরা একটি ব্যর্থ পরীক্ষা লিখতে না পারি, আমাদের একটি মন্তব্যের পরিবর্তে একটি চমৎকার এবং ঘোষণামূলক নাম সহ একটি ফাংশন থাকতে হবে।

কোডের উদাহরণ

ভুল

 // We need to run this process with more memory set_memory("512k) run_process();

ঠিক

 increase_memory_to_avoid_false_positives(); run_process();

সনাক্তকরণ

  • [x] আধা-স্বয়ংক্রিয়

এটি একটি শব্দার্থিক গন্ধ।


আমরা মন্তব্য সনাক্ত করতে এবং আমাদের সতর্ক করতে পারেন.

ট্যাগ

  • মন্তব্য

উপসংহার

কোড হল গদ্য। এবং নকশা সিদ্ধান্ত বর্ণনামূলক হতে হবে.

সম্পর্ক

কোড গন্ধ 05 - মন্তব্য অপব্যবহারকারীরা

কোড গন্ধ 75 - একটি পদ্ধতির ভিতরে মন্তব্য

দাবিত্যাগ

কোড গন্ধ শুধু আমার মতামত .

ক্রেডিট

Unsplash-Goh Rhy Yan- এর ছবি


প্রোগ্রাম, মানুষের মত, পুরানো হয়. আমরা বার্ধক্য রোধ করতে পারি না, তবে আমরা এর কারণগুলি বুঝতে পারি, এর প্রভাব সীমিত করতে পারি এবং কিছু ক্ষতিকে বিপরীত করতে পারি।

মারিও ফুসকো

সফটওয়্যার ইঞ্জিনিয়ারিং মহান উক্তি


কোড গন্ধ 169 - আঠালো পদ্ধতি

একসাথে দুটি বা তার বেশি জিনিস তৈরি করবেন না।

TL;DR: আপনার পদ্ধতিতে যতটা সম্ভব পারমাণবিক হওয়ার চেষ্টা করুন

সমস্যা

  • কাপল কোড
  • পরীক্ষা করা কঠিন
  • পড়া কঠিন

সমাধান

  1. পদ্ধতি ভাঙুন

রিফ্যাক্টরিং

https://maximilianocontieri.com/refactoring-002-extract-method

প্রসঙ্গ

আপনি যদি 'এন্ড' দিয়ে একটি পদ্ধতির নাম দেন, আপনি সম্ভবত একটি নির্যাস এবং বিরতি পদ্ধতির সুযোগ মিস করছেন।

কোডের উদাহরণ

ভুল

 calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities

ঠিক

 calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them

সনাক্তকরণ

  • [x] আধা-স্বয়ংক্রিয়

কিছু লিন্টার 'এবং' শব্দটি সহ পদ্ধতি সম্পর্কে আমাদের সতর্ক করতে পারে।

ট্যাগ

  • কাপলিং

উপসংহার

পদ্ধতি তৈরি করার সময়, কিছু রাবার হাঁসের গল্প খেলা এবং আমরা জিনিসগুলি সঠিকভাবে তৈরি করছি কিনা তা নিজেদেরকে বলা খুবই গুরুত্বপূর্ণ।

সম্পর্ক

%[ https://maximilianocontieri.com/code-smell-85-and-functions ]

দাবিত্যাগ

কোড গন্ধ শুধু আমার মতামত .

ক্রেডিট

আনস্প্ল্যাশে স্কট স্যাঙ্কারের ছবি


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

জোশুয়া ব্লচ


কোড গন্ধ 170 - কার্যকরী পরিবর্তন সহ রিফ্যাক্টর

উন্নয়নশীল মহান. রিফ্যাক্টরিং আশ্চর্যজনক। একই সময়ে এটি তৈরি করবেন না

TL;DR: একই সময়ে কার্যকরী এবং রিফ্যাক্টর পরিবর্তন করবেন না।

সমস্যা

  • সমাধান পর্যালোচনা করা কঠিন
  • দ্বন্দ্ব মার্জ করুন

সমাধান

  1. রিফ্যাক্টর করার সময় কখনই কার্যকারিতা পরিবর্তন করবেন না

প্রসঙ্গ

কখনও কখনও আমরা আরও বিকাশের জন্য একটি রিফ্যাক্টরিং প্রয়োজন শনাক্ত করি।


আমরা শেখার বিশেষজ্ঞ.


আমাদের সমাধান রাখা উচিত। রিফ্যাক্টরিংয়ের উপর কাজ করুন এবং আমাদের সমাধানটি চালিয়ে যান।

কোডের উদাহরণ

ভুল

 getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code

ঠিক

 getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename

সনাক্তকরণ

এটি একটি রিফ্যাক্টরিং গন্ধ।

  • [x] ম্যানুয়াল

ট্যাগ

  • রিফ্যাক্টরিং

উপসংহার

আমাদের একটি শারীরিক টোকেন ব্যবহার করা উচিত।


হয় আমরা রিফ্যাক্টরিং পর্যায়ে বা উন্নয়নশীল পর্যায়ে আছি।

দাবিত্যাগ

কোড গন্ধ শুধু আমার মতামত .

ক্রেডিট

আনস্প্ল্যাশে ড্যানি জিং এর ছবি


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

মার্টিন ফাওলার


আরও 5টি কোড গন্ধ শীঘ্রই আসছে...