হার্ডকোডিং স্ট্রিংগুলি যা কখনই পরিবর্তন হবে না


39

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

ক্রিয়াপদ সংমিশ্রনের জন্য অ্যালগরিদমটি ক্রিয়াপদের 17-বা-এর ক্ষেত্রে খুব সহজ এবং প্রতিটি ক্ষেত্রে একটি নির্দিষ্ট প্যাটার্নে চলে; সুতরাং, এই 17 টি শ্রেণির সংযোগ প্রত্যয় স্থির এবং খুব শীঘ্রই কোনও পরিবর্তন হবে না। উদাহরণ স্বরূপ:

// Verbs #1 : (model: "chanter")
    terminations = {
        ind_imp: ["ais", "ais", "ait", "ions", "iez", "aient"],
        ind_pre: ["e", "es", "e", "ons", "ez", "ent"],
        ind_fut: ["erai", "eras", "era", "erons", "erez", "eront"],
        participle: ["é", "ant"]
    };

ফরাসী ভাষায় ক্রিয়াপদের সবচেয়ে সাধারণ শ্রেণীর জন্য এগুলি প্রতিচ্ছবিযুক্ত প্রত্যয়।

ক্রিয়া (অনিয়ম) এর অন্যান্য শ্রেণি রয়েছে, যার সংঘাতগুলি সম্ভবত পরবর্তী শতাব্দী বা দু'টির জন্য স্থির থাকবে। যেহেতু তারা অনিয়মিত, তাদের সম্পূর্ণ সংযোগগুলি অবশ্যই স্থিতিশীলভাবে অন্তর্ভুক্ত করা উচিত, কারণ এগুলি নির্ভরযোগ্যভাবে কোনও নিদর্শন থেকে সংহত করা যায় না (কেবলমাত্র [আমার গণনা অনুসারে) 32 অনিয়মও রয়েছে। উদাহরণ স্বরূপ:

// "être":
    forms = {
        ind_imp: ["étais", "étais", "était", "étions", "étiez", "étaient"],
        ind_pre: ["suis", "es", "est", "sommes", "êtes", "sont"],
        ind_fut: ["serai", "seras", "sera", "serons", "serez", "seront"],
        participle: ["été", "étant"]
    };

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

আমার উদ্বেগটি হ'ল জিনিসগুলি "সঠিক" উপায়ে এবং কিছু তথ্য উত্সকে ডিসরিয়াল করে, আমি কেবল সেই সমস্যাটিকেই জটিল করি নি যা জটিল হওয়ার দরকার নেই , তবে আমি সম্পূর্ণ লক্ষ্যটিকে পুরোপুরি ফিরে পেয়েছি অ্যালগরিদমিক পদ্ধতির: একটি ডেটা উত্স ব্যবহার না করার জন্য ! সি # তে, আমি এই স্ট্রিংগুলিকে এক্সএমএলে স্টাফ করা এবং একটি তৈরির পরিবর্তে একটি অঙ্কিত টাইপ বা অন্য কোনও কিছু রাখতে কেবল namespace Verb.Conjugation(যেমন class Irregular) এর অধীনে একটি শ্রেণি তৈরি করতে পারি class IrregularVerbDeserializer

সুতরাং প্রশ্ন: অ্যাপ্লিকেশন চলাকালীন সময়ে হার্ড-কোডযুক্ত স্ট্রিংগুলির পরিবর্তন খুব কমই সম্ভব? অবশ্যই আমি 100% গ্যারান্টি দিতে পারি না যে তারা পরিবর্তন করবে না, তবে ঝুঁকি বনাম ব্যয়টি আমার চোখে ওজন করার জন্য প্রায় নগণ্য - হার্ডকোডিংটি এখানে আরও ভাল ধারণা।

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


26
আপনি কি ভবিষ্যতে ফরাসী ছাড়া অন্য কোনও ভাষার জন্য এই সফটওয়্যারটি ব্যবহার করতে চান?

10
অ্যালগরিদমিক পদ্ধতি বা না, এটি স্পষ্ট যে আপনাকে এই 32 * 20 টি স্ট্রিংকে হার্ডকোড করতে হবে (এবং আরও বেশি ভাষা যুক্ত করার সময় আরও) এবং কেবল আসল প্রশ্নটি সেগুলি কোথায় রাখা উচিত is আপনার কাছে যেখানেই সবচেয়ে সুবিধাজনক মনে হবে আমি তা বেছে নেব, যা মনে হয় আপাতত কোডের মধ্যে থাকতে পারে। আপনি এগুলি সর্বদা পরে এলোমেলো করতে পারেন।
Ixrec

1
@ ক্রিসক্রাইফাইস এটি আমার কাছে বেশ সুন্দর বলে মনে হচ্ছে। এটার জন্য যাও.
Ixrec

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

1
+1 টি। -1০-১০০ বছরের মধ্যে ব্যয়টি বিদ্যমান থাকবে না বা পুরোপুরি আরও ভাল সংস্করণ দ্বারা প্রতিস্থাপন করা হয়েছে তা উল্লেখ করার দরকার নেই।
হ্যারিসি বার্ন

উত্তর:


56

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

আমার কাছে মনে হচ্ছে আপনি নিজের প্রশ্নের উত্তর দিয়েছেন।

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

আমি এটিকে আরও জটিল করার জন্য বাধ্যতামূলক কারণ না পাওয়া পর্যন্ত আমি প্রয়োগের সবচেয়ে সহজ পদ্ধতির সাথে যাব।


থ্যাঙ্কস ড্যান, এটাই আমি যা অনুমান করেছি। এটির জন্য এক্সএমএল স্কিমা লেখার জন্য, ট্র্যাক রাখতে আরও একটি ফাইল থাকা এবং ডেটা ডিজিটালাইজ করার জন্য একটি ইন্টারফেস লেখার জন্য মনে হয়েছিল যে ওভারকিলটি কেবল সেখানে অনেকগুলি স্ট্রিং নেই, এবং এটি প্রাকৃতিক ভাষা হওয়ায় এটি খুব সম্ভবত পরিবর্তিত হওয়ার সম্ভাবনা নেই পরবর্তী 100 বছরে ভাগ্যক্রমে, আজকাল প্রোগ্রামিং ভাষাগুলিতে আমাদের কাছে এই কাঁচা ডেটাটিকে দুর্দান্ত চেহারার ইন্টারফেসের পিছনে বিমূর্ত করার অভিনব উপায় রয়েছে, উদাহরণস্বরূপ, French.Verb.Irregular.Etreএতে আমার প্রশ্ন থেকে ডেটা থাকবে। আমি মনে করি এটি ঠিক আছে!)
ক্রিস সাইরেফাইস

3
+1 এখানে রুবি শিবির থেকে, আমি হার্ডকোডিং স্টাফগুলি শুরু করব এবং এটি প্রয়োজনীয় হিসাবে কনফিগারেশনে নিয়ে যাব। জিনিসগুলি কনফিগারযোগ্য করে অযত্নে আপনার প্রকল্পকে ওভার ইঞ্জিনিয়ার করবেন না। এটি আপনাকে ধীর করে দেয়।
ওভারব্রিড

2
দ্রষ্টব্য: কিছু গ্রুপের "হার্ডকোডিং" এর আলাদা সংজ্ঞা রয়েছে, সুতরাং সচেতন হন যে এই শব্দটির অর্থ একাধিক জিনিস। একটি স্বীকৃত অ্যান্টি-প্যাটার্ন রয়েছে যেখানে আপনার হার্ডড কোডগুলি কোনও ফাংশনের স্টেটমেন্টগুলিতে মান দেয়, আপনার যেমন ( if (num == 0xFFD8)) থাকে তেমন ডেটা স্ট্রাকচার তৈরি করার পরিবর্তে । সেই উদাহরণটি if (num == JPEG_MAGIC_NUMBER)পাঠযোগ্যতার কারণে প্রায় সব ক্ষেত্রেই এমন কিছু হওয়া উচিত । আমি কেবল এটি উল্লেখ করেছি কারণ "হার্ডকোডিং" শব্দটি প্রায়শই লোকের ঘাড়ে চুল তোলে (আমার মতো) শব্দের এই বিকল্প অর্থের কারণে।
আম্মন

@ কর্টআ্যামমন জেপিগের প্রচুর যাদু সংখ্যা রয়েছে। নিশ্চয়ই JPEG_START_OF_IMAGE_MARKER?
ব্যবহারকারী 253751

@ মিম্বিস আপনার ধ্রুবক নামকরণের পছন্দটি আমার চেয়ে সম্ভবত ভাল।
কর্ন অ্যাম্মন

25

আপনি ভুল সুযোগে যুক্তি দিচ্ছেন।

আপনি কেবল পৃথক ক্রিয়াগুলি হার্ডকড করেননি। আপনি ভাষা এবং এর নিয়মগুলি হার্ডকোড করেছেন । এর পরিবর্তে এর অর্থ হ'ল আপনার অ্যাপ্লিকেশনটি অন্য কোনও ভাষার জন্য ব্যবহার করা যাবে না এবং অন্যান্য নিয়মের সাহায্যে বাড়ানো যাবে না।

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

  • আপনি কি নিকট ভবিষ্যতে 100% এর কাছাকাছি একটি নির্দিষ্টতা নিয়ে অ্যাপটিকে অন্য ভাষাগুলিতে প্রসারিত করবেন? যদি তা হয় তবে আপনার অ্যাপ্লিকেশনের প্রধান অংশটি আবার লিখতে বাধ্য করার পরিবর্তে আপনার এখন জেএসএন বা এক্সএমএল ফাইলগুলিতে (শব্দগুলির জন্য শব্দগুলির অংশ ইত্যাদি) এবং গতিশীল ভাষাগুলি (নিয়মের জন্য ) রফতানি করা উচিত ছিল ।

  • বা কেবলমাত্র একটি সামান্য সম্ভাবনা রয়েছে যে অ্যাপটি ভবিষ্যতে কোথাও প্রসারিত হবে, এক্ষেত্রে YAGNI নির্দেশ দেয় যে সরলতম পদ্ধতির (আপনি এখন যেটি ব্যবহার করছেন) এটি আরও ভাল?

উদাহরণ হিসাবে, মাইক্রোসফ্ট ওয়ার্ডের বানান পরীক্ষক নিন। আপনি কতগুলি জিনিস হার্ডকডযুক্ত বলে মনে করেন?

আপনাকে একটি পাঠ্য প্রসেসর তৈরির হয়, আপনি হার্ডকোডেড নিয়ম এবং এমনকি হার্ডকোডেড শব্দের সঙ্গে একটি সহজ বানান ইঞ্জিন দ্বারা শুরু করতে পারে: if word == "musik": suggestSpelling("music");। দ্রুত, আপনি শব্দ সরিয়ে শুরু করবেন, তারপরে আপনার কোডের বাইরে নিজেকে শাসন করবেন। অন্যথায়:

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

যেমন আপনি নিজেকে হাইলাইট করেছেন:

ফরাসি ভাষার খুব কম নিয়ম জাপানিদের ক্ষেত্রে প্রয়োগ করা যেতে পারে।

যত তাড়াতাড়ি আপনি কোনও ভাষার জন্য নিয়মগুলি হার্ডকোড করার সাথে সাথে প্রত্যেকটির জন্য বিশেষত প্রাকৃতিক ভাষার জটিলতার কারণে আরও বেশি সংখ্যক কোডের প্রয়োজন হবে।

আর একটি বিষয় হ'ল আপনি কোডের মাধ্যমে না থাকলে কীভাবে এই বিভিন্ন বিধিগুলি প্রকাশ করেন। শেষ পর্যন্ত, আপনি দেখতে পারেন যে কোনও প্রোগ্রামিং ভাষা তার পক্ষে সেরা সরঞ্জাম। সেক্ষেত্রে আপনার যদি ইঞ্জিনটি পুনরায় সংশোধন না করে প্রসারিত করার প্রয়োজন হয় তবে গতিশীল ভাষাগুলি একটি ভাল বিকল্প হতে পারে be


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

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

2
দ্রষ্টব্য: আপনি যদি আরও ভাষা যুক্ত করতে চান তবে এর দ্বারা বোঝানো হয় না যে ভাষাগুলি একটি কনফিগার ফাইলে স্থানান্তরিত করুন! আপনার সমানভাবে ভাল LanguageProcessorএকাধিক সাবক্লাস সহ একটি ক্লাস থাকতে পারে । (কার্যকরভাবে, "কনফিগারেশন ফাইল" আসলে একটি শ্রেণি)
ব্যবহারকারী 253751

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

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

15

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

উদাহরণ স্বরূপ:

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

  • কনফিগারেশন ফাইলগুলিতে সংযোগের স্ট্রিং, বাহ্যিক পরিষেবাগুলিতে ইউআরএল সংগ্রহ করা। এটি আপনাকে বিভিন্ন পরিবেশে বিভিন্ন কনফিগারেশন ব্যবহার করতে এবং ফ্লাইতে কনফিগারেশনগুলি পরিবর্তন করতে দেয় কারণ আপনার অ্যাপ্লিকেশনটির বাহ্যিক কারণে তাদের পরিবর্তনের প্রয়োজন হতে পারে।

  • একটি বানান পরীক্ষক যার বিপরীতে চেক করতে শব্দের অভিধান রয়েছে। আপনি প্রোগ্রাম যুক্তি পরিবর্তন না করে নতুন শব্দ এবং ভাষা যুক্ত করতে পারেন।

তবে কনফিগারেশনে এক্সট্রাক্ট করার ক্ষেত্রেও একটি জটিল ওভারহেড রয়েছে এবং এটি সর্বদা অর্থপূর্ণ নয়।

স্ট্রিংগুলি হার্ডকোড করা যেতে পারে যখন প্রোগ্রামের যুক্তি পরিবর্তন না করে আসল স্ট্রিংটি পরিবর্তন করা যায় না।

উদাহরণ:

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

আপনার ক্ষেত্রে আমি মনে করি এটি পরিষ্কার হয়ে গেছে যে শব্দগুলি প্রোগ্রাম লজিকের একটি সংহত অঙ্গ (যেহেতু আপনি নির্দিষ্ট শব্দের জন্য নির্দিষ্ট নিয়মের সাহায্যে একটি কনজুগেটর তৈরি করছেন), এবং এই শব্দগুলি একটি বাহ্যিক ফাইলে তোলার কোনও মূল্য নেই।

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


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


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

5

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

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


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

1
@ChrisCirefice ":। ঠিক আমার বিন্দু
ডক ব্রাউন

2

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

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


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

0

গুরুত্বপূর্ণ অংশটি উদ্বেগের বিচ্ছেদ। আপনি কীভাবে এটি অর্জন করবেন তা কম প্রাসঙ্গিক। অর্থাত্ জাভা ঠিক আছে।

বিধিগুলি কীভাবে প্রকাশ করা হয় তার স্বাধীনভাবে, আপনার কোনও বিধি পরিবর্তন করার ভাষা যুক্ত করা উচিত: আপনার কতগুলি কোড এবং ফাইল সম্পাদনা করতে হবে?

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

একটি পরিষ্কার জাভানোস্টিক ইন্টারফেসের পিছনে আমি একটি সাধারণ জাভা এপিআই দিয়ে শুরু করব - যেমন আপনার উভয় ক্ষেত্রেই প্রয়োজন। আপনি যদি চান তবে আপনি প্রথমে কোনও এক্সএমএল ফাইল দ্বারা সমর্থিত সেই ইন্টারফেসের একটি বাস্তবায়ন যুক্ত করতে পারেন তবে তাত্ক্ষণিকভাবে (বা কখনও) সমস্যাটি সামাল দেওয়ার প্রয়োজন দেখছি না।

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