কেন চারসেকেন্সের সংজ্ঞা (চারসেকেন্স) নেই?


11

এটি জাভা এসই এবং অ্যান্ড্রয়েড উভয়ের ক্ষেত্রেই প্রযোজ্য, কারণ চুক্তিগুলি অভিন্ন।

CharSequenceএকটি contains(CharSequence)পদ্ধতি সংজ্ঞায়িত করে না । আমি কোনও কারণ খুঁজে পাচ্ছি না এবং এর সাথে এটি বেশ কার্যকর হবে, CharSequence#toString()অক্ষরের ক্রম পরীক্ষা করার জন্য কল করার প্রয়োজনকে আটকানো ।

উদাহরণস্বরূপ, অ্যান্ড্রয়েডে ব্যবহারকারীরা কল করতে বাধ্য হয় Editable#toString()এটিতে অক্ষরগুলির ক্রম রয়েছে কিনা তা বোঝাতে বাধ্য করা হয় , যদিও Editableপ্রয়োগ রয়েছে CharSequence, CharSequenceসংজ্ঞায়িত হলে এড়ানো যায় contains(CharSequence)

এই নকশা পছন্দ পিছনে ধারণা কি? এটি কি কোনও সম্ভাব্য তদারকি, বা এর কোনও নকশার কারণ রয়েছে?

উত্তর:


10

মূল বিষয়টি CharSequenceহ'ল একটি চরিত্রের ক্রমকে কেবল পঠনযোগ্য দর্শন সরবরাহ করা এবং এটিই। এই ইন্টারফেসটি কোনও স্ট্রিং ম্যানিপুলেশন বা অনুসন্ধানের পদ্ধতি সরবরাহ করে না। এগুলি সুযোগের বাইরে।

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

কেবলমাত্র একটি অক্ষর উত্স প্রয়োজন এমন ক্লায়েন্টের জন্য অনুসন্ধান পদ্ধতিগুলির প্রয়োজন নেই।

অবশ্যই এই নীতিটি অতিরঞ্জিত করা এবং এক হাজার ছোট ইন্টারফেস দিয়ে শেষ করা সম্ভব। এটিও ভাল নয়। সুতরাং CharSequenceইন্টারফেসটি কেবল সর্বনিম্ন charAt()এবং length()পদ্ধতিগুলিই ধারণ করে না , তবে গভীরভাবে সম্পর্কিত সুবিধার্থেও রয়েছে subSequence()। (একটি চারসিক্যেন্স সম্ভবত কোনও স্ট্রিং অনুলিপি ছাড়াই একটি উপসর্গের দিকে একটি ভিউ সরবরাহ করতে পারে, যার কারণে এটি একটি উদাহরণ পদ্ধতি হওয়া উচিত)। উল্লেখ toString()করা ঠিক আছে কারণ সেই পদ্ধতিটি যেভাবেই হতে পারে Object। পদ্ধতি chars()এবং একটি ইন্টারফেস একটি codePoints()অভিযোজিত । যেহেতু এগুলি ডিফল্ট পদ্ধতি, তারা ক্লাস প্রয়োগকারীগুলির জন্য অতিরিক্ত প্রয়োজনীয়তা চাপায় না ।CharSequenceStreamCharSequence

এই CharSequenceধরণেরটি কার্যকর হয় যখন কোনও পদ্ধতিতে নির্দিষ্ট প্রয়োগের নির্দিষ্টকরণ ছাড়াই জেনেরিক চরিত্রের উত্সের প্রয়োজন হয় (উদাহরণস্বরূপ স্ট্রিং বনাম চারবুফার বনাম স্ট্রিংবুডার)। String#join()এবং String#contains()পদ্ধতি ব্যবহার করে ভাল উদাহরণ CharSequenceগুলি।

CharSequenceকোনও contains()পদ্ধতি সরবরাহের জন্য এটি প্রয়োজনীয় নয় কারণ এটি বাহ্যিকভাবে প্রয়োগ করা যেতে পারে। জাভাতে সি # এর সম্প্রসারণ পদ্ধতির সুবিধা না থাকলেও একটি স্থির পদ্ধতি মূলত একই জিনিস। পরিবর্তে boolean Editable#contains(CharSequence needle)আপনি একটি ছিল static boolean contains(CharSequence haystack, CharSequence needle)স্ট্রিং অনুসন্ধান অ্যালগরিদমগুলি একটি কম্পিউটারের বিজ্ঞানের একটি সুপরিচিত বিষয়। বিভিন্ন ট্রেড অফসের সাথে বিভিন্ন অ্যালগরিদম সহজেই উপলব্ধ।

আরও পড়া:


2
আপনি উল্লেখ " এই ইন্টারফেসে কোনো স্ট্রিং ম্যানিপুলেশন বা অনুসন্ধানের পদ্ধতি প্রদান করে না। আর সুযোগ সীমার বাইরে। ", কিন্তু containsএকটা পরিবর্তন ঘটে পদ্ধতি নয়, এবং সেখানে নেই থাকবেই অনুসন্ধানের পদ্ধতি ( charAt), সুতরাং কিভাবে এই প্রযোজ্য ?. এছাড়াও, " এগুলি ডিফল্ট পদ্ধতি হওয়ায় তারা CharSequence প্রয়োগকারী ক্লাসগুলির জন্য অতিরিক্ত প্রয়োজনীয়তা আরোপ করে না " "- ক্লাসগুলি প্রয়োগের জন্য প্রয়োজনীয়তা সরিয়ে ইমপ্লেরcontains মাধ্যমে ডিফল্ট হিসাবে প্রয়োগ করা যায়নি return to String().contains(...)?
ভিন্স এমি

1
হ্যাঁ, contains()একটি ডিফল্ট পদ্ধতি হতে পারে। যদি এটি বিদ্যমান থাকে String#containsতবে এটি কার্যকরভাবে প্রয়োগ করা উচিত নয় অন্যভাবে: স্ট্রিংয়ের চারসেকেন্স বাস্তবায়ন ব্যবহার করা উচিত। charAt()ভিন্ন। এটি কোনও অনুসন্ধান অ্যালগরিদম বাস্তবায়ন করে না, এটি এর একটি গুরুত্বপূর্ণ অংশ CharSequence: এটি ছাড়া বিষয়বস্তুগুলি অন্য ধরণের মতো অনুলিপি করা যায় না String। স্ট্রিমগুলি জাভা 8-র একটি গুরুত্বপূর্ণ অংশ এবং এই ডিফল্ট পদ্ধতিগুলি যুক্ত করা যেমন অন্যান্য ইন্টারফেসের সংযোজন অনুসারে Collection
আমন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.