java শিখব - নির্দিষ্ট ইউনিকোড অক্ষর দিয়ে মন্তব্যগুলিতে জাভা কোড কার্যকর করা কেন অনুমোদিত?




4 Answers

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

জেএলএস সেকশন 3.3 এ বর্ণিত হিসাবে এটি কোনও ASCII ভিত্তিক সরঞ্জাম উৎস ফাইলগুলিতে প্রক্রিয়া করার অনুমতি দেয়:

[...] জাভা প্রোগ্রামিং ভাষা ইউনিকোড-এ লিখিত একটি প্রোগ্রাম ASCII- এ রূপান্তরিত করার একটি আদর্শ উপায় নির্দিষ্ট করে যা একটি ফর্মকে এমন একটি প্রোগ্রামে রূপান্তরিত করে যা ASCII- ভিত্তিক সরঞ্জামগুলির দ্বারা প্রক্রিয়া করা যেতে পারে। [...]

এটি প্ল্যাটফর্ম স্বাধীনতার জন্য একটি মৌলিক গ্যারান্টি দেয় (সমর্থিত চরিত্র সেটগুলির স্বাধীনতা) যা সবসময় জাভা প্ল্যাটফর্মের জন্য একটি মূল লক্ষ্য।

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

এই থিমটিতে অনেক গোচছা রয়েছে এবং জাভা পাজলরা জোশুয়া ব্লোক এবং নীল গফারের নিম্নলিখিত রূপটি অন্তর্ভুক্ত করেছেন:

এটি একটি আইনি জাভা প্রোগ্রাম? যদি তাই হয়, এটা কি মুদ্রণ করে?

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d

(এই প্রোগ্রামটি একটি সরল "হ্যালো ওয়ার্ল্ড" প্রোগ্রাম হিসাবে পরিণত হয়।)

বিভ্রান্তিকর সমাধানগুলির মধ্যে, তারা নিচের দিকে নির্দেশ করে:

আরো গুরুত্ব সহকারে, এই ধাঁধা পূর্ববর্তী তিনটি পাঠকে শক্তিশালী করতে সহায়তা করে: যখন আপনি আপনার প্রোগ্রামগুলিতে অন্য কোনো উপায়ে প্রতিনিধিত্ব করতে পারে এমন অক্ষরগুলি সন্নিবেশ করতে হবে তখন ইউনিকোড পাল্টা আবশ্যক। অন্যান্য ক্ষেত্রে তাদের এড়িয়ে চলুন।

উত্স: জাভা: মন্তব্য কোড কোড নির্বাহ ?!

মেথড কম

নিম্নলিখিত কোড আউটপুট উত্পন্ন "হ্যালো ওয়ার্ল্ড!" (না সত্যিই, চেষ্টা করুন)।

public static void main(String... args) {

   // The comment below is not a typo.
   // \u000d System.out.println("Hello World!");
}

এর জন্য জাভা কম্পাইলার ইউনিকোড চরিত্র \u000d একটি নতুন লাইন হিসাবে পার্স করে এবং এতে রূপান্তরিত হয়:

public static void main(String... args) {

   // The comment below is not a typo.
   //
   System.out.println("Hello World!");
}

সুতরাং একটি মন্তব্য "মৃত্যুদন্ড কার্যকর" ফলে।

যেহেতু এটি ব্যবহার করা যেতে পারে দূষিত কোড "গোপন করা" বা কোনও খারাপ প্রোগ্রামার কল্পনা করতে পারে, কেন এটি মন্তব্যগুলিতে অনুমোদিত ?

কেন এই জাভা স্পেসিফিকেশন দ্বারা অনুমোদিত?




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

জাভা সোর্স কোড \ u000d এ ASCII সিআর চরিত্রের প্রতিটি উপায়ে সমান। এটি একটি লাইন শেষ, প্লেইন এবং সহজ, যেখানে এটি ঘটে। প্রশ্নের মধ্যে বিন্যাস বিভ্রান্তিকর, অক্ষর যে ক্রম আসলে বাক্যতুল্য অনুরূপ হয়:

public static void main(String... args) {
   // The comment below is no typo. 
   // 
 System.out.println("Hello World!");
}

IMHO সবচেয়ে সঠিক উত্তর তাই: কোড কার্যকর কারণ এটি একটি মন্তব্য নেই; এটা পরবর্তী লাইন। জাভাতে "মন্তব্যগুলিতে কোড চালানো" অনুমোদিত নয়, ঠিক যেমন আপনি আশা করবেন।

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




এটি একটি ইচ্ছাকৃত নকশা পছন্দ যা জাভাটির আসল ডিজাইনে ফিরে আসার পথে চলে।

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

এটি যুক্তিযুক্ত প্রোগ্রামগুলির (যেমন আইডিইএস) শর্ট টেক্সটটি দেখতে ব্যবহৃত হ'ল যা প্রোগ্রামগুলি ইউনিকোড পাল্টাগুলি ব্যাখ্যা করতে পারে না এবং সংশ্লিষ্ট গ্লিফ প্রদর্শন করতে পারে না।




ইউনিকোড পালিয়ে যাওয়ার কারণেই উত্তর দিতে পারেন এমন একমাত্র ব্যক্তিই এগুলি প্রয়োগ করেছিলেন যারা স্পেসিফিকেশন লিখেছেন।

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

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

ইউনিকোড ফেরাতে প্রবেশ করলে এটি অবিশ্বাস্যভাবে কঠিন: এটি নতুন লেক্সার নিয়মগুলির একটি সম্পূর্ণ লোড তৈরি করে।

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

এর উল্টোটি নির্দিষ্ট করা সহজ, তাই এটি স্পেসিফিকেশনটি সহজ করে তোলে এবং এটি কার্যকর করা সহজ।

নেতিবাচক, ভাল, আপনার উদাহরণ।




Related

java unicode comments