কোড দেখার সময় কোন বিষয়গুলি তত্ক্ষণাত্ অ্যালার্মের ঘন্টা বাজায়? [বন্ধ]


98

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

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

আমি একটি সহজ দিয়ে শুরু করব:

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


61
আমি কখনও কখনও এমন লোকদের মুখোমুখি হই যারা কোড মন্তব্য করে, চেকইন করে এবং বলে যে "ভবিষ্যতে আমার আবার এটির প্রয়োজন হতে পারে - যদি আমি এখন এটি সরিয়ে ফেলি তবে আমি এটি হারাব"। আমাকে "এর, ... এর সাথে লড়াই করতে হবে তবে এটি সোর্স কন্ট্রোলের জন্য"।
টালোনেক্স

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

4
আমি আমাদের একজন ইঞ্জিনিয়ারের লিখিত কোড বজায় / পরিষ্কার করছি, যিনি কিছু দরকারী জিনিস কোড করেছেন তবে স্বীকার করেছেন যে তিনি প্রোগ্রামার নন। আমি জিনিসগুলিকে একীভূত করার সময় আমি তার পুরানো কোডটি মন্তব্য করব এবং তারপরে আমরা পরিবর্তনগুলি ঘুরে দেখব এবং আমি তাকে দেখাব যে আমি কীভাবে তাকে আরও ছোট / আরও দক্ষ / সহজতর বোঝার সাথে প্রতিস্থাপন করেছি। এরপরে আমি সেইগুলি ব্লকগুলি সরিয়ে আছি তারপরে আমি এটিটি পরীক্ষা করে দেখি the পুরানো কোডটি থাকার সুবিধা রয়েছে কারণ তিনি দেখেন যে কীভাবে জিনিসগুলি আরও সহজভাবে করা যায় এবং যখন আমি কথা বলছি তখন কেন জিনিস পরিবর্তন করেছি তা আমি মনে করতে পারি।
টিন ম্যান

8
আমি এমন স্টাফ রেখেছি যা 1 টি কমিটের জন্য "ব্যবহৃত হতে পারে", তারপরে যদি জিনিসগুলি ভেঙে না যায় বা কোনও প্রয়োজনীয়তা না পাওয়া যায় তবে এটি পরবর্তী প্রতিশ্রুতিতে মুছে ফেলা হয়।
পল নাথন

24
হুম। printf("%c", 7)সাধারণত আমার জন্য অ্যালার্ম বাজায়। ;)

উত্তর:


128
/* Fuck this error */

সাধারণত কোনও বাজে try..catchব্লকের ভিতরে পাওয়া যায় , এটি আমার মনোযোগ আকর্ষণ করে। প্রায় পাশাপাশি /* Not sure what this does, but removing it breaks the build */

আরও কয়েকটি জিনিস:

  • একাধিক নেস্টেড জটিল ifবক্তব্য
  • নিয়মিতভাবে লজিক প্রবাহ নির্ধারণ করতে ব্যবহৃত ব্লকগুলি চেষ্টা করুন
  • জেনেরিক নামের সাথে কার্যাবলী process, data, change, rework,modify
  • ছয় বা সাতটি আলাদা ব্র্যাকিং শৈলী 100 লাইনে

আমি সবেমাত্র খুঁজে পেয়েছি:

/* Stupid database */
$conn = null;
while(!$conn) {
    $conn = mysql_connect("localhost", "root", "[pass removed]");
}
/* Finally! */
echo("Connected successfully.");

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


19
যদি আমি এই 6 বার upvote করতে পারে! সমস্ত ভাল উদাহরণ। আমি অহংকারী / মজাদার মন্তব্যগুলিও অপছন্দ করি (বিশেষত যদি তারা শপথের সাথে অন্তর্ভুক্ত থাকে) - আপনি প্রথমবার পড়তে পারলে এটি খুব মজাদার হতে পারে তবে খুব দ্রুত (এবং তাই বিভ্রান্তিকর) হয়ে যায় খুব দ্রুত।
FinnNk

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

2
@ প্রফ্ট বরই - আপনি কোন উদাহরণ দিতে পারেন? সাধারণত একাধিক নেস্টেড বিকল্প যদি এটি (অনেক) পদ্ধতিতে ছড়িয়ে দেওয়া হয়। জুনিয়র বিকাশকারীরা এটি এড়ানোর প্রবণতা দেখায় যদিও এটি এর চেয়ে কম পছন্দসই; তবে সাধারণত যখন চাপ দেওয়া হয় তখন তারা বলে "যদি এটি কম লাইনে করে"। এটি ওওপি-তে নিশ্চিত কাউকে পদক্ষেপে নিয়ে যেতে এবং তাদের মনে করিয়ে দেয় যে কম লাইন! = আরও ভাল কোড।
STW

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

4
@ জোশ, যদি "তারা" সহকর্মী হয় তবে আমি কেন আপনি "আমরা" বলিনি তা ভেবে

104

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

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


1
+1: আমি সহকর্মীর কাছ থেকে কিছু কোড দেখেছি যারা নিজেকে একটি লিনাক্স বিশেষজ্ঞ হিসাবে মন্তব্য করেছেন, যিনি একটি দীর্ঘ ফাংশন হিসাবে একটি সাধারণ লুপিং অ্যাপ্লিকেশন লিখেছিলেন, পুরো বিষয়টি মূলত (এবং)। বাবা।
কেএফরো

4
@ কেএফরো, এটি লুপটি অনিয়ন্ত্রিত। সংকলকরা সারাক্ষণ কী করেন তা হ'ল: খুব দক্ষ!

3
@ থরজজর্ন: কখনও কখনও, আপনাকে সংকলকটিকে একটু সাহায্য করতে হবে; সর্বোপরি, আপনি স্মার্ট মানুষ এবং তিনি কেবল একটি বোবা কম্পিউটার।
ইয়তিমা 2975

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

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

74

কোড যা প্রোগ্রামারটি কতটা চালাক তা দেখানোর চেষ্টা করে, যদিও এটি কোনও আসল মূল্য যোগ করে না:

x ^= y ^= x ^= y;

12
বাহ, যে sooo অনেক চেয়ে বেশি পাঠযোগ্য এরswap(x, y);
JBRWilkinson

8
যদি এক্স এবং ওয়াই পয়েন্টার হয় এবং এই অ্যাসাইনমেন্টটি একটি যুক্তিসঙ্গত সময়ের সাথে সংঘটিত হয়, তবে এটি বোহেম জিসির মতো রক্ষণশীল আবর্জনা সংগ্রহকারীদের ভঙ্গ করে
সিঙ্গেলাইজেশন নির্মূল

12
যাইহোক, একটি ইন্টারভিং সিকোয়েন্স পয়েন্ট ছাড়াই একাধিক পরিবর্তনের কারণে এই কোডটি সি এবং সি ++ এ অপরিবর্তিত রয়েছে।
ফ্রেডওভারফ্লো

9
সেদিকে তাকালে, কেবল মনে মনে যে বিষয়টি আসল তা হ'ল ইমোটিকনস:^_^
দারিয়ান

62
  • 20,000 (অত্যুক্তি) লাইন ফাংশন। যে কোনও ফাংশন যা বেশ কয়েকটি স্ক্রিনের বেশি গ্রহণ করে তার জন্য পুনঃ ফ্যাক্টরিং প্রয়োজন।

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

  • অ-বর্ণনামূলক, অ-তুচ্ছ ভেরিয়েবল বা অনেকগুলি তুচ্ছ নন-বর্ণনামূলক ভেরিয়েবল। এগুলি আসলে একটি ধাঁধা যা ঘটছে তা হ্রাস করে।


9
আমি যখনই সম্ভব 1 টি স্ক্রিনে ফাংশন সীমাবদ্ধ রাখি tend
ম্যাট ডিট্রোলিও

20
1 পর্দা এমনকি একটি প্রসারিত। আমি 10 বা তার লাইনের পরে নোংরা অনুভব করতে শুরু করি।
ব্রায়ান রোয়ে

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

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

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

61
{ Let it Leak, people have good enough computers to cope these days }

এর চেয়ে খারাপ আর কী তা বাণিজ্যিক লাইব্রেরি থেকে!


32
এটি অ্যালার্মের ঘন্টা বাজায় না। এটি ব্যবহারিকভাবে আপনাকে পায়ের মাঝে লাথি দেয়।
স্টিভেন ইভার্স 0

15
কন্যা একটি মেথ আসক্ত। কে পাত্তা দেয়, অন্তত তিনি স্থূল হয়ে উঠবেন না। :: দীর্ঘশ্বাস ::
ইভান প্লেইস

17
আমি যখন সমস্যার সময় নিজেকে খুঁজে পাই, মা বান্টু আমার কাছে আসে। জ্ঞানের কথা বলছি, ফাঁস হোক। এটি ফাঁস করা যাক .. লিক করুন। এটি লিক করুন ওহ এটি লিক করুন। যদি এটি কেবল একবার ফাঁস হয়, তবে এটি লায়াকাক নয়। (আপনি যদি এ পর্যন্ত পড়ে থাকেন তবে +1)। আমার সত্যই ডেকাফ বিবেচনা করা দরকার।
টিম পোস্ট

13
"সময়সীমা দ্রুত এগিয়ে যাওয়ার সাথে সাথে লিকগুলি আমি দেখতে পাচ্ছি, কোথাও কেউ ফিসফিস করে বলে, 'সি তে লিখুন ...... আইইইইইউই !!!" "
চিওরক্স

9
একসময় দুটি ওএস ছিল। একটি লিক এবং ক্র্যাশ হয়ে থাকে যদি এটি 49 দিনের বেশি চলে তবে অন্যটি নিখুঁত ছিল এবং চিরতরে চলবে। একটি 1995 সালে একটি বিশাল ফ্যানফায়ারে চালু হয়েছিল এবং এটি কয়েক মিলিয়ন লোক ব্যবহার করেছিল - অন্যটি কখনও পাঠানো হয়নি কারণ তারা এখনও এটি ত্রুটিমুক্ত কিনা তা পরীক্ষা করে দেখছে। দর্শন এবং প্রকৌশল মধ্যে পার্থক্য আছে।
মার্টিন বেকেট 21

53

মন্তব্যগুলি এতটাই ভার্বোজ যে কোনও ইংরেজী সংকলক থাকলে এটি সংকলন করে নিখুঁতভাবে চালিত হত, তবুও কোডটি এমন কোনও কিছুই বর্ণনা করে না।

//Copy the value of y to temp.
temp = y;
//Copy the value of x to y.
y = x;
//Copy the value of temp to x.
x = temp;

এছাড়াও কোডটিতে কিছু মৌলিক নির্দেশিকাগুলি মেনে চলার সাথে সাথে কোডগুলিতে মন্তব্যগুলি করা যেত:

//Set the age of the user to 13.
a = 13;

15
আছে, একে বলা হয় COBOL :-)
গাইস

26
দ্বিতীয় ক্ষেত্রে সবচেয়ে খারাপ নয়। সবচেয়ে খারাপটি হল: / * ব্যবহারকারীর বয়স 13 * / a = 18 এ সেট করুন;
PhiLho

4
@ ফিলো - না, এর চেয়ে খারাপ আরও খারাপটি যখন প্রাপক /থেকে */নিখোঁজ হয়, সুতরাং পরবর্তী কোডের সমস্ত কোড */উপেক্ষা করা হয়। ভাগ্যক্রমে, বাক্য গঠন হাইলাইট করা এই জাতীয় জিনিসটিকে আজকাল বিরল করে তোলে।
স্টিভ 314

3
আবার খারাপ, aইউজার_এজের জন্য? সত্যি?
গ্লাসেন্ট

2
আমি পূর্ববর্তী নিয়োগকর্তার কাছে একটি কোড স্ট্যান্ডার্ড ডক রক্ষণ করি, যার একটি অংশ যথাযথ মন্তব্য করা ছিল। আমার প্রিয় উদাহরণটি ছিল এমএসডিএন থেকে:i = i + 1; //increment i
মাইকেল Itzoe

42

সংকলনের সময় সতর্কতা তৈরি করে এমন কোড।


1
মেকফিল / প্রকল্পে 'সমস্ত সতর্কতা হিসাবে ত্রুটি হিসাবে সংকলক' বিকল্প যুক্ত করার জন্য একজন প্রার্থী রয়েছেন।
জেবিআরউইলকিনসন

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

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

13
আমি বরং আমার (unsigned int)কোডটিকে সৌভাগ্যবান সতর্কতা সহ আমার সতর্কতা / ত্রুটির তালিকাগুলির তুলনায় প্রায়-অতিরিক্ত-অতিরিক্ত দিয়ে বিশৃঙ্খল করতে চাই। আমি সতর্কতা তালিকার অন্ধ হয়ে যাওয়ার জন্য ঘৃণা করব। এটি একটি Pita অন্যান্য ব্যক্তিদের কাছে ব্যাখ্যা কেন তুমি একটি সতর্কবার্তা উপেক্ষা করছি তুলনায় এটি কেন তুমি প্রাকৃতিক একটি ঢালাই করছেন ব্যাখ্যা করার তেমন কোন কথা হয় আরো intsকাছে unsigned ints
রে মিয়াসাকা

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

36

বর্ণনামূলক নাম রাখার পরিবর্তে নাম্বার সহ ফাংশন , যেমন:

void doSomething()
{
}

void doSomething2()
{
}

দয়া করে, ফাংশনটির নামগুলি কিছু অর্থ করুন! যদি doSomething এবং doSomething2 একই কাজ করে তবে ফাংশন নাম ব্যবহার করুন যা পার্থক্যকে পৃথক করে। যদি ডোসোমিংথিং 2 ডসোমিংথিংয়ের কার্যকারিতার একটি ব্রেক-আউট হয় তবে এর কার্যকারিতার জন্য এটির নাম দিন।


তেমনি এসকিউএল এর জন্য @ পারম
ডেভ

2
+1 - প্রবেশ করুন mshtml- এটি আমার চোখ ভেঙে দেয় :(
কাইল রোজেন্ডো

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

@ ইভান - যথেষ্ট ন্যায্য, যদিও আমি কার্যকারিতাটিতে আরও একটি পৃথকীকরণ করছি।
ওয়াঙ্কো দ্য সনে

1
+1 - আমি এটি সিউডো-সংস্করণ নিয়ন্ত্রণ পদ্ধতি হিসাবে ব্যবহৃত দেখেছি।
ইজেড হার্ট

36

যাদু নম্বর বা যাদু স্ট্রিংস।

   if (accountBalance>200) { sendInvoice(...); }

   salesPrice *= 0.9;   //apply discount    

   if (invoiceStatus=="Overdue") { reportToCreditAgency(); }

4
দ্বিতীয় দু'টির সাথে আসলেই খারাপ নয়, কমপক্ষে ছাড়টি ব্যাখ্যা করা হয়েছে, এবং "ওভারডিউ" স্বজ্ঞাত। 200অন্যদিকে ...
Tarka

9
@ স্লোকুন - স্বজ্ঞাততাটি রক্ষণাবেক্ষণযোগ্যতা এবং ভঙ্গুরতার মতো বিষয় নয়। উদাহরণস্বরূপ, যখন ছাড়ের পরিমাণ পরিবর্তন হয় এবং ছয়টি পৃথক স্থানে 0.9 হার্ড-কোডড থাকে তখন কী ঘটে তা বিবেচনা করুন। এছাড়াও, ধ্রুবক / এনামগুলির পরিবর্তে স্ট্রিংগুলি ব্যবহার করে কেস সেনসিটিভ স্ট্রিং সহ ভাষাগুলিতে সমস্যার জন্য জিজ্ঞাসা করা হচ্ছে।
JohnFx

+1 আমি একটি সমস্যা ডিবাগ করার জন্য খুব বেশি সময় ব্যয় করেছি যা 'লাইনের সময় পেরিয়ে গেছে = 15;' একটি প্রোগ্রামে সমাহিত
অুব্রেইহোডস

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

36
  • সম্ভবত সবচেয়ে খারাপ নয় তবে স্পষ্টতই প্রয়োগকারীদের স্তরটি দেখায়:

    if(something == true) 
  • যদি কোনও ভাষাতে লুপ বা পুনরুক্তি কাঠামো তৈরি হয় তবে কিছুক্ষণের জন্য লুপটি ব্যবহার করে ভাষা বোঝার প্রয়োগকারী স্তরকেও দেখায়:

    count = 0; 
    while(count < items.size()){
       do stuff
       count ++; 
    }
    
    for(i = 0; i < items.size(); i++){
      do stuff 
    }
    //Sure this is not terrible but use the language the way it was meant to be used.
  • ডকুমেন্টেশন / মন্তব্যে দুর্বল বানান / ব্যাকরণ আমার প্রায় কোড হিসাবে খায় ats এর কারণ হ'ল কোডটি মানুষের পড়া এবং মেশিন চালানোর জন্য। এই কারণেই আমরা উচ্চ স্তরের ভাষাগুলি ব্যবহার করি, যদি আপনার ডকুমেন্টেশনগুলি এর মাধ্যমে পাওয়া খুব শক্ত হয় তবে তা আমাকে অজানাভাবে কোডবেসের দিকে না তাকিয়ে একটি নেতিবাচক মতামত তৈরি করে।


29

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


6
আমি জানি কিছু লোক শিখেছিল যে প্রতিটি পদ্ধতিতে কেবল একটি returnবিবৃতি থাকা উচিত , তবে যখন এটি / তারপরে বাসা বাঁধে আমি 6+ এর মাত্রা সৃষ্টি করি তখন আমি মনে করি যে এটি করা ভাল করার চেয়ে আরও বেশি ক্ষতি করে harm
ডারিয়ান

28

কোনও শিক্ষার্থীর প্রোগ্রাম গ্রেড করার সময় আমি মাঝে মাঝে একটি "ঝলক"-স্টাইলের মুহুর্তে বলতে পারি। এগুলি তাত্ক্ষণিক ক্লু:

  • দুর্বল বা বেমানান বিন্যাস
  • পরপর দুটি ফাঁকা রেখার বেশি
  • মানহীন বা বেমানান নামকরণের সম্মেলন
  • পুনরাবৃত্তি কোড, আরও ভারব্যাটিম পুনরাবৃত্তি, সতর্কতা তত শক্ত stronger
  • কোডের একটি সাধারণ টুকরো কী হওয়া উচিত তা অত্যধিক জটিল (উদাহরণস্বরূপ, বিভ্রান্তিকর উপায়ে মুখ্যকে দেওয়া আর্গুমেন্টগুলি পরীক্ষা করা)

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

আরও উন্নত কোড বিবেচনা করার সময়, এগুলি আমার অন্যান্য সতর্কতা:

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

স্টাইলের ক্ষেত্রে, আমি সাধারণত দেখতে পছন্দ করি না:

  • জাভাডোক মন্তব্য করেছেন যে কেবল কোডটি প্রতিধ্বনিত করে

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


অন্য ভাষাতে কীভাবে একটি ভাষা থেকে শৈলী ব্যবহার করা একটি মারাত্মক ত্রুটি (2, 4, 8 প্রতি ইনডেন্ট ফাঁকা ...) তা দেখতে আমি ব্যর্থ হয়েছি। শিক্ষার্থীর যদি অনুসরণ করার মতো অন্য কিছু স্টাইল থাকে তবে স্ব-সামঞ্জস্যপূর্ণ হওয়ার ক্ষেত্রে কোনও দোষ নেই। গ্রেডার হিসাবে আপনি একটি বিলিয়ন প্রোগ্রাম দেখতে পান তাই আপনি সেই বর্ণালীটির বিপরীত প্রান্তে রয়েছেন, তবে এটি সম্পূর্ণ আলাদা (তবে ধারাবাহিক) শৈলী খারিজ করার কারণ নয়।
নিক টি 16

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

1
স্ট্রাইক সম্পর্কে আপনার মন্তব্য স্পট হয়। এটি ঠিক আছে যখন ডেটাটি সবচেয়ে কাঁচা ফর্মে থাকে এবং কোনওভাবেই পরিবর্তন করা হবে না। তবে 95% সময় আপনার ক্লাসে ডেটা ফর্ম্যাট / পরিচালনা করতে কিছু ফাংশন থাকা উচিত। আমি কেবল আমার কিছু কোডের কথা মনে করেছি যা মূলত সেই প্যাটার্নটি ব্যবহার করে এবং এর উন্নতি করা উচিত।
অসন্তুষ্ট গোয়াট

2
অসামঞ্জস্য শৈলী এবং অতিরিক্ত লাইন ব্রেকগুলির জন্য +1 (আমি এলোমেলো ইন্ডেন্টেশন, কোনও ইনডেন্টেশন, এলোমেলো এবং নামকরণের কনভেনশনগুলি এবং আরও অনেক কিছু দেখেছি - এবং এটি প্রোডাকশন কোডে!)। আপনি যদি এই অধিকারটি পেতেও বিরক্ত করতে না পারেন, তবে আর কী করছেন আপনি বিরক্ত করবেন না?
ডিন হার্ডিং

1
আমি কোনও পদ্ধতির ঘোষণার রেখাটি দেহের তুলনায় অনেক দূরে ইন্টেন্ট করা দেখছি ented এটি এমন একটি চিহ্ন যা তারা অন্য কারও ফাইল থেকে অনুলিপি করে আটকিয়েছে।
ব্যারি ব্রাউন

25

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


25

সম্পূর্ণরূপে অব্যবহৃত ভেরিয়েবল , বিশেষত যখন ভেরিয়েবলের একটি নাম ব্যবহার করা হয় যা ভেরিয়েবলের নামের সাথে থাকে।


21

প্রচুর লোক উল্লেখ করেছেন:

//TODO: [something not implemented]

আমি যখন চাইছি যে জিনিসগুলি কার্যকর করা হয়েছিল, কমপক্ষে তারা একটি নোট তৈরি করেছিল। আমার কাছে যা খারাপ বলে মনে হচ্ছে তা হ'ল:

//TODO: [something that is already implemented]

টোডোগুলি মূল্যহীন এবং বিভ্রান্তিকর যদি আপনি কখনই সেগুলি সরাতে বিরত হন না!


1
আমি কেবলমাত্র আমাদের মুক্তির পণ্যটিতে সমস্ত টোডোর একটি প্রতিবেদন তৈরি করার, এবং তাদের স্থানচ্যুত করার পরিকল্পনা নিয়েছিলাম ex প্রায় অর্ধেকটি অপ্রচলিত হয়ে উঠেছে।
এশেলি

1
প্রকল্পের অংশগুলি ট্র্যাক করতে এমএস ভিজ্যুয়াল স্টুডিওতে -1 টোডো মন্তব্যগুলি ব্যবহৃত হয় যেগুলি এখনও কাজের প্রয়োজন। আইই, আইডিই একটি তালিকা রাখে যা টোডোকে ট্র্যাক করে যাতে আপনি সহজেই সেগুলিতে ক্লিক করতে পারেন এবং টডো যে লাইনে রয়েছে তা সরাসরি লাইনে আনতে পারেন। আমি বরং টডসগুলি স্পষ্টভাবে স্থাপন করা দেখতে চাই যে এখনও কী কাজ করা দরকার। Dotnetperls.com/todo দেখুন ।
ইভান প্লেইস

3
@ ইভান প্লেস: বাহ, আপনি যখন কোনও কিছু প্রয়োগ করেছেন এবং //TODOমন্তব্যটি সরিয়েছেন তখন আপনার ভিএস আইডিই স্বীকৃতি দেয় ? অসাধারণ!
জেবিআরওয়িলকিনসন

4
@ প্রফ্ট প্লাম কেন কেবল একটি নীতি তৈরি করবেন না যেখানে কোনও টডোর জন্য দায়বদ্ধ ব্যক্তি তাদের নাম মন্তব্যে রাখে। এইভাবে, যদি এটির কিছু অবশিষ্ট থাকে
ইভান প্লেস

3
এর চেয়ে ভাল পরিকল্পনা // TODO , আপনার বাগ ট্র্যাকার ব্যবহার করুন, এটিই এর জন্য!
সিঙ্গেলাইজেশন ইলিমিনেশন

20

এমন একটি পদ্ধতি যার জন্য এটি পড়তে আমার নিচে স্ক্রোল করা প্রয়োজন।


14
হুম .. এটি বাস্তবায়িত হচ্ছে এর উপর নির্ভর করে। কিছু জটিল অ্যালগরিদম বাস্তবায়নের সময় এটি ঘটানো অযৌক্তিক হবে না, কারণ এগুলিই সংজ্ঞায়িত করা হয়। অবশ্যই, যদি বেশিরভাগ পদ্ধতিগুলি সেভাবে হয় তবে এটি একটি লাল পতাকা।
বিলি ওনিল

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

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

18
আমি স্ক্রোল ডাউন ডাউন চেয়ে ডান স্ক্রলিং এ আরও বিরক্ত। সাদা স্থান "বিনামূল্যে"।
ওয়াঙ্কো দ্য সনে

4
কোডটি কী করছে তা নির্ধারণ করার জন্য আমি সমস্ত ফাইল (বা একাধিক ফাইল) এড়িয়ে যাওয়ার চেয়ে স্ক্রোল করব।
TMN

20

পদ্ধতির নামে সংমিশ্রণ:

public void addEmployeeAndUpdatePayrate(...) 


public int getSalaryOrHourlyPay(int Employee) ....

স্পেসিফিকেশন: অ্যালার্মের ঘন্টা বাজানোর কারণ হ'ল এটি নির্দেশ করে যে পদ্ধতিটি সম্ভবত একক দায়িত্বের নীতি লঙ্ঘন করে ।


হুম ... যদি ফাংশনের নামটি সঠিকভাবে সংজ্ঞা দেয় যে ফাংশনটি কী করে, তবে আমি দ্বিমত পোষণ করব। যদি পদ্ধতিটি দুটি পৃথক জিনিস করে যা পৃথক করা ভাল, তবে আমি প্রসঙ্গের উপর নির্ভর করে একমত হতে পারি ।
ওয়াঙ্কো দ্য সনে

2
এটাই আসল কথা. সংমিশ্রণটি বোঝায় যে এটি খুব সম্ভবত এটি একের বেশি কাজ করে। প্রশ্ন অনুযায়ী এটি এমন কিছু যা আমার সচেতনতা বাড়ায় যে আমার কিছু ভুল হতে পারে।
জনএফএক্স

3
এখন যদি আপনাকে কোনও কর্মী যুক্ত করতে হয় এবং বেশ কয়েকটি জায়গায় তাদের বেতনটি আপডেট করতে হয়? যদি সেই পদ্ধতিতে দুটি পদ্ধতি কল ( addEmployee(); updatePayrate();) থাকে তবে আমি মনে করি এটি কোনও সমস্যা নয়।
ম্যাট গ্র্যান্ড

13

অবশ্যই জিপিএল'এর সোর্স কোডটিকে বাণিজ্যিক, ক্লোজড-সোর্স প্রোগ্রামের সাথে সংযুক্ত করা।

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


6
আপনার পয়েন্টটি দুর্দান্ত হলেও আপনার স্বর অপ্রয়োজনীয়।
জেবিআরউইলকিনসন

@ জেবিআর উইলকিনসন: ধন্যবাদ, আপনি ঠিক বলেছেন। সবার কাছে আমার ক্ষমা।
বব মারফি

আমি মনে করি আপনার শিরোনামে পুনরায় লেখা দরকার। উভয় স্থিতিশীল এবং গতিশীলভাবে জিপিএল উত্স কোডের সাথে সংযুক্ত করা জিপিএল লঙ্ঘন ...
গ্যাভিন কোটস

ভাল দিক. আমি পুরো পোস্ট আবার লিখেছি। সবাইকে ধন্যবাদ.
বব মারফি

9

ভাষা অজ্ঞেয়:

  • TODO: not implemented
  • int function(...) { return -1; } ("প্রয়োগ করা হয়নি" হিসাবে একই)
  • ব্যতিক্রমী কারণে ব্যতিক্রম ছোঁড়া।
  • অপব্যবহার বা অসামঞ্জস্যপূর্ণ ব্যবহার 0, -1বা nullব্যতিক্রমী রিটার্ন মান হিসাবে।
  • এটি কখনই ব্যর্থ হয় না এমন দৃ saying় মন্তব্য ব্যতিরেকে মন্তব্যগুলি।

ভাষা নির্দিষ্ট (সি ++):

  • লো + ইন সি ++ ম্যাক্রোস।
  • স্ট্যাটিক বা গ্লোবাল সি ++ ভেরিয়েবল।
  • একীকরণবিহীন বা অব্যবহৃত পরিবর্তনশীল।
  • array newস্পষ্টতই এটি RAII- নিরাপদ নয় Any
  • অ্যারে বা পয়েন্টারের কোনও ব্যবহার যা আপাতদৃষ্টিতে সীমাবদ্ধ নয়। এর মধ্যে রয়েছে printf
  • অ্যারের অ-আরম্ভীকৃত অংশের কোনও ব্যবহার।

মাইক্রোসফ্ট সি ++ নির্দিষ্ট:

  • মাইক্রোসফট এসডিকে শিরোলেখ ফাইলগুলির মধ্যে ইতিমধ্যে সংজ্ঞায়িত কোনও ম্যাক্রোর সাথে সংঘর্ষে এমন কোনও সনাক্তকারী নাম names
  • সাধারণভাবে, উইন 32 এপিআই এর যে কোনও ব্যবহার হ'ল বিপদাশঙ্কার বড় উত্স। সর্বদা এমএসডিএন খোলা থাকুন এবং সন্দেহ হলেই যুক্তিগুলি / ফেরতের মান সংজ্ঞাটি দেখুন definition (সম্পাদিত)

সি ++ / ওওপি নির্দিষ্ট:

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

18

8
আমার ধারণা "ভাষা অজ্ঞেয়" এর অর্থ এখন "সি / সি ++ / জাভা"?
ইনাইমথি

+1 "ব্যতিক্রমী কারণে ব্যতিক্রম ছুঁড়ে ফেলা" আরও একমত হতে পারে না!
বিলি.বব

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

আমি বিশ্বাস করি যে ছোট হাতের মধ্যে C প্রাক প্রসেসর ম্যাক্রো হয় ঠিক আছে, কিন্তু শুধুমাত্র যদি তারা তাদের আর্গুমেন্ট শুধুমাত্র একবার মূল্যায়ন এবং শুধুমাত্র একটি একক বিবৃতি স্থাপিত।
জো ডি

8

উদ্ভট ইনডেন্টেশন শৈলী।

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


2
বা কেবল একটি চিহ্ন যে তারা একটি উচ্চমূল্যের স্বতন্ত্রবাদী প্রতিভা যা হোমোনিজেড কোডিং অনুশীলনের জালে জড়িয়ে পড়ে না যা "সেরা অভ্যাস" সম্পর্কিত কোনওভাবেই নয়।
বেনামে টাইপ

1
আমি আশা করি আপনি বিদ্রূপ করছেন। যদি কেউ এইরকম অস্বাভাবিক উপায়ে কোডিং করে থাকেন তবে তার উচিত অ্যালার্ম বেল বন্ধ করা উচিত। তারা যেমন চায় তেমন শৈল্পিক হতে পারে তবে তবুও ... অ্যালার্ম বেল।
কেন

2
কিছুটা অস্বাভাবিক শৈলী আছে (আমি বিশ্বাস করি এটি ইউট্রেচ স্টাইল নামে পরিচিত) যা আমি পেয়েছি হাস্কেল / এমএল / এফ # এর বাইরে অত্যন্ত অস্বাভাবিক হওয়া সত্ত্বেও বেশ কার্যকর find "মডিউল শেপস" এ স্ক্রোল করুন: শেখাউআহসকেল . com / making-our-own-types- এবং-typeclass । এই স্টাইলটি সম্পর্কে দুর্দান্ত এটি হ'ল একটি নতুন যুক্ত করতে আপনাকে পূর্ববর্তী লাইনে ডিলিমিটারটি পরিবর্তন করতে হবে না - যা আমি প্রায়শই করতে ভুলে যাই।
রে মিয়াসাকা

@ রিয়িমিয়াসাক সাত বছর দেরীতে, কিন্তু ... ইউট্রেচ স্টাইল সত্যিই আমাকে বিরক্ত করে। আমি বিশ্বাস করি যে হ্যাস্কেল স্পেসিফিকেশনে উল্লম্বভাবে-সংগঠিত তালিকাগুলিতে অন্য "লেআউট বিধি" আরোপ না করা একটি ত্রুটি। এইভাবে, পার্সার কেবল ইনডেন্টেশন যাচাই করে একটি নতুন তালিকা এন্ট্রি সনাক্ত করতে পারে, যার ফলে যেভাবেই সবাই তাদের তালিকাগুলি व्यवस्थित করে।
রায়ান রেইচ

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

8

এনাম বা বিশ্বব্যাপী সংজ্ঞায়িত ভেরিয়েবলের পরিবর্তে প্রচুর পাঠ্য-ব্লক ব্যবহার করা।

ভাল না:

if (itemType == "Student") { ... }

উত্তম:

private enum itemTypeEnum {
  Student,
  Teacher
}
if (itemType == itemTypeEnum.Student.ToString()) { ... }

শ্রেষ্ঠ:

private itemTypeEnum itemType;
...
if (itemType == itemTypeEnum.Student) { ... }

বা বেস্টেস্ট: পলিমারফিজম ব্যবহার করুন।
Lstor

8

দুর্বলভাবে টাইপ করা পরামিতি বা পদ্ধতিগুলিতে মানগুলি ফেরৎ।

public DataTable GetEmployees() {...}

public DateTime getHireDate(DataTable EmployeeInfo) {...}

public void FireEmployee(Object EmployeeObjectOrEmployeeID) {...}

2
+1: আমাকে কিছু "রেস্ট" ওয়েব পরিষেবা নিয়ে কাজ করতে হবে যা ছদ্ম-এইচটিএমএল টেবিল হিসাবে সমস্ত কিছু ফিরিয়ে দেয়, এমনকি আপনি যেখানে এমন জিনিসগুলিতে পাস করেন যা একটি পরিষ্কার বাক্য ত্রুটিযুক্ত ত্রুটি। অনুমোদিত না? ইনপুট সম্পূর্ণ জাঙ্ক? ক্ষমতা ছাড়িয়ে সার্ভার? 200 (প্লাস একটি কলাম, একটি সারি সারণীতে হররিড ফর্ম্যাটে একটি বার্তা)। AAaaaaaaaargh!
ডোনাল ফেলো

7
  • একাধিক ত্রিনিরি অপারেটর একসাথে মিলেছে তাই কোনও if...elseব্লকের সাদৃশ্য না হয়ে এটি একটি if...else if...[...]...elseব্লকে পরিণত হয়
  • আন্ডারস্কোর বা উট কেসিংবিহীন দীর্ঘ পরিবর্তনশীল নাম। আমি যে কোডটি টেনে এনেছি তার উদাহরণ:$lesseeloginaccountservice
  • কোনও ফাইলের মধ্যে কয়েকশ লাইনের কোড, কোনও মন্তব্য নেই, এবং কোডটি খুব অ-সুস্পষ্ট
  • অতিরিক্ত জটিল ifবক্তব্য। কোড থেকে উদাহরণ: if (!($lessee_obj instanceof Lessee && $lessee_obj != NULL))যা আমি নীচে chompedif ($lessee_obj == null)

7

কোড গন্ধ: সেরা অভ্যাস অনুসরণ না

এই ধরণের জিনিসটি আমাকে সর্বদা উদ্বিগ্ন করে তোলে কারণ এই বিশ্বাসবাদ যে প্রত্যেকে মনে করে যে তারা একজন গড় চালক।

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

কোড দেখার সময় কোন বিষয়গুলি তত্ক্ষণাত্ অ্যালার্মের ঘন্টা বাজায়?

অনেক ভাল জিনিস উল্লেখ করা হয়েছে, এবং সাধারণভাবে মনে হয় সেরা অভ্যাস অনুসরণ না করা একটি কোড গন্ধ।

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

সর্বোত্তম অনুশীলনের একটি উদাহরণ প্রতিটি আইফ-ব্লকের সাথে কুরিগুলি ব্যবহার করা হতে পারে, এমনকি এতে কেবল একটি লাইন থাকে:

if (something) {
    // whatever
}

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

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


2
এটি পেডেন্টিক হতে পারে তবে আমার মনে হয় আপনি কী গড় বেছে নেবেন তা এটি বিবেচনা করে। আমি যেমন এটি বুঝতে পারি, বিশ্বের জনসংখ্যার ৫০% মধ্য বুদ্ধি (সংজ্ঞা অনুসারে) এর নীচে; তবে অন্যান্য গড়গুলি একইভাবে কাজ করে না। উদাহরণস্বরূপ, জনসংখ্যার (1, 1, 1, 5)
ধরুন

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

@ ইভান: হ্যাঁ, আপনি ঠিক বলেছেন। আমি সে সম্পর্কে আরও কিছু যুক্ত করেছি, আশা করি এটি সাহায্য করবে।
ভেটল

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

খুব ভাল মন্তব্য, ড্যান! আমি উত্তর দুটি শেষ লাইন যোগ।
ভেটল

6

মন্তব্যগুলি বলে যে "এটি হ'ল কারণ হ'ল ফ্রোজ সাবসিস্টেমের নকশা সম্পূর্ণভাবে উদাসীন।"

এটি একটি সম্পূর্ণ অনুচ্ছেদে অতিক্রম করে।

তারা ব্যাখ্যা করে যে নীচের রিফ্যাক্টরটি হওয়া দরকার।

তবে তা করেনি।

এখন, তাদের বলা হতে পারে যে তারা সময় বা যোগ্যতার সমস্যার কারণে তাদের বস দ্বারা এটিকে পরিবর্তন করতে পারে না, তবে এটি সম্ভবত লোকেরা ক্ষুদ্র হওয়ার কারণে।

যদি কোনও সুপারভাইজার মনে করেন যে j.random। প্রোগ্রামার একটি রিফ্যাক্টরিং করতে পারে না, তারপরে সুপারভাইজারের এটি করা উচিত।

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

সত্য গল্প. এটা আপনার হতে পারে।


6

কেউ কি এমন উদাহরণের কথা ভাবতে পারেন যেখানে কোডটি বৈধভাবে নিখুঁত পথ দ্বারা কোনও ফাইলকে উল্লেখ করা উচিত?


1
এক্সএমএল স্কিমার গণনা?
নিক টি 16

1
সিস্টেম কনফিগারেশন ফাইল। সাধারণত ./configure দ্বারা সেট করা উচিত তবে এর জন্য কোথাও ডিফল্ট মান প্রয়োজন।

4
/dev/nullএবং বন্ধুরা ঠিক আছে। তবে এমনকি জিনিসগুলি /bin/bashসন্দেহযুক্ত - আপনি যদি এমন কিছু কুকি সিস্টেম রাখেন তবে কী হবে /usr/bin/bash?
টম অ্যান্ডারসন

1
জ্যাকস-ডাব্লুএস সরঞ্জামগুলির দ্বারা উত্পন্ন ওয়েব পরিষেবা ক্লায়েন্ট কোড (জবসডব্লিউএস এবং মেট্রো, কমপক্ষে) ডাব্লুএসডিএল ফাইলের (দু'বার!) একটি হার্ডওয়ারযুক্ত পরম পথ রয়েছে। যা সম্ভবত বন্যভাবে অনুপযুক্ত কিছু /home/tom/dev/randomhacking/thing.wsdl। এটি অপরাধমূলকভাবে উন্মাদ যে এটি ডিফল্ট আচরণ।
টম অ্যান্ডারসন

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

6

সাধারণ ব্যতিক্রম ধরা:

try {

 ...

} catch {
}

অথবা

try {

 ...

} catch (Exception ex) {
}

অঞ্চল অতিরিক্ত ব্যবহার

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


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

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

5

শ্রেণি নামকরণের কনভেনশনগুলি যে তারা যে বিমূর্ততা তৈরির চেষ্টা করছে তার সম্পর্কে খারাপ ধারণা বোঝায়। বা এটি কোনও বিমূর্ততা মোটেও সংজ্ঞায়িত করে না।

একটি ভিবি ক্লাসে একটি চূড়ান্ত উদাহরণ মনে আসে আমি একবার দেখেছিলাম যে এটি শিরোনাম Dataহয়েছিল এবং প্রথম ফাইলটিতে 30,000+ লাইন দীর্ঘ ছিল । এটি আংশিক শ্রেণীর অন্তত অর্ধ ডজন অন্যান্য ফাইলে বিভক্ত ছিল। বেশিরভাগ পদ্ধতি হ'ল নামযুক্ত স্টোর করা প্রক্সের চারপাশে মোড়ানো FindXByYWithZ()

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


5

ভাষার মৌলিক কার্যকারিতা পুনরায় করে এমন ক্রিয়াগুলি। উদাহরণস্বরূপ, আপনি যদি কখনও স্ট্রিংয়ের "। দৈর্ঘ্য" বৈশিষ্ট্যটির কলের পরিবর্তে জাভাস্ক্রিপ্টে একটি "getStringLength ()" পদ্ধতি দেখতে পান তবে আপনি জানেন যে আপনি সমস্যায় পড়েছেন।


5
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...
#define ...

অবশ্যই কোনও প্রকার দলিল ছাড়াই এবং মাঝে মাঝে নেস্ট করা #defineএস


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