কয়েকজন করেন, তবে যতটা আমি জানি তত জনপ্রিয় জনপ্রিয় কেউ নেই। মন্তব্য নেস্টিং খারাপ কিছু আছে?
আমি যে (ছোট) ভাষায় কাজ করছি তাতে ব্লক মন্তব্য নেস্ট করার পরিকল্পনা করি, তবে আমি জানতে চাই এটি কোনও খারাপ ধারণা কিনা।
কয়েকজন করেন, তবে যতটা আমি জানি তত জনপ্রিয় জনপ্রিয় কেউ নেই। মন্তব্য নেস্টিং খারাপ কিছু আছে?
আমি যে (ছোট) ভাষায় কাজ করছি তাতে ব্লক মন্তব্য নেস্ট করার পরিকল্পনা করি, তবে আমি জানতে চাই এটি কোনও খারাপ ধারণা কিনা।
উত্তর:
একটি জিনিস এখনও কেউ উল্লেখ করেনি, তাই আমি এটি উল্লেখ করব: নীড় মন্তব্য করার আকাঙ্ক্ষাটি প্রায়শই নির্দেশ করে যে প্রোগ্রামারটি ডোন ইট ভুল।
প্রথমে সম্মত হোন যে প্রোগ্রামারটির কাছে কেবল "নেস্টিং" বা "বাসা বাঁধাই নয়" দৃশ্যমান তখনই যখন প্রোগ্রামার কাঠামোগতভাবে কিছু লিখে থাকে:
do_something();
/* comment /* nested comment */ more comment */
do_something_else();
এখন, কখন এ জাতীয় জিনিসটি বাস্তবে আসে? অবশ্যই প্রোগ্রামার নেস্টেড মন্তব্যগুলি লিখবে না যা আক্ষরিকভাবে উপরের স্নিপেটের মতো দেখাচ্ছে! না, বাস্তবে আমরা মন্তব্যগুলিতে বাসা বেঁধে থাকি (বা আমরা আশা করি যে এগুলি বাসা বেঁধে ফেলতে পারি), কারণ আমরা এরকম কিছু লিখতে চাই:
do_something(); /* do a thing */
/* [ajo] 2017-12-03 this turned out to be unnecessary
do_something_else(); /* do another thing */
*/
এবং এই হল খারাপ। এটি এমন একটি নিদর্শন নয় যা আমরা (ভাষা ডিজাইনার হিসাবে) উত্সাহিত করতে চাই! সঠিক উপরে স্নিপেট লিখতে পথ হল:
do_something(); /* do a thing */
সেই "ভুল" কোড, সেই ভুয়া সূচনা বা যা যা ছিল তা কোডবেজে অন্তর্ভুক্ত নয়। এটি উত্স-নিয়ন্ত্রণের ইতিহাসে সর্বোত্তম belongs আদর্শভাবে, আপনি এমনকি ভুল কোড লিখতে চান না, ডান? এবং যদি ভুল কোডটি কোনও উদ্দেশ্যে কাজ করে থাকে তবে রক্ষণাবেক্ষণকারীদের কোনও কারণে এটি পুনরুদ্ধার না করার জন্য সতর্ক করে, ভাল, এটি সম্ভবত একটি লিখিত এবং ইচ্ছাকৃত কোড মন্তব্যের জন্য একটি কাজ । এক্স করে এমন কিছু পুরানো কোড রেখে কেবল "এক্স করবেন না" প্রকাশ করার চেষ্টা করা, তবে মন্তব্য করেছিলেন, এক্সকে করা থেকে বিরত রাখার সবচেয়ে পঠনযোগ্য বা কার্যকর উপায় নয় people
এটি সমস্তই থাম্বের একটি সহজ নিয়মে ফোটে যা আপনি আগে শুনে থাকতে পারেন: কোড মন্তব্য করবেন না। (এই শব্দগুচ্ছ একটি আপ চালু হবে খুঁজছেন অনেক এর মতামত মধ্যে চুক্তি ।)
আগে আপনি জিজ্ঞাসা: হ্যাঁ, এই ধরনের সি, সি #, এবং C যেমন ভাষায় ++, ইতিমধ্যে প্রোগ্রামার দিতে অন্য টুল কোডের বড় ব্লক "মন্তব্য আউট": #if 0
। তবে এটি কেবল সি প্রিপ্রোসেসরের একটি নির্দিষ্ট অ্যাপ্লিকেশন, যা এটি তার নিজস্বভাবে একটি বৃহত এবং দরকারী সরঞ্জাম। ভাষার পক্ষে শর্তসাপেক্ষ সংকলন সমর্থন করা #if
এবং এখনও সমর্থন না করা সত্যিই এটি অত্যন্ত কঠিন এবং বিশেষ-কেসিসি হবে #if 0
।
সুতরাং, আমরা প্রতিষ্ঠিত করেছি যে নেস্টেড মন্তব্যগুলি কেবল তখন প্রাসঙ্গিক হয় যখন প্রোগ্রামার কোড মন্তব্য করে থাকে; এবং আমরা প্রতিষ্ঠিত করেছি (প্রচুর অভিজ্ঞ প্রোগ্রামারদের sensকমত্যের মাধ্যমে) যে কোডের বাইরে মন্তব্য করা একটি খারাপ কাজ।
সিলেজিজমটি সম্পূর্ণ করার জন্য, আমাদের অবশ্যই মেনে নিতে হবে যে ভাষা ডিজাইনারদের ভাল জিনিস প্রচার এবং খারাপ জিনিসকে নিরুৎসাহিত করার আগ্রহ রয়েছে (ধরে নিই যে সমস্ত কিছু সমান)।
নেস্টেড মন্তব্য ক্ষেত্রে, সব অন্য হয় সমান - আপনি নিরাপদে উপেক্ষা করতে পারেন কম ভোট উত্তরগুলি বলে যে দাবি করা নেস্টেড পার্স /*
একরকম পার্সার জন্য "কঠিন" হতে হবে। (নেস্টেড নেস্টেডের /*
চেয়ে শক্ত কিছু নয়)(
, যা বিশ্বের প্রতিটি পার্সারকে ইতিমধ্যে পরিচালনা করতে হবে needs)
সুতরাং, অন্য সমস্ত কিছু সমান হওয়ায়, কোনও ভাষা ডিজাইনারকে বাসা বাঁধার পক্ষে মন্তব্যগুলি (যেমন কোডের বাইরে মন্তব্য করা) সহজ করা উচিত , বা কঠিন? মনে রাখবেন যে কোড আউট করা মন্তব্য করা একটি খারাপ কাজ।
Qed
পাদটীকা। লক্ষ্য করুন যে আপনি যদি নেস্টেড মন্তব্যের অনুমতি না দিয়ে থাকেন তবে
hello /* foo*/bar.txt */ world
এটি একটি বিভ্রান্তিকর "মন্তব্য" - এটি সমান
hello bar.txt */ world
(যা সম্ভবত একটি সিনট্যাক্স ত্রুটি)। কিন্তু আপনি যদি না নেস্টেড মন্তব্যকে অনুমতি, তারপর
hello /* foo/*.txt */ world
এটি একটি বিভ্রান্তিকর "মন্তব্য" - এটি সমান
hello
কিন্তু মন্তব্যটি ফাইলের শেষের দিকে খোলে (যা আবার প্রায় একটি সিনট্যাক্স ত্রুটি)। সুতরাং কোনও উপায়ই অনিচ্ছাকৃত সিনট্যাক্স ত্রুটিগুলির জন্য বিশেষত কম প্রবণ। পার্থক্য হ'ল কীভাবে তারা মন্তব্য-আউট কোডের ইচ্ছাকৃত অ্যান্টিপ্যাটার্ন পরিচালনা করে ।
#if DEAD
ক্যানোনিকাল এবং সেরা-নকশা করা উদাহরণ। অনেক ভাষায় আপনি কেবল ডেড কোডটি সমতুল্যভাবে মোড়ানো করতে পারেন if (DEAD)
। এবং অনেক আইডিইতে, আপনি প্রকৃতপক্ষে মৃত কোডটি সরিয়ে ফেলতে পারেন এবং আপনি চান তা ফিরে পেতে Ctrl + Z এবং / অথবা সংস্করণ নিয়ন্ত্রণের উপর নির্ভর করতে পারেন on একটি মন্তব্য, ডাস্ট্রিং, যাই হোক না কেন, যার পাঠ্যটি মৃত কোডের একগুচ্ছ, এখনও পঠনযোগ্যতার জন্য সবচেয়ে খারাপ বিকল্প।
কারণ বেশিরভাগ বাস্তবায়নগুলি পৃথক লেক্সিং এবং পার্সিং পর্যায়গুলি ব্যবহার করছে এবং লেক্সিংয়ের জন্য তারা সাধারণ পুরানো নিয়মিত অভিব্যক্তি ব্যবহার করছে। মন্তব্যগুলি হোয়াইটস্পেস হিসাবে বিবেচনা করা হয় - অর্থাত্, টোকেনগুলি উপেক্ষা করা হয় এবং সুতরাং এটি একটি লেক্সিং পাসে সম্পূর্ণরূপে সমাধান করা উচিত। এই পদ্ধতির একমাত্র সুবিধা হ'ল গতি পার্সিং। অসংখ্য অসুবিধাগুলির মধ্যে সিনট্যাক্সের উপর গুরুতর সীমাবদ্ধতা রয়েছে (উদাহরণস্বরূপ, কীওয়ার্ডগুলির একটি নির্দিষ্ট, প্রসঙ্গ-স্বতন্ত্র সেট বজায় রাখা দরকার)।
কোনও লেক্সার তৈরি করা পুরোপুরি সম্ভব যা নেস্টেড মন্তব্যগুলি পরিচালনা করতে পারে। এটি যখন হোয়াইটস্পেস খাচ্ছে, যখন এটি দেখে /*
এটি একটি গভীরতার পাল্টা বাড়িয়ে তুলতে পারে, এবং যখন দেখায় এটি হ্রাস করে*/
এবং গভীরতা শূন্য হলে থামবে। এটি বলেছিল, আমি অনেকগুলি পার্সার করেছি, এবং নীড়ের মন্তব্যের জন্য কোনও ভাল কারণ খুঁজে পাইনি।
যদি মন্তব্যগুলি বাসা বাঁধতে পারে, তবে একটি খারাপ দিকটি তাদের শেষগুলি ভারসাম্যহীন হওয়া সহজ, এবং আপনার অভিনব সম্পাদক না থাকলে এটি অদৃশ্যভাবে কোডটি গোপন করতে পারে যা আপনি অনুমান করছেন।
বাসা বাঁধে না এমন মন্তব্যগুলির একটি উল্টোটি হ'ল:
/*
some code
more code
blah blah blah
/**/
যেখানে আপনি প্রথম লাইনটি সরিয়ে বা যুক্ত করে কোডটি সহজেই ভিতরে বা বাইরে মন্তব্য করতে পারেন - একটি 1-লাইন সম্পাদনা। অবশ্যই, যদি সেই কোডটিতে নিজেই একটি মন্তব্য থাকে তবে এটি ভঙ্গ হবে, যদি না আপনি সেখানে সি ++ - স্টাইল //
মন্তব্যের অনুমতি না দেন। তাই আমি কি করতে ঝোঁক।
//
মন্তব্যগুলিও সি 99-স্টাইল।
/*$token
, যেখানে identifier
কোনও আলফানিউমেরিক টোকেন থাকে এবং মন্তব্য-এর শেষে থাকে token$*/
। টোকেনাইজারের জন্য কোড অন্তর্ভুক্ত করা তুলনামূলকভাবে সহজ হবে যাচাই করার জন্য প্রতিটি প্রান্ত-মন্তব্য চিহ্নটিতে তার ম্যাচিং-স্টার্ট-মন্তব্য ব্লকের জন্য উপযুক্ত টোকেন রয়েছে।
যেহেতু অন্য কারও এটি উল্লেখ করা হয়নি, আমি কয়েকটি ভাষাগুলি তালিকাবদ্ধ করব যা নেস্টেড মন্তব্যগুলিকে সমর্থন করে: রেএক্সএক্স, মডিউলা -২, মডিউলা -3, ওবেরন। অসুবিধা এবং গতির সমস্যা সম্পর্কে এখানে সমস্ত অভিযোগ থাকা সত্ত্বেও এগুলির কোনওটিরই কোনও বিশাল সমস্যা বলে মনে হয় না।
নেস্টিং ব্লক মন্তব্যগুলির একটি ভাল বিষয় হ'ল আপনি কোডের বৃহত অংশগুলি সহজেই মন্তব্য করতে পারেন (ভাল, প্রায়শই, যদি না আপনার স্ট্রিং ধ্রুবকটিতে ব্লক মন্তব্য শেষের ক্রম থাকে)।
একটি বিকল্প পদ্ধতি হ'ল লাইন কমেন্ট শুরু সিকোয়েন্সের সাথে একগুচ্ছ রেখাগুলি তৈরি করা যদি আপনার এমন কোনও সম্পাদক থাকে যা এটি সমর্থন করে।
হাস্কেল ব্লক মন্তব্যগুলিকে ঘৃণা করেছেন, তবে বেশিরভাগ লোকেরা এটিকে লক্ষ্য করা বা অভিযোগ করার মত মনে করেন না। আমার ধারণা এটি হ'ল কারণ যে লোকেরা নেস্টেড মন্তব্যগুলি প্রত্যাশা করে না তারা সেগুলি এড়ায়।
নেস্টেড ব্লক মন্তব্যগুলিকে সমর্থন করা পার্সারকে জটিল করে তোলে, যা উভয়ই বেশি কাজ এবং এটি সংকলনের সময় বাড়িয়ে তুলতে পারে। আমি অনুমান করি যে এটি কোনও ভাষার জন্য খুব প্রয়োজনীয় বৈশিষ্ট্য নয়, তাই সময় ও প্রচেষ্টা অন্যান্য উন্নতি এবং অপ্টিমাইজেশনে ব্যবহার করা ভাল।
আমার মতে সরলতা কোনও কিছুর ডিজাইনে সর্বদা একটি ভাল জিনিস। মনে রাখবেন যে কোনও বৈশিষ্ট্য অপসারণ করার চেয়ে এটি যুক্ত করা আরও সহজ। একবার আপনি নেস্টেড মন্তব্যের অনুমতি দিলে এবং এটি ব্যবহার করে প্রোগ্রামগুলি বের হয়ে গেলে আপনি সামঞ্জস্যতা ভঙ্গ না করে এগুলি বাইরে নিতে সক্ষম হবেন না।
/*/**/
একটি সম্ভাব্য কারণ হ'ল নেস্টেড মন্তব্যগুলি অবশ্যই পার্সার দ্বারা পরিচালনা করা উচিত, যেহেতু সাধারণভাবে লেক্সারে ব্যবহৃত নিয়মিত প্রকাশের স্বাদ পুনরাবৃত্তি সমর্থন করে না। সাধারণগুলি লেক্সারের দ্বারা সাদা স্থান হিসাবে মুছে ফেলা যায়, সুতরাং সেভাবে কার্যকর করা সহজ।
কে জানে? আমি অনুমান করব কারণ নেস্টেড মন্তব্যগুলিকে সমর্থন করা আরও কাজ - আপনাকে কোনও ধরণের স্ট্যাক বজায় রাখতে হবে, এবং এটি ভাষার ব্যাকরণকে জটিল করে তোলে।
নেস্টেড মন্তব্যগুলির অর্থ পার্সারের অতিরিক্ত কাজ। সাধারণত আপনি যখন কোনও মন্তব্যের শুরু দেখতে পান তবে শেষ মন্তব্য হিসাবে চিহ্নিত হওয়া পর্যন্ত আপনি সবকিছু উপেক্ষা করেন। নেস্টেড মন্তব্যগুলিকে সমর্থন করার জন্য আপনাকে মন্তব্যেও পাঠ্যকে পার্স করতে হবে। তবে সবচেয়ে বড় সমস্যাটি হ'ল একজন প্রোগ্রামারকে সমস্ত নেস্টেড মন্তব্য সঠিকভাবে বন্ধ করতে সতর্ক থাকতে হবে বা এটি সংকলনের ত্রুটির দিকে পরিচালিত করবে। সংকলককে সঠিকভাবে বাস্তবায়ন করা এমন কিছু যা করা যায় তবে প্রোগ্রামার হিসাবে নেস্টেড মন্তব্যের উপর নজর রাখা বেশ ত্রুটি-প্রবণ এবং বিরক্তিকর।