একক চরিত্রের ধ্রুবকগুলি কি আক্ষরিক চেয়ে ভাল?


127

আমি সম্প্রতি এমন একটি শ্রেণীর মুখোমুখি হয়েছি যা ধ্রুবক হিসাবে প্রতিটি একক চরিত্রকে সরবরাহ করে; থেকে সবকিছু COMMAকরতে BRACKET_OPEN। এটি প্রয়োজন ছিল কিনা তা ভাবছেন; আমি একটি "নিবন্ধ" পড়েছি যা পরামর্শ দেয় যে এটি একক-চরিত্রের অক্ষরে অক্ষরে টানতে সহায়ক হতে পারে। সুতরাং, আমি সন্দেহবাদী।

ধ্রুবকগুলি ব্যবহারের প্রধান আবেদন হ'ল পরিবর্তনের প্রয়োজন হলে তারা রক্ষণাবেক্ষণকে হ্রাস করুন। কিন্তু কবে আমরা কমাতে প্রতিনিধিত্ব করতে ',' এর চেয়ে আলাদা প্রতীক ব্যবহার শুরু করব?

আক্ষরিক পরিবর্তে ধ্রুবক ব্যবহার করার জন্য আমি দেখছি কারণ কোডটি আরও পঠনযোগ্য। তবে কি city + CharacterClass.COMMA + state(উদাহরণস্বরূপ) এর চেয়ে বেশি পাঠযোগ্য city + ',' + state?

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



33
হুম ... এটি বিভিন্ন লোকেলের জন্য কার্যকর হতে পারে, সম্ভবত? উদাহরণস্বরূপ, কিছু ভাষা ইংলিশের স্ট্যান্ডার্ড (বা আরও ভাল দেখাচ্ছে এবং ) এর পরিবর্তে গিলিটস (অ্যাঙ্গেল কোটস «এবং ») উদ্ধৃতি চিহ্ন হিসাবে ব্যবহার করে । এটি বাদে, এটি কেবল যাদু চরিত্রের সেটগুলির মতো শোনাচ্ছে। দুই স্থানেই ধরে নেওয়া যাক নামক এবং , এটা যে সম্ভব হতে পারে , যখন হতে পারে । "CharacterClassenglishCharsfrenchCharsenglishChars.LEFT_QUOTEfrenchChars.LEFT_QUOTE«
জাস্টিন সময়

4
কমাগুলিতে প্রচুর বিভিন্ন রূপ রয়েছে: en.wikedia.org/wiki/Comma#Comma_variants - সম্ভবত এটি এমন মূ .় ধারণা নয়, বিশেষত যদি আপনার উত্স কোডটি utf-8 হিসাবে এনকোড করা যায়।
অ্যারন হল

21
আপনার ক্ষেত্রে এটি ভেরিয়েবল "নম্বর" কল করার মতো like আপনার ধ্রুবককে কল করা উচিত DELIMITER। অথবা এটি সিটিসপেট = "{0}, {1}" হওয়া উচিত
the_lotus

13
আপনি যে নিবন্ধটি সংযুক্ত করেছেন তা অত্যন্ত ভয়ঙ্কর। ধ্রুবকদের কখনই এর মতো একটি বালতিতে ফেলে দেওয়া উচিত নয় । এগুলি তাদের ক্লাসে রাখুন যেখানে তাদের প্রসঙ্গ রয়েছে: সংক্ষেপে, ধ্রুবক সহ শ্রেণিটি প্রসঙ্গটি সরবরাহ করে যেখানে ধ্রুবকটি ব্যবহৃত হয়। উদাহরণস্বরূপ, জাভা এর File.separator। ক্লাস আপনাকে বিভাজনের প্রকারটি বলে। শ্রেণীর নামকরণ করা Constsবা Constantsকোনও প্রসঙ্গ সরবরাহ করা এবং ধ্রুবককে সঠিকভাবে ব্যবহার করা শক্ত করে তোলে।

উত্তর:


184

টোটোলজি :

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

সাধারণ জ্ঞান আপনাকে জানায় const char UPPER_CASE_A = 'A';বা const char A = 'A'আপনার সিস্টেমে রক্ষণাবেক্ষণ এবং জটিলতা ব্যতীত অন্য কিছু যুক্ত করে না। const char STATUS_CODE.ARRIVED = 'A'একটি ভিন্ন কেস।

ধ্রুবক জিনিস রানটাইম এ অপরিবর্তনীয়, কিন্তু কম্পাইল সময় ভবিষ্যতে রুপান্তরিত করা প্রয়োজন হতে পারে প্রতিনিধিত্ব করতে অনুমিত হয়। কখন const char A =ছাড়া অন্য কিছু সঠিকভাবে সমান হবে A?

আপনি যদি public static final char COLON = ':'জাভা কোডটিতে দেখতে পান তবে যাকে লিখেছেন তাদের সন্ধান করুন এবং তাদের কীবোর্ডগুলি ভেঙে দিন। যদি আপনার COLONকাছ থেকে সর্বদা প্রতিনিধিত্ব করে তবে এটি :রক্ষণাবেক্ষণের দুঃস্বপ্ন।

কিংকর্তব্যবিমূঢ়তা:

যখন কেউ এটিকে পরিবর্তন করে COLON = '-'কারণ তারা যেখানে এটি ব্যবহার করছে সেখানে -সর্বত্র এর পরিবর্তে প্রয়োজন ? আপনি কি ইউনিট পরীক্ষা লিখতে যাচ্ছেন যা assertThat(':' == COLON)প্রতিটি একক constরেফারেন্সের জন্য মূলত বলেছে যে তারা পরিবর্তন না হয়? কেবলমাত্র কেউ পরিবর্তন করার সাথে সাথে পরীক্ষা ঠিক করতে পারে?

যদি কেউ আসলে যুক্তি দেয় যে public static final String EMPTY_STRING = "";এটি দরকারী এবং উপকারী, আপনি কেবল তাদের জ্ঞান অর্জনের যোগ্যতা অর্জন করেছেন এবং অন্য কোনও কিছুতে নিরাপদে এড়িয়ে যান।

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

সংযোগ:

এটি কৃত্রিমভাবে সংহতিকেও হ্রাস করে, কারণ এটি জিনিসগুলি তাদের ব্যবহার করে এমন জিনিস থেকে দূরে সরিয়ে দেয় যা তাদের সাথে সম্পর্কিত।

কম্পিউটার প্রোগ্রামিংয়ে, সংহতি বলতে মডিউলটির উপাদানগুলি একত্রে ডিগ্রি বোঝায়। সুতরাং, সংহতি প্রদত্ত মডিউলটির মধ্যে কার্যকারিতার টুকরাগুলির মধ্যে সম্পর্কের শক্তি পরিমাপ করে। উদাহরণস্বরূপ, অত্যন্ত সমন্বিত সিস্টেমে কার্যকারিতা দৃ strongly়ভাবে সম্পর্কিত।

জোড়া দেওয়া টিউব:

এটি অনেকগুলি সম্পর্কযুক্ত ক্লাস একসাথে দম্পত্তি করে কারণ তারা সমস্তই ফাইলগুলি রেফারেন্স করে শেষ করে যা তারা যা করে তা সত্যই সম্পর্কিত নয়।

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

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

বন্য মধ্যে:

আমি সম্প্রতি একটি 1,000,000+ LOCঅ্যাপ্লিকেশন রিফেক্টর করেছি যা 18 বছর বয়সী ছিল। এটা মত জিনিস ছিল public static final COMMA = SPACE + "," + SPACE;। এটি " , "যেখানে প্রয়োজন সেখানে কেবল ইনলাইনিংয়ের চেয়ে ভাল আর নয়।

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

এটি একাধিক প্যাকেজ এবং ক্লাসে ,শব্দের একাধিক ভুল বানান সহ একাধিকবার সংজ্ঞায়িত করেছিল COMMA। কোডের সাথে একত্রে সংযুক্ত সমস্ত ভিন্নতার উল্লেখের সাথে। সম্পূর্ণ সম্পর্কহীন কিছু না ভেঙে কিছু ঠিক করার চেষ্টা করা এবং সমাধান করা দুঃস্বপ্নের কম ছিল না ।

বর্ণমালা সঙ্গে একি, সেখানে একাধিক ছিল UPPER_CASE_A, A, UPPER_A, A_UPPERযে অধিকাংশ সময় সমান ছিল A কিন্তু কিছু ক্ষেত্রে ছিল না । প্রায় প্রতিটি চরিত্রের জন্য, তবে সমস্ত চরিত্র নয়।

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

কোনও বুদ্ধিমান বাস্তবতায় আপনি তর্ক করতে পারবেন না যে এই অনুশীলনটি সর্বাধিক এনট্রপি শুরু করে কিছু করছে না।

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


112
হতে পারে আপনার একটি জবাবদিহি করা উচিত: const char DELIMITER = ':'এটি আসলে কার্যকর useful
বার্গি

115
আমি বিভিন্ন যুক্তি যে EMPTY_STRINGউপকারী। (1) আমি যত সহজেই EMPTY_STRINGফাইল ব্যবহার করতে পারি তার চেয়ে অনেক বেশি সহজেই আমি সমস্ত ফাইল খুঁজে পেতে পারি ""। (২) যখন আমি দেখি যে EMPTY_STRINGআমি নিশ্চিতভাবেই জানি যে বিকাশকারী স্ট্রিংটি খালি রাখতে চেয়েছিলেন, এবং এটি পরে কোনও স্ট্রিং সরবরাহ করা কোনও ভুল-সম্পাদনা বা স্থানধারক নয়। এখন, আপনি দাবি করেছেন যে আমার দ্বারা এই যুক্তিটি তৈরি করে যে আপনি আমার জ্ঞানের যোগ্যতা অর্জন করতে পারেন, এবং নিরাপদে আমাকে চিরতরে উপেক্ষা করতে পারেন। সুতরাং, আপনি আমার জ্ঞানটি কীভাবে যোগ্যতা অর্জন করবেন? এবং আপনি কি চিরকাল আমার পরামর্শ উপেক্ষা করার পরিকল্পনা করছেন? আমার কোনও ইস্যু নেই।
এরিক লিপার্ট

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

15
@EricLippert: আমি ধরণ জনকে এখানে বাতলান যারা যে শুধুমাত্র গ্যারান্টি যে একটি বিন্দু দেখছি constপ্রদান করে এটি (সংকলন পরে) রানটাইম এ পরিবর্তন করবে না, যদিও আমি আপনার সাথে একমত যে শব্দার্থিক অর্থ constহল পরিবর্তন পরিচালনার সরঞ্জাম হিসাবে এর ব্যবহারের চেয়ে অনেক বেশি গুরুত্বপূর্ণ। এটি বলেছিল, আমি অবশ্যই এমন একটি ধারণা করতে পারি const EARLIEST_OS_SUPPORTEDযা কেবল শব্দার্থগতভাবেই ধারাবাহিক নয়, সময়ের সাথে সাথে প্রোগ্রামটি বিকশিত হবে এবং পুরাতন ক্রাফটটি সরানো হবে।
রবার্ট হার্ভে

16
@ ড্যানিয়েলজুর: সুতরাং এটি তৃতীয় যুক্তি EMPTY_STRING; যে একটি ভাল-ডিজাইন করা আইডিই এমন সরঞ্জামগুলির পৃষ্ঠতল করবে যা আমাকে এই সত্তাকে সিনট্যাক্টিক্যালি পরিবর্তে প্রতীকীভাবে আচরণ করতে দেয়। এটি চতুর্থ যুক্তিতে সাধারণীকরণ করুন: কোড বিশ্লেষণ সরঞ্জামগুলির লাইব্রেরি যা IDE এর নীচে বসে থাকে তা প্রতীকী স্তরে কোডের সঠিকতার উন্নত প্রোগ্রামেটিক বিশ্লেষণের অনুমতি দিতে পারে । যে বিকাশকারী 40 বছর আগে আক্ষরিক অর্থে রচিত সেগুলির চেয়ে বেশি উন্নত সরঞ্জামগুলির সুবিধা নিতে চান তাদের উন্নত সরঞ্জামের পুরষ্কারগুলি কাটাতে কেবল তাদের অভ্যাসে সামান্য পরিবর্তন করা দরকার।
এরিক লিপার্ট

145

ধ্রুবকগুলি ব্যবহারের প্রধান আবেদন হ'ল পরিবর্তনের প্রয়োজন হলে তারা রক্ষণাবেক্ষণকে হ্রাস করুন।

একেবারে না. এই সব সময়ে না কারণ ধ্রুবক ব্যবহার করতে কারণ ধ্রুবক সংজ্ঞা দ্বারা পরিবর্তন করবেন না । যদি কোনও ধ্রুবক কখনও পরিবর্তিত হয় তবে এটি একটি ধ্রুবক ছিল না, তাই না?

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

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

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


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

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

6
@ মন্টিহার্ডার: ভালো কথা। আমার মতামতটি এই বিষয়টি দ্বারা অবহিত হয় যে আমি সাধারণত ধ্রুবকগুলির মধ্যে পার্থক্য করে এমন ভাষা ব্যবহার করি - যা অবশ্যই চিরকাল অপরিবর্তনীয় - এবং ভেরিয়েবলগুলি যা একবার নির্ধারিত হতে পারে - যা সংস্করণ থেকে সংস্করণে পরিবর্তিত হতে পারে , রান করতে রান করতে পারে বা যাই হোক না কেন। একটি ধ্রুবক এবং একটি পরিবর্তনশীল বিভিন্ন জিনিস; একটি একই থাকে এবং সময়ের সাথে সাথে একটিতে পরিবর্তিত হয়।
এরিক লিপার্ট

7
@ স্টিভাক্স: আমি সম্মত; সি / সি ++ বৈশিষ্ট্যযুক্ত "কনস্ট" অদ্ভুত এবং সীমিত ব্যবহারের। ধ্রুবকদের আমি যে সম্পত্তিটি চাই তা হ'ল তাদের মান পরিবর্তন হয় না, এমন না যে আমি কিছু ফাংশনে সেগুলি পরিবর্তন করতে নিষেধ করি তবে অন্যের ক্ষেত্রে নয়।
এরিক লিপার্ট

15
"এটি ধ্রুবক ব্যবহারের কারণ নয় কারণ সংজ্ঞা দ্বারা সংবিধান পরিবর্তন হয় না। যদি কোনও ধ্রুবক কখনও পরিবর্তন হয় তবে এটি স্থির ছিল না, তাই না?" সংকলনের সময়ে ধ্রুবকগুলি পরিবর্তন করা (রানটাইম স্পষ্টত নয়) পুরোপুরি স্বাভাবিক। এজন্য আপনি তাদেরকে প্রথমে স্পষ্টভাবে লেবেলযুক্ত "জিনিস" বানিয়েছেন। অবশ্যই, ওপি'র ধ্রুবকগুলি আবর্জনাযুক্ত, তবে কিছু const VERSION='3.1.2'বা কিছু বা কিছু মনে করুন const KEYSIZE=1024
AnoE

61

না, ওটা বোবা।

অগত্যা বোবা যা হয় না তা স্থানীয়করণের কারণে নামযুক্ত লেবেলে এ জাতীয় জিনিসগুলি টানছে। উদাহরণস্বরূপ, হাজার হাজার বিভেদক হল আমেরিকা (1,000,000) একটি কমা, কিন্তু না অন্য লোকেলে একটি কমা। নামযুক্ত লেবেলে এটিকে টানতে (একটি উপযুক্ত, অ-কমা নাম সহ) প্রোগ্রামারকে সেই বিবরণগুলি উপেক্ষা / বিমূর্ত করতে দেয়।

তবে একটি ধ্রুবক তৈরি করা কারণ "ম্যাজিক স্ট্রিংগুলি খারাপ" কেবল কার্গো কাল্টিং।


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

19
প্রকৃতপক্ষে হাজার হাজার ডিলিমিটার অন্যান্য লোকালয়ে (চীন / জাপান) হাজার হাজার ডিলিমিটারের প্রয়োজন হয় না। এটি অবিচ্ছিন্ন সংখ্যা (ভারত) পরেও সেট করা হয়নি। ওহ, এবং এটি 1000 ডিলিমিটার বা 1000000 ডিলিমিটার (মেক্সিকো) এর উপর নির্ভর করে আলাদা আলাদা ডিলিমিটার থাকতে পারে। তবে কিছু লোকলেলে (ফার্সি) এএসসিআইআই ডিজিট 0-9 ব্যবহার না করার চেয়ে সমস্যাটি কম। ux.stackexchange.com/questions/23667/…
পিটার

1
@ ভ্ল্যাড লোকালাইজেশন এর চেয়ে অনেক জটিল, তবে হাজার হাজার বিভাজক একটি সুপরিচিত উদাহরণ যা লোকেরা স্বীকৃত।

এটি স্থানীয়করণের কৌশলের উপর নির্ভর করে ... আপনি কি এটি অনুবাদ করার জন্য আপনার প্রোগ্রামের সমস্ত ধ্রুবকটি পরিবর্তন করেন? অথবা আপনার পরিবর্তে কোনও ফাইল (বা অন্যান্য ডেটা স্টোর) থেকে মানগুলি পড়া উচিত, তাদের কার্যকরভাবে রানটাইম ভেরিয়েবলগুলি বানানো?
পাওলো ইবারম্যান

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

29

কয়েকটি অক্ষর রয়েছে যা অস্পষ্ট হতে পারে বা বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। উদাহরণস্বরূপ, আমরা '-'হাইফেন, একটি বিয়োগ চিহ্ন বা এমনকি কোনও ড্যাশ হিসাবে ব্যবহার করি । আপনি আলাদা নাম তৈরি করতে পারেন:

static const wchar_t HYPHEN = '-';
static const wchar_t MINUS = '-';
static const wchar_t EM_DASH = '-';

পরে, আপনি আপনার কোডটি এটিকে নতুন করে সংজ্ঞায়িত করে ছদ্মবেশে পরিবর্তন করতে বেছে নিতে পারেন:

static const wchar_t HYPHEN = '-';
static const wchar_t MINUS = '\u2122';
static const wchar_t EM_DASH = '\u2014';

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

যেহেতু টাইপোগ্রাফিক কনভেনশন ভাষা এবং অঞ্চল অনুসারে পৃথক হতে পারে, আপনি অনুবাদ টেবিল থেকে এই ধরনের অস্পষ্ট বিরামচিহ্নগুলি লোড করা থেকে ভাল।


আমার জন্য এটি কেবল বৈধ কারণেই কেউ চরিত্রের ধ্রুবক তৈরি করতে পারে
এফপি

2
-একটি এম ড্যাশ হিসাবে ব্যবহার করা বেশ বিভ্রান্তিকর ... বেশিরভাগ ফন্টের ক্ষেত্রে এটি সংক্ষিপ্ত। (এটি একটি এন ড্যাশের চেয়েও ছোট))
পাওলো ইবারম্যান

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

1
@ পাওলোবার্মন না, traditionতিহ্যগতভাবে একটি এম ড্যাশ হ'ল টাইপফেসের 'এম' অক্ষরের প্রস্থ এবং একটি এন ড্যাশ একটি 'এন' চরিত্রের প্রস্থ।
ডিজলি

@ ডিজলি হ্যাঁ, এবং হাইফেন-প্রস্থ <এন-প্রস্থ <মি-প্রস্থ।
পাওলো ইবারম্যান

22

একটি ধ্রুবক অর্থ যুক্ত করতে হবে।

কম্মাকে কমা হিসাবে সংজ্ঞায়িত করা অর্থ যুক্ত করে না, কারণ আমরা জানি যে কমা একটি কমা। পরিবর্তে আমরা অর্থটি ধ্বংস করি কারণ এখন কম্মা আসলে আর কমা হতে পারে না।

যদি আপনি কোনও উদ্দেশ্যে কমা ব্যবহার করেন এবং নামকরণকৃত ধ্রুবকটি ব্যবহার করতে চান তবে এটির উদ্দেশ্যে নাম দিন name উদাহরণ:

  • city + CharacterClass.COMMA + state = খারাপ
  • city + CITY_STATE_DELIMITER + state = ভাল

বিন্যাসকরণের জন্য ফাংশন ব্যবহার করুন

আমি ব্যক্তিগতভাবে পছন্দ করি FormatCityState(city, state)এবং function ফাংশনটির শরীরটি যতক্ষণ এটি সংক্ষিপ্ত হয় এবং পরীক্ষার কেসগুলি পাস করে ততক্ষণ তার যত্ন নেয় না।


1
আহ, তবে কমা সর্বদা একই কমা হয় না। আমি COMMA = '\ u0559' বা '\ u060C' ইত্যাদির সংজ্ঞা দিতে পারি (ইউনিকোড দেখুন) অথবা এটিকে পরে ভেরিয়েবলে পরিণত করে কনফিগার ফাইল থেকে পড়তে পারি। এইভাবে, এর এখনও একই অর্থ থাকবে তবে কেবল একটি আলাদা মান। কীভাবে।
মিস্টার লিস্টার

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

17

একটি ধ্রুবক COMMA ডিব্যব করা সহজ চেয়ে ভাল ','বা এই ধারণা ","। নিশ্চয়ই এমন কিছু ক্ষেত্রে রয়েছে যেখানে এটি বোঝা যায়, উদাহরণস্বরূপ final String QUOTE = "\"";সমস্ত স্ল্যাশ ছাড়াই পঠনযোগ্যতার উপর প্রচুর পরিমাণে সঞ্চয় করা, তবে ভাষা নিয়ন্ত্রণের অক্ষরগুলি বাদ দেওয়া \ 'এবং "আমি সেগুলি খুব দরকারী বলে খুঁজে পাইনি।

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

দরকারী কি তাদের দরকারী নাম দেওয়া হয়। এবং হ্যাঁ, কখনও কখনও একাধিক ধ্রুবকের একই বিষয়বস্তু থাকে তবে বিভিন্ন নাম থাকে। উদাহরণস্বরূপ final String LIST_SEPARATOR = ","

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


টার্গেট প্ল্যাটফর্মের উপর নির্ভর করে শর্তসাপেক্ষে ডিআইএসপি_এপোস্ট্রোফিকে একটি এএসসিআইআই 0x27 বা ইউনিকোড একক রাইট কোট চরিত্র হিসাবে চিহ্নিত করা (যেটি অ্যাডোস্ট্রোফের চেয়ে বেশি টাইপোগ্রাফিকভাবে উপযুক্ত উপযুক্ত)?
21-21

3
আসলে QUOTEউদাহরণস্বরূপ প্রমাণ এটি একটি খারাপ ধারণা হিসাবে ভাল যেহেতু আপনি এটা কি সাধারণভাবে / সমধিক পরিচিত হয় বরাদ্দ করা হয় DOUBLE QUOTEএবং QUOTEবোঝা SINGLE_QUOTEযা সঠিকভাবে বলতে হিসাবে উল্লেখ করা হয় APOSTROPHE

3
@ জারোডরোবারসন আমার মনে হয় না যে উক্তিটি ব্যক্তিগতভাবে একক উক্তি বোঝায় - তবে আপনি যেদিকেই পারেন অস্পষ্টতা অপসারণ করার এটি আরও ভাল কারণ!
কর্সিকা

2
আমি QUOTEঅতিরিক্ত কারণে উদাহরণটি পছন্দ করি না - এটি এর সাথে নির্মিত স্ট্রিংগুলি আরও শক্ত করে তোলে এটি "Hello, my name is " + QUOTE + "My Name" + QUOTEএকটি তুচ্ছ উদাহরণ এবং তবুও এটি দেখতে খারাপ লাগে। ওহ, নিশ্চিত, সংক্ষেপণের পরিবর্তে আপনি টোকেনগুলি প্রতিস্থাপন ব্যবহার করতে পারেন, "Hello, my name is %sMy Name%s".format(QUOTE, QUOTE)এটি আরও খারাপ হতে পারে। তবে, আরে, এর থেকে "Hello, my name is {0}My Name{0}".format(QUOTE)আরও ভাল কিছু নয়, সূচী টোকেনগুলি চেষ্টা করুন । এতে কোট দিয়ে উত্পন্ন যে কোনও অ-তুচ্ছ স্ট্রিংটি আরও খারাপ হবে।
VLAZ

2
@ কর্সিকা - আমি পালানো প্রকৃত উদ্ধৃতি দিয়ে বেঁচে থাকব। যদি আমি একটির হাতছাড়া করতে মিস করি তবে আমি যে আইডিইটি ব্যবহার করি তা অবিলম্বে অভিযোগ করবে। কোড সম্ভবত সংকলন করবে না। এটি স্পট করা মোটামুটি সহজ। উপরোক্ত মন্তব্যটি লেখার সময়"My name is" + QUOTE + "My Name" + QUOTE আমি আসলে তিনবার একই ভুলটি করেছিলাম এমন ভুল করা কত সহজ । আপনি এটি স্পট করতে পারেন? এটা আপনি একটি বিট লাগে, তাহলে এটি অনুপস্থিত স্থান পর এর হয় । আপনি কি স্ট্রিংটি ফর্ম্যাট করেন? কোন ক্ষেত্রে, প্রতিস্থাপন করতে একাধিক টোকেন সহ একটি স্ট্রিং কাজ করা আরও খারাপ হতে চলেছে। আমি এটি কীভাবে ব্যবহার করব যাতে এটি আরও পাঠযোগ্য?
VLAZ

3

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

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

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

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

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


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

3

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

ভাল বিমূর্ততা একদিকে কোডটি ব্যবহার করা সহজ এবং অন্যদিকে বজায় রাখা সহজ করে তোলে।

আমি সম্পূর্ণরূপে সম্মত হই DELIMITER=':'এবং নিজেই একটি দুর্বল বিমূর্ততা, এবং কেবলমাত্র এর চেয়ে ভাল COLON=':'(যেহেতু পরেরটি সম্পূর্ণ দরিদ্র)।

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

এই জাতীয় বিমূর্ততা সরবরাহ করা হলে, এর মূল্য DELIMITERবা কী কী তা নিয়ে পরামর্শ না করে ব্যবহার করা সহজ হবে COLONএবং বাস্তবায়নের বিবরণ পরিবর্তন করা সাধারণত বাস্তবায়নের মধ্যে সীমাবদ্ধ থাকবে। সুতরাং, সংক্ষেপে, এই ধ্রুবকগুলির যথাযথ বিমূর্ততার মধ্যে লুকানো বাস্তবায়নের বিশদ হওয়া উচিত।

ধ্রুবকগুলি ব্যবহারের প্রধান আবেদন হ'ল পরিবর্তনের প্রয়োজন হলে তারা রক্ষণাবেক্ষণকে হ্রাস করুন।

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


2

এই ধরণের ধ্রুবকগুলি কার্যকরভাবে একবার ব্যবহার করা হ'ল একটি বিদ্যমান এপিআই বা নথির সাথে মেলে। আমি ব্যবহার করা প্রতীকগুলি দেখেছি COMMAকারণ একটি নির্দিষ্ট সফ্টওয়্যার একটি পার্সারের সাথে সরাসরি সংযুক্ত ছিল যা COMMAএকটি বিমূর্ত সিনট্যাক্স ট্রিতে ট্যাগ হিসাবে ব্যবহৃত হয়েছিল। আমি এটি একটি আনুষ্ঠানিক স্পেসিফিকেশনের সাথে মেলে দেখতেও দেখেছি। আনুষ্ঠানিক স্পেসিফিকেশনগুলিতে আপনি মাঝে মাঝে প্রতীক দেখতে পান COMMAনা ','কেননা তারা যথাসম্ভব সম্পূর্ণ পরিষ্কার হতে চান।

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


2

লক্ষ্য করুন যে আপনি একটি তালিকা তৈরি করার চেষ্টা করছেন।

সুতরাং, এটি রিফ্যাক্টর হিসাবে: String makeList(String[] items)

অন্য কথায়, ডেটার পরিবর্তে লজিক তৈরি করুন
ভাষাগুলি কীভাবে তারা তালিকাকে উপস্থাপন করে তাতে আলাদা হতে পারে তবে কমাগুলি সর্বদা কমা (এটি একটি টোটোলজি)। সুতরাং ভাষাটি পরিবর্তিত হলে কমা চরিত্র পরিবর্তন করা আপনাকে সাহায্য করবে না - তবে এটি হবে।


0

এটি যদি আপনার সহকর্মী বিকাশকারী দ্বারা আবেদনের অংশ হিসাবে লিখিত কোনও শ্রেণী ছিল তবে এটি অবশ্যই একটি খারাপ ধারণা। যেমন অন্যরা ইতিমধ্যে চিহ্নিত করেছে, স্থিরতাগুলি সংজ্ঞায়িত করার অর্থ এটি বোঝা যায় SEPARATOR = ','যে আপনি যেখানে মানটি পরিবর্তন করতে পারেন এবং ধ্রুবকটি এখনও বোধগম্য হয় তবে এত কম ধ্রুবক যার নামটি কেবল তাদের মান বর্ণনা করে।

তবে কমপক্ষে দুটি ক্ষেত্রে এমন ঘটনা ঘটেছে যেখানে নামগুলি ধ্রুবকের নামটি যথাযথভাবে বর্ণনা করেছে এবং যেখানে ধ্রুবকের নামটি যথাযথভাবে পরিবর্তন না করে আপনি মান পরিবর্তন করতে পারবেন না:

  • গাণিতিক অথবা শারীরিক ধ্রুবক যেমন PI = 3.14159। এখানে, ধ্রুবকের ভূমিকাটি স্মৃতিচারণকারী হিসাবে কাজ করা কারণ প্রতীকী নামটি PIপ্রতিনিধিত্ব করে এমন মানের চেয়ে অনেক খাটো এবং আরও পঠনযোগ্য।
  • পার্সার বা কীবোর্ডের কীগুলিতে চিহ্নগুলির ক্লান্তিকর তালিকা। এমনকি বেশিরভাগ বা সমস্ত ইউনিকোড অক্ষর সহ স্থির তালিকা থাকাও বোধগম্য হতে পারে এবং এটিই আপনার কেসটি পড়তে পারে। কিছু চরিত্র যেমন Aসুস্পষ্ট এবং স্পষ্টরূপে স্বীকৃত। তবে আপনি কি সহজেই বলতে পারবেন Аএবং Aআলাদা করতে পারবেন ? প্রথমটি হ'ল সিরিলিক অক্ষর А আর দ্বিতীয়টি ল্যাটিন অক্ষর এ । এগুলি পৃথক অক্ষর, বিভিন্ন ইউনিকোড কোড পয়েন্ট দ্বারা প্রতিনিধিত্ব করা হয়, যদিও গ্রাফিকভাবে তারা প্রায় অভিন্ন। আমি বরং ধ্রুবক CYRILLIC_CAPITAL_Aএবং ছিলLATIN_CAPITAL_Aআমার কোডে দুটি প্রায় একই-চেহারা বর্ণনামূলক অক্ষরের চেয়ে। অবশ্যই, এটি অর্থহীন যদি আপনি জানেন যে আপনি কেবল ASCII অক্ষরের সাথে কাজ করছেন যা সিরিলিক ধারণ করে না। তেমনিভাবে: আমি লাতিন বর্ণমালা দিবস-দিবস ব্যবহার করি তাই যদি আমি এমন কোনও প্রোগ্রাম লিখি যেটির জন্য চাইনিজ চরিত্রের প্রয়োজন হয় তবে আমি সম্ভবত একটি অক্ষর .োকানোর চেয়ে ধ্রুবক ব্যবহার করতে পছন্দ করব যা আমি বুঝতে পারি না। প্রতিদিনের জন্য চাইনিজ অক্ষর ব্যবহারকারী কারও পক্ষে, চীনা চরিত্রটি সুস্পষ্ট হতে পারে তবে নামী ধ্রুবক হিসাবে একটি লাতিন অক্ষর উপস্থাপন করা আরও সহজ হতে পারে। সুতরাং, আপনি দেখতে হিসাবে, এটি প্রসঙ্গে নির্ভর করে। তবুও, একটি লাইব্রেরিতে সমস্ত চরিত্রের জন্য প্রতীকী ধ্রুবক থাকতে পারে কারণ লেখকাগুলি কীভাবে গ্রন্থাগারটি ব্যবহৃত হতে চলেছে এবং কোন নির্দিষ্ট অ্যাপ্লিকেশনটিতে পাঠযোগ্যতার উন্নতি করতে কোন অক্ষরগুলির প্রয়োজন হতে পারে তা আগেই জানতে পারেন না।

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


-1

হতে পারে.

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

city + '.' + state

যদিও এটি তুলনামূলকভাবে কঠিন ভুল

city + Const.PERIOD + state

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

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

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


2
কিছু মরন Const.PERIODসমান হতে গেলে কী হয় ~? নামী চরিত্রগুলির একটি টোটোলজির কোন যৌক্তিকতা নেই, এটি কেবল রক্ষণাবেক্ষণ এবং জটিলতা যুক্ত করে যা আধুনিক দিনের প্রোগ্রামিং পরিবেশে অনাবৃত। আপনি কি ইউনিট পরীক্ষার একটি স্যুট লিখতে যাচ্ছেন যা মূলত বলে assert(Const.PERIOD == '.')?

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

3
আপনার উত্তরাধিকারের উদাহরণটি একটি দরিদ্র, আমি সবেমাত্র ১,০০,০০০+ এলওসি কোড বেসটি ১৮ বছরের পুরানো রিফ্যাক্টরিং শেষ করেছি। এর প্রতিটি মুদ্রণযোগ্য চরিত্রটি একাধিক বারের মতো বিভিন্ন বিবাদী নামের সাথে সংজ্ঞায়িত হয়েছিল। এবং অনেক সময় নামের জিনিসগুলি COMMAআসলে সেট করা হয়েছিল = SPACE + "," + SPACE। হ্যাঁ কিছু বোকা একটি SPACEধ্রুবক ছিল । আমি তাদের সমস্ত রিফ্যাক্টর করে দিয়েছিলাম এবং কোডটি আরও বেশি পাঠযোগ্য এবং মজাদারের ক্রমগুলি হ'ল আদেশগুলি আরও নিখুঁতভাবে জিনিসগুলি ট্র্যাক করতে সক্ষম হয়েছিল এবং 6 টি ইন্ডিয়ারেশনের স্তর ছাড়াই কিছু ঠিক করে দেওয়া হয়েছিল তা নির্ধারণের জন্য তাদের ঠিক করতে সক্ষম হয়েছিল।

-1

একক চরিত্রের ধ্রুবকগুলি কি আক্ষরিক চেয়ে ভাল?

এখানে চারদিকে প্রচুর সংঘাত রয়েছে flo আমি তাদের আলাদা করে দিতে পারি কিনা তা আমাকে দেখতে দিন।

ধ্রুবকগুলি সরবরাহ করে:

  • শব্দার্থবিদ্যা
  • পরিবর্তন, উন্নয়নের সময়
  • পরোক্ষ উপায়

একটি একক চরিত্রের নামটিতে যাওয়া কেবল শব্দার্থকে প্রভাবিত করে। একটি নাম একটি মন্তব্য হিসাবে দরকারী এবং প্রসঙ্গে সাফ হওয়া উচিত। এর অর্থ প্রকাশ করা উচিত, মান নয়। এটি যদি একক চরিত্রের সাথে সমস্ত কিছু করতে পারে। যদি এটি না পারে তবে দয়া করে করবেন না।

একটি আক্ষরিক এবং একটি ধ্রুবক উভয়ই বিকাশের সময় পরিবর্তন করতে পারে। ম্যাজিক নম্বর ইস্যুটি এটিই নিয়ে আসে। স্ট্রিংগুলি ম্যাজিক সংখ্যাও হতে পারে।

যদি শব্দার্থক অর্থ বিদ্যমান থাকে এবং যেহেতু উভয়ই ধ্রুবক, তবে ধ্রুবকের আক্ষরিক চেয়ে বেশি মূল্য আছে কিনা তা অনুপ্রেরণায় নেমে আসে।

ইন্ডিরেশন কোনও ইন্ডিয়ারেশন ছাড়া অন্য যে কোনও সমস্যা সমাধান করতে পারে।

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

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

আপনি যেখানে একটি অক্ষরের সাহায্যে এর মতো দরকারী পার্থক্য তৈরি করতে পারেন তা মূলত প্রসঙ্গে নির্ভর করে। তবে আমি এটিকে অভ্যাস করব না।


1
মূল শব্দটির মূল কী। যদি এবং "এ" এর কাছে কেবল "এ" হওয়ার চেয়ে বেশি শব্দার্থক থাকে তবে একই শব্দার্থকে একই "রেফারেন্স" এর সাথে বাঁধাই মূল্যবান। এটি একটি ধ্রুবক বা না তা বিবেচনা করে না। আমি সম্পূর্ণভাবে রাজী.
oopexpert

-1

সংখ্যাগরিষ্ঠ মতামতের দার্শনিক সংক্ষিপ্তসার হিসাবে, আমি অবশ্যই বলতে পারি যে আমাদের মধ্যে এমন কিছু লোক রয়েছে, যারা 19 শতকের অবাস্তব ফরাসি কৃষক প্রোগ্রামারের প্রশংসা করেন এবং

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

জি কে চেস্টারটন, দ্য বল অ্যান্ড দ ক্রস

সত্যকে প্রশংসা করার ক্ষেত্রে কোনও ভুল নেই এবং সত্যকে উল্লেখ করে কোনও ভুল নেই, বিশেষত কম্পিউটারের সাথে কথা বলার সময়।

আপনি যদি কম্পিউটারে মিথ্যা বলেন তবে তা আপনাকে পেয়ে যাবে

পেরি ফারার - জার্মম্যানটাউন, মেরিল্যান্ড (আরও প্রোগ্রামিং পার্লস থেকে)


তবে, বেশিরভাগ ক্ষেত্রে আমি সেই লোকদের সাথে একমত যারা এই বোবা বলে। আমি ফোরট্রান প্রোগ্রামিং শিখতে খুব কম বয়সী, কিন্তু আমি শুনেছি যে আপনি নতুন করে সংজ্ঞা দিতে 'A' = 'Q'এবং সব ধরণের দুর্দান্ত ক্রিপ্টোগ্রামগুলি নিয়ে আসতে পারেন। আপনি এই করছেন না।

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

এবং, যদি আমি একটি এসকিউএল ক্যোয়ারি তৈরির জন্য কোনও বিল্ডার প্যাটার্নটি ব্যবহার করি, তবে আমি বরং এটি দেখতে চাই

sb.append("insert into ")
 .append(table_name)
 .append(" values ")
 .append(" ( ")
 .append(val_1)
 .append(",")
 .append(val_2)
 .append(" ); ")

অন্য যে কোনও কিছুর চেয়ে, তবে আপনি যদি ধ্রুবক যুক্ত করতে যাচ্ছেন তবে এটি হবে

INSERT_VALUES_START = " ( "
INSERT_VALUES_END = " ) "
INSERT_VALUES_SEPARATOR = " , "
QUERY_TERMINATOR = ";"

sb.append("insert into ")
 .append(table_name)
 .append(" values ")
 .append(INSERT_VALUES_START)
 .append(val_1)
 .append(INSERT_VALUES_SEPARATOR)
 .append(val_2)
 .append(INSERT_VALUES_END)
 .append(QUERY_TERMINATOR)

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

কোনও কিছুই আপনার জন্য একটি স্ট্রিং স্বয়ংক্রিয়ভাবে পূর্ণ করতে যাচ্ছে না, সুতরাং আমি যদি 'কন', Alt-Space, নীচে, নীচে, নীচে টিপে কমা পেতে পারি তবে 'কন', Alt-Space, নীচে টিপে একটি কোট পেতে পারি, নিচে, প্রবেশ করুন। আমি কেবল এটি করতে পারি।


স্ট্রিং আক্ষরিক সম্পর্কে অন্য একটি জিনিস মনে রাখার উপায় সেগুলি সংকলন করা হয়। কমপক্ষে ডেলফিতে, (প্রতিটি ভাষাতেই আমি একমাত্র ভাষা অবলম্বন করেছি) আপনি প্রতিটি ক্রিয়াকলাপের স্ট্যাকের মধ্যে আড়াআড়িভাবে আক্ষরিক ব্যবহার করবেন। সুতরাং, প্রচুর আক্ষরিক = প্রচুর ফাংশন ওভারহেড; "," ফাংশন_এতে "," ফাংশন_বিতে "" মেমরির সমান বিট নয় this এটি মোকাবেলার জন্য একটি "রিসোর্স স্ট্রিং" রয়েছে যা পাশের পাশে নির্মিত এবং সংযুক্ত করা যেতে পারে - এবং এইভাবে তারা আই 18n স্টাফ করে (হত্যা করে) একটি গুল্ম সহ দুটি পাখি)। পাইথনে আপনার সমস্ত স্ট্রিং আক্ষরিক বস্তু এবং এটি ব্যবহার করতে আসলে ভাল লাগতে পারে utils.constants.COMMA.join(["some","happy","array","strings"])তবে এই পৃষ্ঠায় বারবার পুনরাবৃত্তি করা পয়েন্টগুলির জন্য এটি একটি দুর্দান্ত ধারণা নয়।


-4

কিন্তু কবে আমরা কমাতে প্রতিনিধিত্ব করতে ',' এর চেয়ে আলাদা প্রতীক ব্যবহার শুরু করব?

স্থানীয়করণের জন্য।

ইংরেজীভাষী দেশগুলিতে, দশমিকের পুরো এবং ভগ্নাংশের অংশকে পৃথক করে প্রতীকটি "।", যাকে আমরা "দশমিক বিন্দু" বলি। অন্যান্য অনেক দেশে প্রতীকটি "," এবং স্থানীয় ভাষায় সাধারণত "কমা" এর সমতুল্য বলা হয়। একইভাবে, যেখানে ইংরেজীভাষী দেশগুলি তিনটি অঙ্কের পৃথক গোষ্ঠীগুলিতে "," ব্যবহার করে বৃহত্তর সংখ্যায় (যেমন এক মিলিয়ন এর জন্য 1,000,000), যে দেশগুলি দশমিক পয়েন্ট হিসাবে কমা ব্যবহার করে একটি বিন্দু ব্যবহার করে (1.000.000)।

সুতরাং আপনি যদি বিশ্বায়ন করছেন তবে DECIMAL_POINT এবং COMMA ধ্রুবক তৈরির জন্য একটি মামলা রয়েছে।


2
কিন্তু তারপরে COMMA এবং DECIMAL_POINT সত্তাগুলির সঠিক নাম নয় (যার কারণেই সম্ভবত আপনি বঞ্চিত হলেন)।
কাইল স্ট্র্যান্ড

আপনার নির্দিষ্ট স্থানীয় সংস্করণগুলি সংকলন করতে হবে। আক্ষরিক ধ্রুবকগুলি এটির জন্য উপযুক্ত নয়; যে ব্যবহারের ক্ষেত্রে তাদের মধ্যে সংজ্ঞা ফাইল এবং অনুসন্ধানের জন্য কল করা হবে (এতে ধ্রুবকগুলি জড়িত থাকতে পারে তবে ধ্রুবক অক্ষর নয়, সন্ধানের ধ্রুবকগুলি থাকতে পারে)।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.