ক্লোজুরের কেন কেবল একটির পরিবর্তে শ্রেণি সংজ্ঞায়নের জন্য 5 টি উপায় রয়েছে?


84

ক্লোজারের জেন-ক্লাস, রেফাই, প্রক্সি এবং নতুন ক্লাসের মতো ডেটাটাইপগুলি সংজ্ঞায়িত করার জন্য ডিফটিপ এবং ডিফ্রেকার্ড রয়েছে। এমন একটি ভাষার জন্য যা সিনট্যাক্টিক সরলতার মূল্য দেয় এবং অপ্রয়োজনীয় জটিলতা ঘৃণা করে, এটি একটি ক্ষুধা বলে মনে হয়। কেউ বলতে পারে কেন এমন হয়? কমন লিস্প-স্টাইলের ডিফলক্লাস কি যথেষ্ট হতে পারে?

উত্তর:


91

এটি তিনটি ভিন্ন কারণের মিশ্রণ:

  1. Jvm এর নির্দিষ্ট ধরণের সিস্টেম
  2. প্রকারগুলি সংজ্ঞায়িত করার সময় বিভিন্ন ব্যবহারের ক্ষেত্রে কিছুটা পৃথক শব্দার্থের প্রয়োজন
  3. এগুলির কয়েকটি প্রাথমিকভাবে বিকশিত হয়েছিল এবং কিছু পরে ভাষা বিকশিত হয়েছিল।

সুতরাং প্রথমে, আসুন বিবেচনা করা যাক এগুলি কী করে। Deftype এবং জেনার-ক্লাস একই হয় যে তারা উভয় সামনের সময়ের সংকলনের জন্য একটি নামক শ্রেণি সংজ্ঞায়িত করে। জেনার-ক্লাস প্রথম এসেছিল এবং ক্লোজেয়ার ১.২ এ ডিফটিপ পরে। Deftype পছন্দ করা হয়, এবং আরও ভাল পারফরম্যান্স বৈশিষ্ট্য রয়েছে, তবে এটি আরও বাধাজনক। একটি ডিফিটাইপ ক্লাস একটি ইন্টারফেসের সাথে সামঞ্জস্য করতে পারে তবে অন্য শ্রেণীর কাছ থেকে উত্তরাধিকারী হতে পারে না।

রেফাইফ এবং প্রক্সি উভয়ই রানটাইমে বেনামে বেনাম শ্রেণীর উদাহরণ তৈরি করতে ব্যবহৃত হয়। প্রক্সি প্রথমে এসেছিল, ক্লোজার ১.২ এ রেফাইটি ডিফটিপ এবং ডিফ্রাইকার্ড সহ এসেছিল। রেফাইটিকে পছন্দ করা হয়, যেমন ডিফ্টাইপ হয়, যেখানে শব্দার্থিকগুলি খুব বেশি বাধা দেয় না।

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

আরও পড়ার জন্য চেক আউট:

Clojure.org ডেটাটাইপস পৃষ্ঠা

গুগল গ্রুপ থ্রেড যেখানে ডিফটাইপ এবং রিফাইটি চালু হয়েছিল


4
গুগল গ্রুপ থ্রেড খুব মূল্যবান ছিল। আমার বোঝা জাভা-ইন্টারপ প্রক্সিটির জন্য, জেন-ক্লাসটি বেশিরভাগ ক্ষেত্রেই রেফাই এবং ডিফটিপ দ্বারা প্রম্পট করা হয়। আমি আনন্দিত যে আমাদের কাছে এখন টাইপগুলি সংজ্ঞায়িত করার জন্য খুব কম 'প্রস্তাবিত' উপায় রয়েছে।
সলিল

4
@ ট্রাইল্কস: কী-মান জোড়ার ক্রম হিসাবে বস্তুটিকে আচরণ করার ক্ষমতা। ক্লোজারের আদি নেভিগেশন সুন্দর যে সমস্ত কিছুই ক্রম হিসাবে বিবেচনা করা যেতে পারে, যা খুব শক্তিশালী।
রব লাচলান

proxyকখনও কখনও পছন্দ করা হয় কারণ এটি রানটাইম সময়ে পদ্ধতি পরিবর্তন করার অনুমতি দেয়। (উদাহরণস্বরূপ , ক্লোজারের জয় , ২ য় সংস্করণ। পরামর্শ দেয় এটি কোনও ওয়েব হ্যান্ডেলারে কলব্যাকগুলি সংশোধন করার পক্ষে কার্যকর হতে পারে))
মঙ্গলবার

52

সংক্ষিপ্ত উত্তরটি হ'ল তাদের সবার আলাদা এবং দরকারী উদ্দেশ্য রয়েছে। অন্তর্নিহিত জেভিএমের বিভিন্ন বৈশিষ্ট্যগুলির সাথে কার্যকরভাবে আন্তঃযোগাযোগের প্রয়োজনের কারণে এই জটিলতাটি।

আপনার যদি কোনও জাভা ইন্টারপের প্রয়োজন না হয় তবে 99% সময় আপনি ডিফ্রেকর্ড বা একটি সাধারণ ক্লোজার ম্যাপের সাহায্যে সবচেয়ে ভাল সময় কাটাতে পারেন।

  • প্রোটোকল ব্যবহার করতে চাইলে ডিফ্রেকার্ড ব্যবহার করুন
  • অন্যথায় একটি নিয়মিত ক্লোজার ম্যাপ সম্ভবত সম্ভবত সবচেয়ে সহজ এবং বোধগম্য

যদি আপনার চাহিদা আরও জটিল হয় তবে নীচের ফ্লোচার্টটি ব্যাখ্যা করার জন্য একটি দুর্দান্ত সরঞ্জাম যা আপনি অন্যদের চেয়ে কেন এই বিকল্পগুলির মধ্যে একটি বেছে নেবেন:

http://cemerick.com/2011/07/05/flowchart-for-choosing-the-right-clojure-type-definition-form/

সঠিক ক্লোজার ধরণের সংজ্ঞা ফর্মটি বেছে নেওয়ার জন্য ফ্লোচার্ট


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

4
পার্থক্যগুলি বিশাল নয়, তবে আপনি যা অর্জন করার চেষ্টা করছেন তার বিচারে তারা দার্শনিকভাবে আলাদা । আমি মনে করি ক্লোজুরে একাধিক পদ্ধতির এই অন্তর্নিহিত পার্থক্যগুলি প্রতিফলিত করে, যা তাদের আলাদা আলাদা নাম দেওয়া উচিত এটির একটি ভাল কারণ।
মাইক্রা

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