_ (আন্ডারস্কোর) একটি সংরক্ষিত কীওয়ার্ড


94

আমি সবেমাত্র sনিম্নলিখিত ল্যাম্বডা এক্সপ্রেশন দ্বারা প্রতিস্থাপন করেছি _:

s -> Integer.parseInt(s)

গ্রহণের সংকলক বলেছেন:

'_' সনাক্তকারী হিসাবে ব্যবহার করা উচিত নয়, কারণ এটি উত্স স্তর 1.8 থেকে একটি সংরক্ষিত কীওয়ার্ড।

আমি জেএলএস -৩.৯ লেক্সিকাল স্ট্রাকচার / কীওয়ার্ডগুলিতে কোনও ব্যাখ্যা পাইনি

উত্তর:


86

দেখার জায়গাটি জেএলএস §15.27.1। ল্যাম্বদা পরামিতি

ল্যাম্বদা প্যারামিটারের নাম _ থাকলে (এটি একটি একক আন্ডারস্কোর অক্ষর) থাকে তবে এটি একটি সংকলন-সময় ত্রুটি।

কোনও প্রসঙ্গে ভেরিয়েবল নামের _ ব্যবহার নিরুত্সাহিত করা হয়। জাভা প্রোগ্রামিং ভাষার ভবিষ্যতের সংস্করণগুলি এই নামটি একটি কীওয়ার্ড হিসাবে সংরক্ষণ করতে পারে এবং / অথবা এটিকে বিশেষ শব্দার্থবিদ্যা দিতে পারে।

সুতরাং Eclipse বার্তাটি বিভ্রান্তিমূলক, বিশেষত একই বার্তা উভয় ক্ষেত্রেই ব্যবহৃত হয় যখন ল্যাম্বডা প্যারামিটারের জন্য ত্রুটি উত্পন্ন হয় বা যখন অন্য কোনও _শনাক্তকারীর জন্য সতর্কতা উত্পন্ন হয় ।


24
নোট করুন যে জাভা 9 _হিসাবে, কোনও ল্যাম্বডা প্যারামিটারের নাম হিসাবে নয়, কোনও আইনী সনাক্তকারী নাম হিসাবেও অনুমোদিত নয়। এটি আসলে বিল্ড 43 এ স্থির করা হয়েছিল: বাগস.ওপেনজডক.জভা.net
জিন-

4
@ এলএসক্ললিন: "জাভা প্রোগ্রামিং ভাষার ভবিষ্যতের সংস্করণগুলি কি এই নামটিকে কীওয়ার্ড হিসাবে সংরক্ষণ করতে পারে এবং / অথবা এটিকে বিশেষ শব্দার্থবিজ্ঞান দিতে পারে" বিবৃতিটি কি যথেষ্ট? ঠিক আছে, "ব্যবহার করবে" দ্বারা "রিজার্ভ করতে পারেন" এর পরিবর্তে আপনি ছবিটি পাবেন। সম্ভবত এই মেইল ​​রেফারেন্স সাহায্য করে ...
হোলার

6
এটা কি? জাভা ভেঙে পিছনে সামঞ্জস্যতা?
আর্টুরো টরেস সানচেজ

8
@ আর্টুরো টরেস সানচেজ: এটি নতুন কিছু নয়। আইনী শনাক্তকারীরা যখন ছিলেন enumএবং assertছিলেন…
হোলার

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

25

এটি JEP 302 এর দ্বিতীয় ধাপ , যা ল্যাম্বডা এক্সপ্রেশনগুলিতে অব্যবহৃত পরামিতিগুলি বোঝাতে একটি বিশেষ চরিত্র হিসাবে আন্ডারস্কোর যুক্ত করতে চলেছে।

আন্ডারস্কোরগুলির চিকিত্সা

অনেক ভাষায়, _নামবিহীন ল্যাম্বদা প্যারামিটার (এবং একইভাবে পদ্ধতি এবং ব্যতিক্রম প্যারামিটারের জন্য) বোঝাতে একটি আন্ডারস্কোর ( ) ব্যবহার করা সাধারণ :

BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);

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


4
এই ব্যবহারটি ব্রায়ান গোয়েজ তার প্রকল্পের অ্যাম্বার সম্পর্কে 2017-11 - এর তাঁর ডিভোএক্সএক্স আলোচনায় আলোচনা করেছেন ।
তুলসী বাউরক

ঠিক আছে, তবে জে 8-তে অব্যবহৃত পরামিতিগুলি বোঝানোর বিকল্প কী? তা কি আদৌ সম্ভব নয়?
ম্যানুয়েল

4
আমরা বর্তমানে $এই উদ্দেশ্যে ব্যবহার করি ।
অ্যাভেন্তুরিন

4
আমি এখন জাভা 14 এ আছি এবং আমি এখনও নামহীন ল্যাম্বদা প্যারামিটার হিসাবে আন্ডারস্কোর ব্যবহার করতে পারি না। জেসিপি যা অর্জনের জন্য নির্ধারিত হয়েছিল, তারা বিপরীত অর্জন করেছে বলে মনে হয়।
ফ্রান্স

4
@ ফ্রান্স নোট করুন যে জেপি কেবলমাত্র প্রার্থী পর্যায়ে (আজকের হিসাবে)। এটি এখনও শেষ হয়নি। জেইপি প্রক্রিয়া সম্পর্কে আরও তথ্যের জন্য দেখুন জেপ 1
আলেকজান্দ্রি দে

5

জাভা SE 9 জাভা ভাষা পরিবর্তনগুলি https://docs.oracle.com/javase/9/language/toc.htm#JSLAN-GUID-16A5183A-DC0D-4A96-B9D8-AAC9671222DD

জাভা 9 থেকে, _ বর্ণচিহ্নটি কেবল ল্যাম্বদা প্রসঙ্গে নয়, সনাক্তকারী হিসাবে আর ব্যবহার করা যাবে না

আন্ডারস্কোর চরিত্রটি কোনও আইনি নাম নয়।

আপনি যদি শনাক্তকারী আন্ডারস্কোর অক্ষর ("_") ব্যবহার করেন তবে আপনার উত্স কোডটি আর সংকলন করা যাবে না।

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