"ব্যবহার" নির্দেশনা এবং "ব্যবহার" বিবৃতি কেন সি # তে একই কীওয়ার্ডটি ব্যবহার করে?


10

usingডিরেক্টিভের আমাদের তাদের সম্পূর্ণরূপে যোগ্যতাসম্পন্ন নাম ব্যবহার না করেই ধরনের এক্সেস দেয়:

using MyNamespace.Foo.Bar;

usingবিবৃতি জন্য অন্বিত চিনি হিসাবে কাজ করে try/ finallyব্লক যা নিশ্চিত যে বস্তু সঠিকভাবে বিন্যস্ত করা হয়:

using(var x = new MyDisposableClass()) { ... }

এই দুটি পরিস্থিতিতে একে অপরের সাথে কোনও সম্পর্ক নেই বলে মনে হয়। কেন তারা একই কীওয়ার্ড ব্যবহার করবেন?

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


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

উত্তর:


7

উভয় ব্যবহারের usingসাথে সম্পর্কিত নয় বলে আপনি ঠিক।

তবে usingউভয় ক্ষেত্রে ব্যবহারের বেশ কয়েকটি ভাল কারণ রয়েছে ।

  • usingবিবৃতি .NET 1.0 জন্য তৈরী ও শব্দার্থিক ইন্দ্রিয় ( "আমি নিম্নলিখিত কোড এই নামস্থান ব্যবহার করছি") করে তোলে ছিল
  • উভয় ক্ষেত্রেই usingঅর্থবোধ তৈরি করে। সরল ইংরাজীতে, আপনি usingএকটি নেমস্পেস বা আপনি usingঘোষিত নিষ্পত্তিযোগ্য বস্তু।
  • usingকীওয়ার্ড ওভারলোড করে , ভাষা ডিজাইনারদের ভাষায় আর একটি সংরক্ষিত শব্দ তৈরি করতে হয় নি। এটি ভাষা পরিষ্কার রাখতে সাহায্য করে।

এটি সম্ভব যে তাদের সময় আবার দেওয়া হলে, ভাষা ডিজাইনাররা importদুটি পছন্দকে ছিন্ন করার জন্য নেমস্পেসের ঘোষণার জন্য ব্যবহার করতে পছন্দ করেছেন ( usingএকটি ডিসপোজেবল অবজেক্টটি .NET এর পরবর্তী সংস্করণে এসেছিল)। আমরা কখনই জানতে পারি না এবং এটি সত্যই গুরুত্বপূর্ণ নয় কারণ প্রসঙ্গে আপনি যে দুটি অর্থ ব্যবহার করছেন তা অত্যন্ত স্পষ্ট clear

এই সমস্ত কথা বলার পরেও যান না এবং আপনার কোডটি using MyNamespace.DisposableObject = DisposableObject;সর্বত্র নেমস্পেসের এলিয়াস দিয়ে ছড়িয়ে দিন।


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

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

@ জার্গডব্লিউমিত্যাগ, সম্পূর্ণ সত্য নয়। সি # এর প্রাসঙ্গিক কীওয়ার্ডগুলির পুরো গোছা রয়েছে যা এই নামের সাথে বিদ্যমান শনাক্তকারীদের কোডের সাথে বিরোধ নয় don't varক্লাসিক উদাহরণ হ'ল যেখানে একটি ইন-স্কোপ টাইপের নামটি varকীওয়ার্ডের চেয়ে বেশি।
ডেভিড আরনো

@ জার্গডব্লিউমিত্যাগ বা বিকল্পটি হ'ল সংকলকটির ভাষা সংস্করণ বাছাইযোগ্য (যেমন g++ --std=c++11, বা উত্স ফাইলগুলিকে একটি উপভাষা নির্দিষ্ট করার অনুমতি দেওয়া (যেমন হাস্কেল (?), র‌্যাকেট, পার্ল, এমনকি পাইথন হিসাবে রয়েছে)। কোনও ভাষাতেও ডিজাইন করা যেতে পারে একটি উপায় যে কিওয়ার্ড সম্ভব পরিচয়ে চিহ্নগুলি সিন্টেক্সের সংঘর্ষ না, কিছু শনাক্তকারী সংরক্ষণ (যে যদিও আপনার রান বন্ধ-কল ভাষা সামনে একটি lexer সঙ্গে একটি LALR পার্সার ব্যবহার বাস্তবায়নের কঠিন হতে পারে) ছাড়া।
আমন

1
@ আইগেনক্রিস আপনি সর্বদা @ এর সাথে কীওয়ার্ডের আগে এটি সনাক্তকারী হিসাবে ব্যবহার করতে পারেন@using
বিল টিউর

4

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

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

  • new জেনেরিক সীমাবদ্ধতায়
  • inমধ্যে foreachএবং বৈকল্পিক টাইপ পরামিতি
  • defaultএকটি ধারা switchহিসাবে এবং অপারেটর হিসাবে ( default(T))।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.