এটির গন্ধ রয়েছে কারণ সম্ভবত এমন অনেক উদাহরণ রয়েছে যেখানে এটি সম্পাদনা বা উন্নত করা যেতে পারে।
এই গন্ধগুলির বেশিরভাগই এমন কিছুর ইঙ্গিত যা ভুল হতে পারে। অতএব, সেগুলিকে নিজের প্রতি স্থির করার প্রয়োজন নেই... (যদিও আপনার এটির দিকে নজর দেওয়া উচিত।)
আপনি এখানে আগের সমস্ত কোড গন্ধ (Part i - XXXI) খুঁজে পেতে পারেন।
চল অবিরত রাখি...
আমরা আমাদের প্রথম প্রোগ্রামিং দিনে যদি/অন্যথা শিখি। তারপর আমরা অন্য ভুলে যাই।
TL; DR: স্পষ্টভাবে বলুন। এমনকি এলসের সাথেও।
যদি আমরা একটি IF বাক্যে তাড়াতাড়ি ফিরে আসি তবে আমরা অন্য অংশটি বাদ দিতে পারি।
পরে, আমরা IF মুছে ফেলি এবং পলিমারফিজম ব্যবহার করি।
তখনই আমরা আসল কেস মিস করি।
function carBrandImplicit(model) { if (model === 'A4') { return 'audi'; } return 'Mercedes-Benz'; }
function carBrandExplicit(model) { if (model === 'A4') { return 'audi'; } if (model === 'AMG') { return 'Mercedes-Benz'; } // Fail Fast throw new Exception('Model not found); }
আমরা সিনট্যাক্স ট্রি পরীক্ষা করতে পারি এবং সেগুলিকে পার্স করতে পারি এবং অন্য কিছু না থাকার জন্য সতর্ক করতে পারি।
আমরা তাদের পুনরায় লিখতে এবং মিউটেশন পরীক্ষা করতে পারি।
এই ধরনের গন্ধ জনসাধারণের মধ্যে অনেক বিতর্ক এবং ঘৃণা নিয়ে আসে।
আমাদের অবশ্যই মতামত বিনিময় করতে হবে এবং প্রতিটি পক্ষ-বিপক্ষকে মূল্য দিতে হবে।
কোড গন্ধ 36 - স্যুইচ/কেস/else if/else/if স্টেটমেন্ট
ইমপ্লিসিট এলস ব্যবহার করা বন্ধ করুন
কখন ইমপ্লিসিট এলস ব্যবহার করবেন
কীভাবে চিরতরে বিরক্তিকর আইএফ থেকে মুক্তি পাবেন
আনস্প্ল্যাশে এলেনা মোজভিলোর ছবি
সফ্টওয়্যার দলগুলির সবচেয়ে বড় সমস্যাটি নিশ্চিত করা যে সবাই বুঝতে পারছে অন্য সবাই কী করছে৷
মার্টিন ফাওলার
আজ, আমি আমার ওয়ালেটে একটি অর্থপ্রদান আশা করছিলাম। ভারসাম্য ছিল 0. আমি আতঙ্কিত.
TL;DR: নাল 0 নয়। ত্রুটি 0 নয়। শুধু 0 হল 0।
আমি নিরাপত্তা সমস্যা সম্পর্কে অনেক পড়া.
বিশেষ করে ক্রিপ্টোতে।
গত সপ্তাহে, আমি একটি ক্রিপ্টো হ্যাক থ্রেড সম্পর্কে পড়েছি।
যখন আমার মানিব্যাগ আমাকে ব্যালেন্স হিসাবে 0 দেখিয়েছিল, আমি আতঙ্কিত হয়েছিলাম।
এটা শুধু একটি UX গন্ধ ছিল.
ব্লকচেইনটি অগম্য ছিল 💩
""" Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable show 0 as the balance """ import requests import json def get_balance(address): url = "https://blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: return 0
""" Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable throw an error """ import requests import json def get_balance(address): url = "https://blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: raise BlockchainNotReachableError("Error reaching blockchain")
এটি একটি নকশা গন্ধ.
আমরা প্যাটার্ন খুঁজে পেতে পারি যখন একটি ব্যতিক্রম বা রিটার্ন কোড নিক্ষেপ করা হয় এবং একটি 0 দিয়ে মাস্ক করা হয়।
সর্বদা গাইড হিসাবে ন্যূনতম বিস্ময় নীতি অনুসরণ করুন।
কোড গন্ধ 139 - ইউজার ইন্টারফেসে বিজনেস কোড
কোড গন্ধ 73 - প্রত্যাশিত ক্ষেত্রে ব্যতিক্রম
আনস্প্ল্যাশে জেসমিন সেসলারের ছবি
কোড গন্ধ শুধু আমার মতামত .
নলের সাথে আমার আসল সমালোচনা হল যে এটি আপনার প্রোগ্রামটি পরীক্ষা না করে দ্রুত চালাতে বা চেক করার সাথে ধীর গতিতে চালাতে হবে কিনা তা বেছে নেওয়ার অপ্রয়োজনীয় সমস্ত যন্ত্রণা আবার ফিরিয়ে আনে।
টনি হোয়ার (নাল উদ্ভাবক)
সফটওয়্যার ইঞ্জিনিয়ারিং মহান উক্তি
আপনি একটি ভেরিয়েবলের জন্য একটি মান নির্ধারণ করেন এবং এটি ব্যবহার করেন তবে এটি কখনই পরিবর্তন করবেন না।
TL;DR: পরিবর্তনশীলতার বিষয়ে ঘোষণামূলক হন।
রিফ্যাক্টরিং 003 - এক্সট্রাক্ট কনস্ট্যান্ট
রিফ্যাক্টরিং 008 - ভেরিয়েবলকে কনস্ট্যান্টে রূপান্তর করুন
আমরা সবসময় ডোমেইন থেকে শিখছি।
কখনও কখনও আমরা অনুমান করি যে MAPPER এর সাথে একটি মান পরিবর্তন হতে পারে।
পরে, আমরা শিখি যে এটি পরিবর্তন হবে না।
অতএব, আমরা একটি ধ্রুবক এটি প্রচার করা প্রয়োজন.
এটি ম্যাজিক কনস্ট্যান্ট এড়াবে।
<?php function configureUser() { $password = '123456'; // Setting a password on a variable is another vulnerability // And Code Smell $user = new User($password); // Notice Variable doesn't change }
<?php define("USER_PASSWORD", '123456') function configureUser() { $user = new User(USER_PASSWORD); } // or function configureUser() { $user = new User(userPassword()); } function userPassword() : string { return '123456'; } // Case is an oversimplification as usual
অনেক লিন্টার চেক করে যে ভেরিয়েবলের শুধু একটি অ্যাসাইনমেন্ট আছে কিনা।
আমরা মিউটেশন পরীক্ষাও করতে পারি, এবং পরীক্ষাগুলি ভেঙে যায় কিনা তা দেখার জন্য পরিবর্তনশীল পরিবর্তন করার চেষ্টা করতে পারি।
পরিবর্তনশীল সুযোগ পরিষ্কার হলে আমাদের নিজেদেরকে এবং রিফ্যাক্টরকে চ্যালেঞ্জ করতে হবে, এবং আমরা এর বৈশিষ্ট্য এবং পরিবর্তনশীলতা সম্পর্কে আরও শিখি।
কোড গন্ধ 116 - ভেরিয়েবল 'var' দিয়ে ঘোষিত
কোড গন্ধ 127 - পরিবর্তনযোগ্য ধ্রুবক
কোড গন্ধ 107 - ভেরিয়েবল পুনরায় ব্যবহার
কোড গন্ধ 02 - ধ্রুবক এবং ম্যাজিক সংখ্যা
কোড গন্ধ শুধু আমার মতামত .
আনস্প্ল্যাশে নোয়া বুশারের ছবি
একটি জটিল সিস্টেম যা কাজ করে তা একটি সাধারণ সিস্টেম থেকে বিকশিত হয়েছে যা কাজ করে।
জন গ্যাল
গুরুতর উন্নয়ন অনেক বিভিন্ন মানুষ দ্বারা সম্পন্ন করা হয়. আমাদের একমত হতে শুরু করতে হবে।
TL;DR: ভিন্ন কেস রূপান্তর মিশ্রিত করবেন না
একটি কেস স্ট্যান্ডার্ড চয়ন করুন
এর ওপর ধরে রাখুন
যখন বিভিন্ন লোক একসাথে সফ্টওয়্যার তৈরি করে, তখন তাদের ব্যক্তিগত বা সাংস্কৃতিক পার্থক্য থাকতে পারে।
কেউ ক্যামেলকেস 🐫, অন্যরা স্নেক_কেস 🐍, MACRO_CASE🗣️ এবং আরও অনেকে পছন্দ করে।
কোডটি সহজবোধ্য এবং পঠনযোগ্য হওয়া উচিত।
{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "UPDATED_AT": "2022-01-07T02:23:41.305Z", "created_at": "2019-01-07T02:23:41.305Z", "deleted at": "2022-01-07T02:23:41.305Z" }
{ "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "updatedAt": "2022-01-07T02:23:41.305Z", "createdAt": "2019-01-07T02:23:41.305Z", "deletedAt": "2022-01-07T02:23:41.305Z" // This doesn't mean THIS standard is the right one }
আমরা আমাদের লিন্টারদের আমাদের কোম্পানির বিস্তৃত নামকরণের মান সম্পর্কে বলতে পারি এবং সেগুলি প্রয়োগ করতে পারি।
যখনই নতুন লোক সংস্থায় আসে, একটি স্বয়ংক্রিয় পরীক্ষা বিনীতভাবে তাকে/তার/.. কোড পরিবর্তন করতে বলা উচিত।
যখনই আমাদের সুযোগ-সুবিধার বাইরের কোডের সাথে ইন্টারঅ্যাক্ট করার প্রয়োজন হয়, তখন আমাদের ক্লায়েন্টের মান ব্যবহার করা উচিত, আমাদের নয়।
মান সঙ্গে ডিল করা সহজ.
আমাদের তাদের প্রয়োগ করতে হবে।
একটি নাম ঠিক কি - পার্ট I দ্য কোয়েস্ট
কোড গন্ধ শুধু আমার মতামত .
আনস্প্ল্যাশে উলফগ্যাং হাসেলম্যানের ছবি
আপনার যদি অনেকগুলি বিশেষ ক্ষেত্রে থাকে তবে আপনি এটি ভুল করছেন।
ক্রেগ জেরুনি
ম্যাক্সিন্ট একটি অবৈধ আইডির জন্য একটি খুব ভাল নম্বর। আমরা এটি কখনই পৌঁছাব না।
TL;DR: অবৈধ আইডির সাথে আসল আইডি জোড়া দেবেন না। আসলে: আইডি এড়িয়ে চলুন।
বিশেষ বস্তুর সাথে বিশেষ কেস মডেল করুন।
9999, -1, এবং 0 এড়িয়ে চলুন যেহেতু তারা বৈধ ডোমেন অবজেক্ট এবং বাস্তবায়ন কাপলিং।
নাল অবজেক্টের পরিচয় দাও
কম্পিউটিংয়ের প্রাথমিক দিনগুলিতে, ডেটা টাইপগুলি কঠোর ছিল।
তারপরে আমরা বিলিয়ন ডলারের ভুল আবিষ্কার করেছি।
তারপরে আমরা বড় হয়েছি এবং বহুরূপী বিশেষ মানগুলির সাথে বিশেষ পরিস্থিতিতে মডেল করেছি।
#include "stdio.h" #include "stdlib.h" #include "stdbool.h" #define INVALID_VALUE 999 int main(void) { int id = get_value(); if (id==INVALID_VALUE) { return EXIT_FAILURE; // id is a flag and also a valid domain value } return id; } int get_value() { // something bad happened return INVALID_VALUE; } // returns EXIT_FAILURE (1)
#include "stdio.h" #include "stdlib.h" #include "stdbool.h" // No INVALID_VALUE defined int main(void) { int id; id = get_value(); if (!id) { return EXIT_FAILURE; // Sadly, C Programming Language has no exceptions } return id; } get_value() { // something bad happened return false; } // returns EXIT_FAILURE (1)
আমরা কোডে বিশেষ ধ্রুবক এবং বিশেষ মান পরীক্ষা করতে পারি।
বাহ্যিক শনাক্তকারীর সাথে সম্পর্কিত করার জন্য আমাদের সংখ্যা ব্যবহার করা উচিত।
যদি কোন বাহ্যিক শনাক্তকারী বিদ্যমান না থাকে, তাহলে এটি একটি সংখ্যা নয়।
Y2K22 - ভুল যা আমাদের বিব্রত করে
কোড গন্ধ শুধু আমার মতামত .
আনস্প্ল্যাশে মার্কাস স্পিসকের ছবি
বাগগুলি কোণে লুকিয়ে থাকে এবং সীমানায় জড়ো হয়।
বরিস বেইজার
আরও 5টি কোড গন্ধ শীঘ্রই আসছে...