ক্লাস এবং ইন্টারফেসগুলিকে জনসাধারণ করতে টাইপস্রিপ্ট কেন "রফতানি" শব্দটি ব্যবহার করে?


136

টাইপস্ক্রিপ্টটি ছিনতাইয়ের সময় আমি বুঝতে পেরেছিলাম মডিউলগুলির মধ্যে আমার ক্লাসগুলি (নেমস্পেস হিসাবে ব্যবহৃত) অন্যান্য ক্লাসে উপলব্ধ ছিল না যদি না আমি লিখেছিলাম export তাদের আগে কীওয়ার্ড যেমন:

module some.namespace.here
{
   export class SomeClass{..}
}

সুতরাং এখন আমি উপরের কোডটি এর মতো ব্যবহার করতে পারি:

var someVar = new some.namespace.here.SomeClass();

তবে আমি কেবল ভাবছিলাম যে কেন এই কীওয়ার্ডটি কেবল কীওয়ার্ডটি ব্যবহার করার বিপরীতে ব্যবহার করা হয় publicযা পদ্ধতি স্তরে ব্যবহৃত হয় যা বোঝায় যে কোনও পদ্ধতি বা সম্পত্তি বহিরাগতভাবে অ্যাক্সেসযোগ্য। তাহলে কেন কেবল ক্লাস এবং ইন্টারফেস ইত্যাদিকে বাহ্যিকভাবে দৃশ্যমান করতে এই একই প্রক্রিয়াটি ব্যবহার করবেন না?

এটি ফলাফল হিসাবে কোড দেবে:

module some.namespace.here
{
   public class SomeClass{..}
}

উত্তর:


176

প্রাথমিক কারণ হ'ল exportECMAScript এর পরিকল্পনার সাথে মেলে। আপনি তর্ক করতে পারেন যে "তাদের" "পাবলিক" এর পরিবর্তে "রফতানি" ব্যবহার করা উচিত ছিল, তবে "এক্সপোর্ট / প্রাইভেট / প্রোটেক্টেড" ছাড়াও অ্যাক্সেস মডিফায়ারগুলির একটি খারাপ মিল রয়েছে, ।

টাইপস্ক্রিপ্টে, কোনও শ্রেণীর সদস্য হিসাবে চিহ্নিত করা publicবা privateউত্পন্ন জাভাস্ক্রিপ্টের কোনও প্রভাব নেই। এটি কেবল একটি ডিজাইন / সংকলন টাইম সরঞ্জাম যা আপনার টাইপসক্রিপ্ট কোডটিকে এমন জিনিসগুলিতে অ্যাক্সেস করা বন্ধ করতে ব্যবহার করতে পারেন।

সঙ্গে exportশব্দ, জাভাস্ক্রিপ্ট মডিউল রপ্তানি আইটেমটি যোগ করার জন্য একটি লাইন যোগ করে। আপনার উদাহরণে: here.SomeClass = SomeClass;

সুতরাং ধারণাগতভাবে, দৃশ্যমানতা নিয়ন্ত্রিত হিসাবে publicএবং privateকেবল সরঞ্জামদানের জন্য, যেখানে exportকীওয়ার্ড আউটপুট পরিবর্তন করে।


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

এর জন্য ধন্যবাদ. চুল টানতে বাঁচায়
কেন্ট আগুইলার

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

@ ফেন্টন এর অর্থ কি আপনি বোঝাতে পারেননি "আপনি যুক্তি দিতে পারতেন যে তাদের 'রফতানির' পরিবর্তে 'পাবলিক' ব্যবহার করা উচিত ছিল?
অ্যালান ইভানজিস্টিস্ট

@ অ্যালানএভেঞ্জলিস্ট আপনি অবশ্যই সেভাবে তর্ক করতে পারেন, বিশেষত যদি আপনার পটভূমি জাভাস্ক্রিপ্টের চেয়ে জাভা / সি # হয়।
ফেন্টন

49

স্টিভ ফেন্টনের উত্তরে যুক্ত করার জন্য কয়েকটি জিনিস:

  • export ইতিমধ্যে দুটি পৃথক জিনিস বোঝানো হয়েছে (এটি শীর্ষ স্তরের হোক বা না তার উপর নির্ভর করে); এর অর্থ একটি তৃতীয়াংশ যুক্ত করা সম্ভবত যুক্ত করার চেয়ে খারাপ public/private
  • এটি অবশ্যই বাস্তবায়ন সহজ করে না; publicবনাম এর যোগ জটিলতাexport তুচ্ছ। আমরা ইতিমধ্যে একটি গুচ্ছের আশেপাশে কীওয়ার্ডগুলি পরিবর্তন করেছি; এটা কঠিন নয়.
  • ES6 শ্রেণীর প্রস্তাবের সাথে সারিবদ্ধ হওয়ার জন্য শ্রেণীর সদস্যদের ডিফল্ট দৃশ্যমানতা অবশ্যই সর্বজনীন হতে হবে , সুতরাং "পাবলিক নয়" ইঙ্গিত করার জন্য আমাদের কিছু কীওয়ার্ডের প্রয়োজন। export( unexport??) এর উপযুক্ত কোনও প্রতিশব্দ নেই , তেমনি privateযৌক্তিক পছন্দও রয়েছে। একবার আপনার হয়ে গেলে private, publicএটির সমমনা হিসাবে চয়ন না করা কিছুটা উন্মাদ হবে
  • exportঅভ্যন্তরীণ মডিউলগুলিতে দৃশ্যমানতা সংশোধন করার জন্য ব্যবহার ES6 মডিউলগুলির সাথে সেরা অনুমানের সারিবদ্ধকরণ

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

5
আমি বাস্তবায়নের স্বাচ্ছন্দ্য সম্পর্কে আমার চটকদার বিবৃতিটি পুনঃসংশ্লিষ্ট এবং ক্ষমাপ্রার্থী হিসাবে একটি +1 অফার করছি :)
ফেন্টন

2
আপনি যা বলছেন তার সাথে আমি কিছুতেই একমত হয়েছি তবে "রফতানির জন্য উপযুক্ত কোনও প্রতিশব্দ নেই" - "আমদানি" হ'ল প্রতিশব্দ, এবং টাইপস্ক্রিপ্ট যা ব্যবহার করে, যখন আপনি রফতানযোগ্য শ্রেণীর সংজ্ঞা দেন তখন আপনি তার সাথে একমত হন এটি অন্য ফাইলগুলিতে আমদানি করুন অন্য export class User { name: string } একটি ফাইল: import {User} from ""./the_file_path_to_the_user_class; এখানে নেটিসস্ক্রিপ্ট
অ্যাডাম

3
কীভাবে কীওয়ার্ডটির উপযুক্ত ব্যবহার হতে পারে import"এই মানটি রফতানি হয় না " নির্দেশ করতে ব্যবহার করবেন ?
রায়ান কাভানহো

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