আমাদের অ্যাপ্লিকেশনগুলিতে মানকগুলি হার্ডকোড করা কি কখনও ভাল ধারণা?


45

আমাদের অ্যাপ্লিকেশনগুলিতে মানকগুলি হার্ডকোড করা কি কখনও ভাল ধারণা? অথবা এই ধরণের মানগুলি পরিবর্তন করার প্রয়োজন হলে ডায়নামিকভাবে কল করা কি সর্বদা সঠিক জিনিস?


2
একটি কনফিগার প্যারামিটার আপনাকে সহায়তা করবে
গোপি

53
আপনি কখনই জানেন না কখন এর মান piপরিবর্তন হতে পারে ...
গাব

12
মানুষ, আমি অনুমান করি @ গাবের মতো লোকেরা কারণ এটি একটি "বিধি"। আপনি যদি আপনার কোডে 20 টি স্থানে 3.14 পুনরাবৃত্তি করেন এবং তারপরে আপনার যদি আরও সঠিকতার প্রয়োজন হয় তবে আপনার স্ক্রু হয়েছে। আমি বুঝতে পারিনি যে এটি সুস্পষ্ট নয়।
বিল কে

17
এটি একটু অভদ্র ছিল, @ বিল। @ গাবে স্পষ্টভাবে কৌতুক করছিল, তবে এগুলি বাদ দিয়ে, প্রশ্নটি ছিল হার্ডকোডিং বনাম কনফিগারেশন পরামিতিগুলির বিষয়ে, একাধিক স্থানে ধ্রুবক বনাম পুনরাবৃত্তি করার যাদু সংখ্যাগুলি ব্যবহার না করে।
ডেভিড কনরাড

1
হ্যাঁ, হার্ডকোডিং কখনও কখনও ভাল ধারণা হতে পারে। "সফটকোডিং" বিরোধী প্যাটার্নের উইকিপিডিয়া নিবন্ধটি দেখুন।
ব্যবহারকারী16764

উত্তর:


64

হ্যাঁ, তবে এটি স্পষ্ট করে দিন

না:

  • ধ্রুবক ব্যবহার
  • একটি বর্ণনামূলক পরিবর্তনশীল নাম ব্যবহার করুন

না:


44
কোনটি ক্লিনার, diameter = 2 * radiusবা diameter = RADIUS_TO_DIAMETER_FACTOR * radius? সত্যই কোণার কেস রয়েছে যেখানে একটি ম্যাজিক সংখ্যা আরও ভাল সমাধান হতে পারে।
জুনাস পুলক্কা

5
আমি এই উত্তরের সাথে একমত হতে পারি না। আমি programmingপন্যাসিক হওয়ার মতো প্রোগ্রামিংয়ের কথা ভাবি। আপনি কোডটির মাধ্যমে আপনার গল্পটি বলবেন এবং লোকেরা যদি যুক্তি বুঝতে না পারে তবে এটি আমার মতে আপনার কোডটিকে মূল্যহীন করে তোলে। এজন্য নামকরণের কনভেনশনগুলি ভালভাবে চিন্তা করার জন্য প্রয়োজনীয় read এছাড়াও, ম্যাজিক নম্বর ব্যবহার করার কোনও ভাল কারণ নেই। যাদু নম্বর ব্যবহার করে আপনি সমীকরণটি থেকে "কেন" মুছে ফেলুন এবং এটি বোঝা আরও কঠিন করে তুলেছেন। উদাহরণস্বরূপ: "ব্যাস = 2 * ব্যাসার্ধ" দুটি কীসের জন্য? এই "ব্যাস = RADIUS_TO_DIAMETER_FACTOR * ব্যাসার্ধ" আরও বেশি অর্থবোধ করে।
ক্রিস করুন

9
ব্যাস = 2 * ব্যাসার্ধটি সরাসরি উচ্চ বিদ্যালয়ের গণিত থেকে। "2" নামকরণ না করার কারণটি হ'ল এর জন্য অন্য যে কোনও কিছুরও মূল্য থাকতে পদার্থবিজ্ঞান বা গণিত বা উভয় ক্ষেত্রেই আইন পরিবর্তন করতে হবে। (অন্যদিকে, পাই বা প্ল্যাঙ্কস ধ্রুবকরণের নামকরণ সহজ পাঠযোগ্যতার জন্য ভাল পদক্ষেপ)।
দ্রুত_এখন

8
@ জুনাস: পিএফটি নিশ্চয়ই আপনি বলতে চাইছেন diameter = radius << 1? আমি মনে করি এটিও হতে পারে diameter = radius << RADIUS_TO_DIAMETER_BITS_TO_SHIFT
পিপীলিকা

4
কীভাবে 'কারও কারও diameter = radius.toDiameter()
কারসন মায়ার্স

26

এখন পর্যন্ত এই প্রশ্নোত্তর সম্পর্কে আমি কী অদ্ভুত মনে করি তা হ'ল কেউই আসলে "হার্ড-কোড" বা আরও গুরুত্বপূর্ণভাবে বিকল্পগুলির বিকল্পটি পরিষ্কারভাবে ব্যাখ্যা করার চেষ্টা করেনি।

TL; ড: হ্যাঁ, এটা হল মাঝে মাঝে হার্ড কোড মান একটি ভাল ধারণা, কিন্তু হিসাবে কোন সহজ নিয়ম যখন ; এটি পুরোপুরি প্রসঙ্গে নির্ভর করে।

প্রশ্নটি এটিকে মানগুলিতে সংকুচিত করে , যা আমি যাদু সংখ্যাকে বোঝাতে চাইছি , তবে তারা ভাল ধারণা কিনা সেটির উত্তর তারা আসলে কী ব্যবহার করছে তার সাথে সম্পর্কিত!

"হার্ড-কোডেড" মানগুলির বেশ কয়েকটি উদাহরণ হ'ল:

  • কনফিগারেশন মান

    যখনই আমি বিবৃতি দেখতে পাই আমি ক্রিঙ্ক করি command.Timeout = 600। 600 কেন? কে সিদ্ধান্ত নিল? এটির আগে সময় নির্ধারণ করা হয়েছিল এবং কেউ অন্তর্নিহিত পারফরম্যান্স সমস্যার সমাধানের পরিবর্তে হ্যাক হিসাবে সময়সীমা বাড়িয়েছিল? অথবা এটি আসলে প্রক্রিয়াজাতকরণের জন্য কিছু পরিচিত এবং নথিভুক্ত প্রত্যাশা?

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

  • গাণিতিক সূত্র

    সূত্রগুলি সাধারণত বেশ স্থির থাকে, যেমন অভ্যন্তরের ধ্রুবক মানগুলির প্রকৃতিটি বিশেষভাবে গুরুত্বপূর্ণ নয়। একটি পিরামিডের আয়তন (1/3) বি * এইচ। 1 বা 3 কোথা থেকে এসেছে তা কি আমাদের যত্নশীল? আসলে তা না. পূর্ববর্তী একজন মন্তব্যকারী যথাযথভাবে উল্লেখ করেছেন যে diameter = radius * 2এটি সম্ভবত এর চেয়ে ভাল diameter = radius * RADIUS_TO_DIAMETER_CONVERSION_FACTOR- তবে এটি একটি মিথ্যা দ্বৈতত্ত্ব।

    এই ধরণের দৃশ্যের জন্য আপনার কী করা উচিত তা একটি ফাংশন তৈরি করছে । আপনি কীভাবে সূত্রটি নিয়ে এসেছিলেন তা আমার জানতে হবে না তবে এটি কীসের জন্য তা এখনও আমার জানা দরকার । যদি উপরে লেখা কোনও বাজে কথা পরিবর্তে আমি লিখি volume = GetVolumeOfPyramid(base, height)তবে হঠাৎ করেই সবকিছু অনেক বেশি পরিষ্কার হয়ে যায় এবং ফাংশনের অভ্যন্তরে যাদুর সংখ্যা থাকা পুরোপুরি ঠিক আছে ( return base * height / 3কারণ) এটি স্পষ্টত যে তারা সূত্রের অংশ মাত্র part

    এখানে মূল কীটি অবশ্যই ছোট এবং সাধারণ ফাংশনগুলি রয়েছে। এটি 10 ​​টি আর্গুমেন্ট এবং 30 লাইনের গণনার সাথে ফাংশনগুলির জন্য কাজ করে না। সেক্ষেত্রে ফাংশন রচনা বা ধ্রুবক ব্যবহার করুন।

  • ডোমেন / ব্যবসায়ের নিয়ম

    এইটি সর্বদা ধূসর অঞ্চল কারণ এটি ঠিক মানটি নির্ভর করে। বেশিরভাগ সময়, এই নির্দিষ্ট ম্যাজিক নম্বরগুলি ধ্রুবকগুলিতে পরিণত হওয়ার প্রার্থী, কারণ এটি প্রোগ্রামের যুক্তিটিকে জটিল না করে প্রোগ্রামটিকে বুঝতে সহজ করে তোলে। if Age < 19বনাম পরীক্ষা বিবেচনা করুন if Age < LegalDrinkingAge; আপনি সম্ভবত ধ্রুবক ছাড়া কি ঘটছে তা বুঝতে পারেন , তবে বর্ণনামূলক শিরোনামের সাথে এটি আরও সহজ it's

    এই হতে পারে এছাড়াও ফাংশন বিমূর্ততা জন্য প্রার্থীদের হয়ে, উদাহরণস্বরূপ function isLegalDrinkingAge(age) { return age >= 19 }। কেবলমাত্র এটি হ'ল প্রায়শই আপনার ব্যবসায়িক যুক্তি তার চেয়ে অনেক বেশি সংশ্লেষিত হয় এবং প্রতিটি 20-30 পরামিতি সহ কয়েক ডজন ফাংশন লিখতে শুরু করার অর্থটি বোধগম্য হয় না। যদি অবজেক্টস এবং / অথবা ফাংশনগুলির উপর ভিত্তি করে যদি কোনও স্পষ্ট বিমূর্ততা না থাকে তবে ধ্রুবকদের অবলম্বন করা ঠিক।

    সতর্কীকরণ, যদি আপনি ট্যাক্স বিভাগের জন্য কাজ করছি, এটা সত্যিই রূপান্তরিত হবে সত্যিই দুর্বহ ও সততার লিখতে অর্থহীন AttachForm(FORM_CODE_FOR_SINGLE_TAXPAYER_FILING_JOINTLY_FOR_DEPRECIATION_ON_ARMPIT_HAIR)। আপনি এটি করতে যাচ্ছেন না, আপনি যাচ্ছেন AttachForm("B-46")কারণ যে একক বিকাশকর্তা যিনি কখনও কাজ করেছেন বা যে কোনও সময় কাজ করবে সেখানে জানতে হবে যে "বি--46" হল একক করদাতাকে দায়ের করা ব্লাহ ব্লাহ ব্লাহর ফর্ম কোড - ফর্ম কোডগুলি ডোমেনেরই একটি অংশ, এগুলি কখনই পরিবর্তন হয় না, তাই এগুলি আসলে ম্যাজিক সংখ্যা নয়।

    সুতরাং আপনার ব্যবসায়ের যুক্তিতে অবিচ্ছিন্নভাবে ব্যবহার করতে হবে; মূলত আপনাকে বুঝতে হবে যে "ম্যাজিক নম্বর" আসলে একটি যাদু নম্বর বা এটি ডোমেনের একটি সুপরিচিত দিক কিনা aspect যদি এটি ডোমেন হয় তবে যদি এটির পরিবর্তনের সত্যিকারের ভাল সম্ভাবনা না থাকে তবে আপনি এটিকে সফট কোড দিবেন না।

  • ত্রুটি কোড এবং স্থিতি পতাকা

    এগুলি কখনও হার্ড-কোডে ঠিক হয় না , কারণ যে কোনও দরিদ্র জারজ যাঁর কাছে আঘাত পেয়েছিল তারা Previous action failed due to error code 46আপনাকে বলতে পারে। যদি আপনার ভাষা এটি সমর্থন করে তবে আপনার একটি গণনার ধরন ব্যবহার করা উচিত। অন্যথায়, আপনার কাছে সাধারণত একটি নির্দিষ্ট ত্রুটির ধরণের বৈধ মান উল্লেখ করে ধ্রুবক দ্বারা পূর্ণ একটি সম্পূর্ণ ফাইল / মডিউল থাকে।

    আমাকে কখনও return 42কোনও ত্রুটি হ্যান্ডলারটি দেখতে দেবেন না , ক্যাপিচ? কোন অজুহাত নেই.

আমি সম্ভবত বেশ কয়েকটি পরিস্থিতি ছেড়ে দিয়েছি তবে আমি মনে করি এটি বেশিরভাগ ক্ষেত্রেই অন্তর্ভুক্ত।

সুতরাং, হ্যাঁ, এটি কখনও কখনও হার্ড কোড স্টাফের কাছে গ্রহণযোগ্য অনুশীলন। এটি সম্পর্কে অলসতা করবেন না; এটি সাধারণ পুরানো slিলে কোডের চেয়ে সচেতন সিদ্ধান্ত হওয়া উচিত।


ভাল ভাঙ্গনের জন্য ধন্যবাদ! - বেশিরভাগ লোকেরা "এনভায়রনমেন্ট কনফিগারেশন" যুক্ত করা সমস্ত অপশনগুলির মধ্যে ভাবেন না - আমি মনে করি এগুলি এড়ানো উচিত (হার্ড-কোডেড নয়), কারণ বেশিরভাগ ডেটা কনফিগার ফাইল বা ডাটাবেসে রাখা উচিত। এটি এমভিসি বা এমভিভিএমের মূল ভিত্তি "ডেটা এবং লজিককে পৃথক রাখার" প্রধানের অনুসরণ করে। স্ট্রিং টেস্টসারভার = = "ফু"; স্ট্রিং ProdServerVal = "বার";
এম

7

কোনও সংখ্যাকে শনাক্তকারী নির্ধারণের বিভিন্ন কারণ রয়েছে।

  • যদি নম্বরটি পরিবর্তিত হতে পারে তবে এর একটি সনাক্তকারী থাকা উচিত। 9 টির প্রতিটি দৃষ্টান্ত অনুসন্ধান করার চেয়ে এটি NUMBER_OF_PLANETS সন্ধান করা এবং এটি 8 এ পরিবর্তিত করা উচিত কিনা তা বিবেচনা করা খুব সহজ ( আগে থেকে ভবিষ্যদ্বাণী করা একটি কঠিন জিনিস।)
  • সংখ্যাটি যদি কোনওভাবেই টাইপ করা শক্ত হয়। পাই এর মতো ধ্রুবকগুলির পক্ষে এটি বেশিরভাগ জায়গায় পুনরায় টাইপ করা, সম্ভবত সঠিকভাবে না করে তার চেয়ে বেশি সুনির্দিষ্ট সংজ্ঞা দেওয়া ভাল।
  • সংখ্যাটি যদি বিভিন্ন জায়গায় ঘটে থাকে। সংযুক্ত ফাংশনগুলিতে আপনাকে 45 টির দুটি ব্যবহারের দিকে নজর দেওয়া উচিত নয় এবং ভাবতে হবে যে সেগুলি একই জিনিস mean
  • অর্থটি তাত্ক্ষণিকভাবে স্বীকৃতিযোগ্য না হলে। এটি ধরে নেওয়া নিরাপদ যে প্রত্যেকে 3.14159265 ... কী তা জানে। এটি অনুমান করা নিরাপদ নয় যে প্রত্যেকে মহাকর্ষীয় ধ্রুবক, বা এমনকি পাই / 2 চিনতে পারবে। ("এখানে প্রত্যেকে" সফ্টওয়্যারটির প্রকৃতির উপর নির্ভরশীল Syste দেখুন যে এটির ১.১ বা তার চেয়ে বেশি এটির উপরে কাজ করা উচিত এমন কারও পক্ষে পুরোপুরি স্ব-বর্ণনামূলক)
  • প্রসঙ্গটি যদি সনাক্তযোগ্য না হয়। প্রত্যেকেই জানেন যে এক ঘন্টার মধ্যে minutes০ মিনিট রয়েছে, তবে পরিমাণটি একটি সময় মূল্য বা হারের মান বলে কোনও তাত্ক্ষণিক ইঙ্গিত নেই যদি 60 দ্বারা গুণ বা ভাগ করা অস্পষ্ট হতে পারে।

এটি আমাদের হার্ড-কোডিং আক্ষরিক জন্য মাপদণ্ড দেয়। এগুলি অপরিবর্তনীয়, টাইপ করা শক্ত নয়, কেবলমাত্র এক জায়গায় বা প্রসঙ্গে ঘটেছে এবং স্বীকৃত অর্থ সহ। 0 টি ARRAY_BEGINNING হিসাবে উদাহরণস্বরূপ বা 1 টি ARRAY_INCREMENT হিসাবে সংজ্ঞায়িত করার কোনও অর্থ নেই।


5

অন্যান্য উত্তরের সংযোজন হিসাবে। সম্ভব হলে স্ট্রিংয়ের জন্য ধ্রুবক ব্যবহার করুন। অবশ্যই, আপনি চান না

const string server_var="server_var";

তবে তোমার উচিত ছিল

const string MySelectQuery="select * from mytable;";

(ধরে নিলাম আপনার কাছে আসলে একটি কোয়েরি রয়েছে যেখানে আপনি সর্বদা নির্দিষ্ট টেবিল থেকে সমস্ত ফলাফল পেতে চান)

এটির বাইরে 0 (সাধারণত) ব্যতীত অন্য কোনও সংখ্যার জন্য ধ্রুবক ব্যবহার করুন। আপনার যদি 255 এর অনুমতি বিটমাস্কের প্রয়োজন হয় তবে ব্যবহার করবেন না

const int 8th_bit=255; //or some other obscure naming scheme that equates to 255.

পরিবর্তে ব্যবহার

const int AllowGlobalRead=255;

অবশ্যই, ধ্রুবকগুলির সাথে, কখন গণক ব্যবহার করতে হবে তা জেনে নিন। উপরের কেসটি সম্ভবত একটির মধ্যে খুব ভাল ফিট হবে।


typedaf enum {state_0 = 0, state_1 = 1, state_2 = 2, ...} ... হাসবেন না, আমি দেখেছি। ভেজা মাছ দিয়ে মাথার চারপাশে ওই ব্যক্তিকে ধাক্কা!
দ্রুত_ এখন

@ চূড়ান্তভাবে অবশ্যই আপনি আরও কিছু চাইবেনtypedef enum {init_state=0, parse_state=1, evaluation_state=2, ... }
আর্লজ

6
THIS_NAMING_CONVENTION_IS_RECOMMENDED_FOR_CONSTANTS
স্টুপার ইউজার

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

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

4

এটি নির্ভর করে আপনি হার্ডকডিং কী বিবেচনা করছেন। যদি আপনি কোনও এবং সমস্ত হার্ডকোডযুক্ত জিনিস এড়াতে চেষ্টা করেন তবে আপনি সফটকোডিং অঞ্চলটিতে পৌঁছেছেন এবং এমন একটি সিস্টেম তৈরি করেন যা কেবল স্রষ্টা পরিচালনা করতে পারেন (এবং এটি চূড়ান্ত হার্ডকোড)

প্রচুর জিনিসগুলিকে যেকোন যুক্তিসঙ্গত কাঠামোর মধ্যে হার্ডকড করা হয় এবং তারা কাজ করে। অর্থাত্ আমার কোনও সি # অ্যাপ্লিকেশন (স্ট্যাটিক শূন্যস্থানীয়) প্রবেশের পয়েন্টটি পরিবর্তন করতে সক্ষম না হওয়ার কোনও প্রযুক্তিগত কারণ নেই, তবে হার্ডকোডিং যা কোনও ব্যবহারকারীর জন্য কোনও সমস্যা তৈরি করে না (মাঝে মাঝে এসও প্রশ্ন বাদে )

আমি যে থাম্বটি ব্যবহার করি তার নিয়মটি হ'ল পুরো সিস্টেমের অবস্থাকে প্রভাবিত না করে যা কিছু পরিবর্তন করতে পারে এবং পরিবর্তন করতে পারে তা বিভ্রান্তিকর হওয়া উচিত।

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

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

সুতরাং, নীচের লাইনটি, কোনও জিনিসকে হার্ডকোড করা উচিত কিনা তা দুটি ভেরিয়েবলের কাজ:

  • মান পরিবর্তন হবে
  • মান পরিবর্তন কীভাবে সিস্টেমকে প্রভাবিত করবে

4

আমাদের অ্যাপ্লিকেশনগুলিতে মানকগুলি হার্ডকোড করা কি কখনও ভাল ধারণা?

আমি হার্ডকোডগুলি কেবলমাত্র মানগুলি নির্দিষ্টকরণে নির্দিষ্ট করে (স্পেসিফিকেশনের চূড়ান্ত প্রকাশের ক্ষেত্রে) উদাহরণস্বরূপ, যেমন HTTP ঠিক আছে প্রতিক্রিয়া সর্বদা 200(এটি আরএফসিতে পরিবর্তিত না হলে) থাকবে, সুতরাং আপনি দেখতে পাবেন (আমার কয়েকটি কোডে) ) ধ্রুবকগুলির মতো:

public static final int HTTP_OK = 200;

অন্যথায়, আমি সম্পত্তি ফাইলগুলিতে ধ্রুবক সঞ্চয় করি।

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


3
  • যদি মানটি পরিবর্তিত হতে পারে এবং সত্যই পরিবর্তিত হতে পারে, তবে যতক্ষণ সম্ভব জড়িত প্রচেষ্টা প্রত্যাশিত রিটার্ন অতিক্রম না করে যতক্ষণ সম্ভব এটি সফট-কোড করুন
  • কিছু মান নরম কোডেড হতে পারে না ; সেই (বিরল) ক্ষেত্রে জোনাথনের নির্দেশিকা অনুসরণ করুন

2

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

ধ্রুবকগুলি বের করার পক্ষে কাজ করা কেবল একটি ভাল ধারণা, এটিকে কিছু বোকা নিয়ম হিসাবে বিবেচনা করবেন না, এটিকে আরও ভাল কোড করার সুযোগ হিসাবে ভাবেন।

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

ডেটা উত্তোলন না করার জন্য আমি এখনও একটি একক সুবিধা দেখতে পেয়েছি।


2

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

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


হ্যাঁ, সম্ভবত, তবে google.com/moon
রেসিডিয়াম um

1

ভাল এটি নির্ভর করে যদি আপনার ভাষা সংকলিত হয়। যদি এটি সংকলিত না হয় তবে এটি কোনও বড় বিষয় নয়, আপনি কেবল উত্স কোডটি সম্পাদনা করুন, এমনকি এটি কোনও নন প্রোগ্রামারের জন্য কিছুটা সূক্ষ্ম হবে।

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

গতিশীলভাবে তার পরিবর্তনশীল পরিবর্তন করতে আপনাকে কিছু স্লাইডার বা ইন্টারফেস তৈরি করার দরকার নেই, তবে আপনি যা করতে পারেন তা একটি পাঠ্য ফাইল।

উদাহরণস্বরূপ আমার ওগ্রে প্রকল্পের সাথে আমি একটি কনফিগার ফাইলে লিখেছি এমন একটি ভেরিয়েবল লোড করতে আমি সর্বদা কনফিগার ফাইল ব্যবহার করি।


1

দুটি অনুষ্ঠান যেখানে ধ্রুবক রয়েছে (আমার মতে কমপক্ষে) ঠিক আছে:

  1. ধ্রুবকগুলি যা অন্য কোনও কিছুর সাথে সম্পর্কিত নয়; আপনি যখনই অন্য কোনও পরিবর্তন না করেই এই ধ্রুবকগুলি পরিবর্তন করতে পারেন। উদাহরণ: গ্রিড কলামের ডিফল্ট প্রস্থ।

  2. একেবারে অপরিবর্তনীয়, নির্ভুল, সুস্পষ্ট ধ্রুবক, যেমন "প্রতি সপ্তাহে দিনের সংখ্যা" " একটি ধ্রুবক সঙ্গে days = weeks * 7প্রতিস্থাপন খুব কমই মান প্রদান করে।7DAYS_PER_WEEK


0

আমি জোনাথনের সাথে সম্পূর্ণরূপে একমত নই তবে সমস্ত বিধি হিসাবে ব্যতিক্রম রয়েছে ...

"বর্ণনায় ম্যাজিক নম্বর: কোডে ম্যাজিক নম্বর"

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

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

এটি বলেছিল, যখন আপনি এটি সম্পর্কে চিন্তা করেন ... এটি স্পষ্ট করে তোলা সম্পর্কে অনেক কিছুই ...


0

যদি আপনি পৃথিবীর মহাকর্ষীয় ধ্রুবকের মান হার্ডকোডিং করে থাকেন তবে নুনের যত্ন নেই। আপনি যদি নিজের প্রক্সি সার্ভারের আইপি ঠিকানাটি হার্ডকোড করেন তবে আপনি সমস্যার জন্য রয়েছেন।


1
পৃথিবীর মহাকর্ষীয় ধ্রুবকটির জন্য আপনার আরও সূক্ষ্মতার প্রয়োজন হতে পারে, তাই বেশ কয়েকবার হার্ডকোডিংয়ের ফলে সমস্যা দেখা দিতে পারে।
ব্যবহারকারী 281377

1
পিটার নুন? হারম্যানের হার্মিটস থেকে?
ডেভিড কনরাড

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

0

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

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