ডিফল্ট মান - তারা ভাল না খারাপ?


12

সাধারণভাবে ডিফল্ট মানগুলি সম্পর্কে প্রশ্ন - ডিফল্ট রিটার্ন ফাংশন মান, ডিফল্ট প্যারামিটার মান, কোনও কিছু অনুপস্থিত থাকার জন্য ডিফল্ট যুক্তি, ব্যতিক্রমগুলি পরিচালনা করার জন্য ডিফল্ট যুক্তি, প্রান্তের শর্তগুলি পরিচালনা করার জন্য ডিফল্ট যুক্তি ইত্যাদি

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

যখন আমি একটি "স্বল্প মেয়াদ" বলি - এর অর্থ এই নয় - "প্রথমে কিছু দ্রুত করুন এবং প্রযোজনায় হিট হওয়ার আগে এটি পরে রিফ্যাক্টর করুন"। না - আমি একটি প্রোডাকশন সফ্টওয়্যারটিতে হার্ডকডযুক্ত ডিফল্ট মানগুলিতে নির্ভর করার কথা বলছি। মঞ্জুরিপ্রাপ্ত - এটি কিছু সমস্যার কারণ হতে পারে তবে এটি যদি পুরো বছরটিতে কেবল একটি সমস্যা তৈরি করে।

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

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

সুতরাং আমার প্রশ্নটি হল - ডিফল্ট মানগুলি ভাল বা মন্দ। এবং যদি সেগুলি কোনও প্রযুক্তিগত debtণ হয় - তবে আপনি কীভাবে orrowণ নিতে পারবেন যাতে আপনি কীভাবে affordণ পরিশোধ করতে পারবেন তা পরিমাপ করবেন?

সত্যিই কোনও ইনপুট প্রশংসা করবে।

চিয়ার্স।

সম্পাদনা করুন:

যদি আমি বিকাশের সময় কোণগুলি কাটানোর উপায় হিসাবে ডিফল্ট মানগুলি ব্যবহার করি - এবং যদি কোণগুলি কাটিয়া ত্রুটি এবং সমস্যাগুলির ফলাফল করে - তবে এই সমস্যাগুলি থেকে পুনরুদ্ধার করার পদ্ধতিটি কী?

উত্তর:


23

কনভেনশন ওভার কনফিগারেশন ধারণাটি বুদ্ধিমান ডিফল্ট মান ব্যতীত অসম্ভব । এখানে মূল শব্দটি "বুদ্ধিমান"। ডিফল্ট মানগুলি কমপক্ষে একটি লাইব্রেরি / পরিষেবা / কাঠামোর সমস্ত ব্যবহারের জন্য কমপক্ষে 80% (যদি না হয় তবে) বুঝতে হবে।

থাম্বের সাধারণ নিয়ম:

  • যদি কোনও মান ৮০% বা তার বেশি ব্যবহারের জন্য বুদ্ধিমান হয় তবে এটি একটি ডিফল্ট মান হওয়া দরকার
  • যদি সর্বাধিক ক্ষেত্রে ব্যবহার করা হয় এমন কোনও মান থাকে না, তবে ডিফল্ট ব্যবহার করবেন না।
  • ডিফল্ট মানগুলি সেটআপ কোড থেকে বোকা ভুলগুলি প্রতিরোধ করে। যদি ডিফল্টগুলি বেশিরভাগ ক্ষেত্রেই যুক্তিসঙ্গত হয় তবে খুব কম লোকেরা কাজের কনফিগারেশনে গণ্ডগোল করে।
  • আপনি যখন ডিফল্ট ব্যবহার করেন তখন অ-মানক কনফিগারেশনগুলি আরও দৃশ্যমান হয়।
  • খারাপ অক্ষমতা চেয়ে খারাপ কোন অক্ষমতা।

মূলত, একবার আপনি ডিফল্ট কনফিগারেশন কীভাবে কাজ করে তা শিখলে আপনি কীভাবে / কখন অ-মানক কনফিগারেশন করবেন সে সম্পর্কে শিক্ষিত সিদ্ধান্ত নিতে পারেন।


আমাকে "কনফিগারেশন ওভার কনফিগারেশন" ধারণার প্রতি নির্দেশ করার জন্য ধন্যবাদ আমি এটির একটি নাম না জেনে এটি ব্যবহার করেছি। আপনি কি এই নিয়মটি ব্যাখ্যা করতে পারেন: "আপনি যখন ডিফল্ট ব্যবহার করেন তখন অ-মানক কনফিগারেশনগুলি আরও দৃশ্যমান হয়।" অনুগ্রহ.

3
@ অ্যান্ড্রু যদি সেখানে কয়েক ডজন কল Foo()এবং একটি কল আসে Foo("bar"), যে একটি কল দাঁড়ায় এবং তাই আরও দৃশ্যমান।
ম্যাথু শার্লে

1
ডান, এবং যদি কোনও এফটিপি পরিষেবার বেশিরভাগ ব্যবহার new FtpService()বিকল্প পোর্ট সেট করে এমন একটি ব্যবহার করে ( service.SetPort(12345)))
বেরিন লরিটস

43

উদাহরণস্বরূপ একটি লাইব্রেরি নিন যা এফটিপি প্রোটোকল প্রয়োগ করে। ডিফল্টরূপে এফটিপি 21 বন্দরটিতে পরিচালিত হবে বলে আশা করা হচ্ছে Now আমার যদি অন্য কোনও বন্দর দরকার হয় তবে আমাকে নির্দিষ্ট করে দিন।

ডিফল্টগুলি বুদ্ধিমান ডিফল্ট হলে পুরোপুরি ঠিক থাকে।


21
+1 টি। শেষবার কখন আপনি http://programmers.stackexchange.com:80/questions/?sort=newest&pagesize=50ঠিকানা বারে টাইপ করেছেন ?
জার্গ ডব্লু মিটাগ

1
সুতরাং, আপনি ডিফল্ট ভেরিয়েবলের স্যানিটি লেভেলটি কীভাবে পরিমাপ / অনুমান / নির্ধারণ করবেন?

5
একটি যুক্তিসঙ্গত ডিফল্ট মান চিন্তা করতে কত সময় লাগে takes
আলেকজান্ডার গেসলার

1
@ অ্যান্ড্রু, নীচে আমার উত্তর দেখুন। যদি কোনও মান ৮০% বা তার বেশি ব্যবহারের জন্য ভাল হয় তবে এটি একটি ভাল ডিফল্ট।
বেরিন লরিটস

2
@ বেরিন লরিটস: ডিফল্ট মানটি যদি নিরাপদে ব্যর্থ হওয়ার জন্য ব্যবহার করা হয় তবে আপনি যুক্তি দিতে পারেন যে এটি সময় মাত্র 1% ব্যবহার করার পরেও এটি ভাল।
ওস্টারওয়াল

18

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

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

এছাড়াও, "ক্যাচ-অল" ব্যতিক্রম হ্যান্ডলিংটি আপনি "ডিফল্ট" বলতে পারেন এমন কিছুের চেয়ে যুক্তিযুক্তভাবে ডিজাইনের ত্রুটি।


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

সুতরাং আমার মূল প্রশ্নটি যুক্ত করার জন্য - যদি আমি বিকাশের সময় কোণগুলি কাটানোর উপায় হিসাবে ডিফল্ট মানগুলি ব্যবহার করি - এবং যদি কোণগুলি কাটিয়া একটি বাগ এবং সমস্যার ফল দেয় - তবে এই সমস্যাগুলি থেকে পুনরুদ্ধারের সর্বোত্তম উপায় কোনটি?

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

1
বাগগুলি এড়ানোর জন্য ডিফল্ট ব্যবহার করার ক্ষেত্রে - আপনি কীভাবে এমন একটি ধারাবাহিক মন্তব্য ব্যবহার করবেন যাতে আপনি + f / mac + f নিয়ন্ত্রণ করতে পারেন? উদাহরণস্বরূপ, ভিজ্যুয়াল স্টুডিও আসলে TODO: or TEMP:কার্য তালিকার সাথে শুরু হওয়া কোনও মন্তব্য দেখায় । যদি আমি যদি কখনও উন্নয়নের স্বার্থে কোন কোণটি কাটছি তবে আমি সেখানে একটি টোডো রেখেছি কিনা তা নিশ্চিত করার জন্য আমি অত্যন্ত সতর্কতার সাথে চেষ্টা করব - তারপরে, একবারে একবার ফিরে আসার জন্য এবং একটি নিশ্চিত করার জন্য আমি "সমস্ত কিছু" করব এর কোনটিই কোনও গুরুত্বপূর্ণ বিল্ডে যায় না।
রেই মিয়াসাকা

ওহো, আমি বিকাশকে সহায়তা করার জন্য হার্ড-কোডড মানগুলি ব্যবহার করছি। যাইহোক, আমি কেবল বুঝতে পেরেছি যে "হার্ড-কোডেড মানগুলি" সম্ভবত আপনি "ডিফল্ট মান" না বলে শব্দটি সন্ধান করছেন।
রে মিয়াসাকা

3

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


সি ++ এর মতো বাছাই করুন আপনার পুরো পাটি
ফুঁকছে

1
@ মন্টু: আরে, লিস্প আমাকে '03-এ ফিরিয়ে দিয়েছিল।
জোয়েল ইথারটন 13

3

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

লক্ষণটি নয়, মূল কারণ পরিচালনা করুন।

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


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

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

1

ডিফল্ট মানগুলি যা যোগাযোগ প্রোটোকল / সম্মেলনের অংশ নয়, এটি মন্দ evil "অংশ নন" হওয়ার অর্থ হ'ল প্রোটোকলটি কড়া, সেগুলি নথিবদ্ধ নয় বা প্রোটোকলটি আলগা যেখানে তাদের কেবল প্রত্যাশা করা হয়নি।

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

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