জাভাতে সুইফট বনাম ইন্টারফেসে প্রোটোকলের তুলনা করুন


149

আমি অ্যাপল বিকাশকারী পৃষ্ঠা থেকে আইওএস টিউটোরিয়ালটি দিয়ে যাচ্ছি ।

এটি আমার কাছে মনে হয় protocolএবং interfaceপ্রায় একই কার্যকারিতা রয়েছে।

  • দুজনের মধ্যে কি কোনও মতভেদ আছে?

  • প্রকল্পের বিভিন্ন ব্যবহার?

আপডেট করা হয়েছে

হ্যাঁ , আমি উপরের লিঙ্কটি পড়া করেনি এবং আমি এখনও নিশ্চিত পার্থক্য এবং মধ্যবর্তী ব্যবহার নই protocolএবং interface। আমি যখন এই জাতীয় প্রশ্ন জিজ্ঞাসা করি, আমি বিষয়টি সম্পর্কে একটি সহজ ব্যাখ্যা দেখতে চাই। ডকুমেন্টেশন থেকে কিছু পাওয়া শক্ত হয়ে উঠতে পারে।


1
জাভাতে সুইফ্ট এবং ইন্টারফেসে প্রোটোকলগুলি একই ধারণা। এখানে
বিবেক মলকার

69
আমি মনে করি ভাষার মধ্যে পার্থক্য সম্পর্কে এই জাতীয় প্রশ্নগুলি ভাষা বৈশিষ্ট্যগুলি বোঝার জন্য সত্যই কার্যকর। এবং আমি মনে করি না যে তারা অযৌক্তিক মতামতযুক্ত উত্তরগুলি নিয়ে যায় বা ডকুমেন্টেশনের উত্তর খুঁজে পাওয়া খুব সহজ নয়। সুতরাং আমি মনে করি না যে এই প্রশ্নের নীচের ভোটগুলি ন্যায়সঙ্গত।
Lii

1
জাভা ইন্টারফেসগুলি সম্পর্কে stackoverflow.com/a/41143492/294884 সম্পর্কে কয়েকটি সমালোচনামূলক বাস্তব-বিশ্বের পয়েন্ট রয়েছে - এটি জাভা চেষ্টা করে সুইফ্টের সাথে নতুন কারও জন্য মূল বিষয় হবে
ফ্যাটি

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

2
ইন্টারফেসের পরিবর্তে
সুইফটে

উত্তর:


117

মূলত প্রোটোকলগুলি জাভা ইন্টারফেসের সাথে বাদে খুব অনুরূপ:

  • সুইফ্ট প্রোটোকলগুলি এমন বৈশিষ্ট্যও নির্দিষ্ট করতে পারে যা প্রয়োগ করা উচিত (যেমন ক্ষেত্রগুলি)
  • পরিবর্তনকারী কীওয়ার্ড ব্যবহারের মাধ্যমে সুইফ্ট প্রোটোকলগুলিকে মান / রেফারেন্সের সাথে ডিল করতে হবে (কারণ প্রোটোকলগুলি স্ট্রাক্ট এবং ক্লাস দ্বারা প্রয়োগ করা যেতে পারে)
  • আপনি প্রোটোকল <> কীওয়ার্ডের সাথে যে কোনও সময়ে প্রোটোকল একত্রিত করতে পারেন। উদাহরণস্বরূপ, একটি ফাংশন প্যারামিটার ঘোষণা করা যা অবশ্যই প্রোটোকল এ এবং বি মেনে চলতে হবে:

func foo ( var1 : protocol<A, B> ){}

এগুলি জাভা বিকাশকারী (বা কমপক্ষে আমি এতদূর যা স্পষ্ট করেছি) এর জন্য তাৎক্ষণিকভাবে স্পষ্ট পার্থক্য।


13
" প্রোটোকল <> কীওয়ার্ড ": এটি সত্যিই দুর্দান্ত! আমি মনে করি এটিই যাকে টাইপ সিস্টেম তত্ত্ব সম্প্রদায়ের মধ্যে ছেদ টাইপ বলা হয় । আমি জাভা আপনার একাধিক সীমা সহ পরামিতি টাইপ করতে পারেন। এই কাগজটি জাভাতে তাদের প্রথম শ্রেণীর ধরণের হিসাবে প্রবর্তনের পরামর্শ দেয়, সিনট্যাক্স সহ তাদের বোঝাতে।
Lii

7
চমৎকার সারসংক্ষেপ। আরও কয়েকটি গুরুত্বপূর্ণ বৈশিষ্ট্য: সুইফ্ট প্রোটোকলগুলি সম্পর্কিত ধরণের প্রয়োজনীয়তাগুলিও নির্দিষ্ট করতে পারে — যেমন কোনও সংগ্রহের ধরণের একটি সম্পর্কিত সূচক প্রকার থাকে, বা তুলনামূলক ধরণের তুলনা পদ্ধতিতে একই ধরণের একটি প্যারামিটারের প্রয়োজন হয়। এবং সুইফট ২.০-তে, প্রোটোকল এক্সটেনশানগুলি প্রোটোকলের প্রয়োজনীয়তা পূরণকারী প্রকারগুলিতে প্রকৃত কার্যকারিতা যুক্ত করতে পারে।
রিক্সার

2
@ চালক জাভা 8 এছাড়াও default কীওয়ার্ডের সাথে কোনও পদ্ধতি ট্যাগ করে কোনও ইন্টারফেসে প্রয়োগের যোগ করতে পারে । দেখুন ওরাকল টিউটোরিয়াল
তুলসী বাউর্ক

5
প্রোটোকল <> কীওয়ার্ডটি এখন এম্পারস্যান্ডের পক্ষে সরানো হয়েছে। সুতরাং আপনি লিখতে পারেন: যাক সি: এ & বি
পল রবিনসন

2
ইন্টারফেসের পরিবর্তে
সুইফটে

33

@ থমাস Schar এর উত্তর পরিপূরক। সুইফট প্রোটোকল যাদুটি এক্সটেনশন থেকে আসে।

  • সুইফট প্রোটোকল এক্সটেনশনের মাধ্যমে বাস্তবায়ন পেতে পারে (সুইফট
    2)। জাভা 8 ইন্টারফেসের ডিফল্ট বাস্তবায়ন থাকতে পারে তবে এটি "প্রত্যাখাতভাবে" করা যায় না।
  • সুইফ্টে, আপনি
    যে কোনও শ্রেণি বা কাঠামোয় প্রোটোকল প্রয়োজনীয়তা (এবং প্রয়োজনে এর বাস্তবায়ন) "প্রতিবিম্বিতভাবে" যুক্ত করতে পারেন ।
  • সুইফ্ট প্রোটোকলগুলি জেনেরিক (যেমন <..>) কাস্টমাইজেশন প্যাটার্ন অনুসরণ করে না, তবে একটি টাইপালিয়াস স্কিম (যেমন অ্যাসোসিয়েটেড টাইপস)। শুরুতে বিভ্রান্তিকর হতে পারে তবে
    কিছু ক্ষেত্রে "অ্যাঙ্গেল ব্র্যাকেট অন্ধত্ব" এড়াতে পারে ।
  • প্রোটোকলের প্রয়োজনীয়তা এবং এক্সটেনশানগুলি কোথায় এবং কীভাবে প্রয়োগ করা হবে সে সম্পর্কে সুনির্দিষ্টভাবে সুনির্দিষ্টভাবে মঞ্জুরি দেয় সুইফটের একটি প্রকারের ধরণের প্যাটার্ন মিল রয়েছে। জাভা থেকে আসার সময় এটি বিভ্রান্তিকর হতে পারে তবে এতে প্রচুর শক্তি রয়েছে।
  • একটি সম্পত্তি / প্যারামের জন্য একটি সুইফ্ট প্রোটোকল (যেমন উদযাপনকারী: প্রোটোকল) রচনা করা যায়

একটি জিনিস যা আমাকে কয়েক ঘন্টা ধরে আমার মাথা আঁচড়ায় তা হ'ল সমস্ত প্রোটোকল সম্পত্তির ধরণ হিসাবে ব্যবহার করা যায় না। উদাহরণস্বরূপ, যদি টাইপালিয়াসের সাথে আপনার কোনও প্রোটোকল থাকে তবে আপনি এটিকে সরাসরি এক ধরণের সম্পত্তি হিসাবে ব্যবহার করতে পারবেন না (আপনি যখন এটির বিষয়ে চিন্তা করেন তখন তা বোধ হয় তবে জাভা থেকে আসার সাথে সাথে আমরা সত্যই ইউজারডাও: আইডাওর মতো সম্পত্তি পেতে চাই)।


7
এছাড়াও সুইফ্ট প্রোটোকলগুলির জাভা ইন্টারফেসের বিপরীতে alচ্ছিক সদস্য থাকতে পারে।
চক্ষু অ্যাপ্লিকেশনগুলি LLC

4
একটি ছোটখাটো পয়েন্ট যা সর্বদা সুইফটে উঠে আসে তা হ'ল, (হাস্যকরভাবে) কোনও বিমূর্ত ফাংশন নেই, তাই আপনি কেবল "মুদ্রণ আপনি এটিকে ভুলে গেছেন!" ... স্ট্যাকওভারফ্লো
24111430/

@Fattie। আপনি একটি ফাংশনটিতে "প্রয়োজনীয়" কীওয়ার্ডটি নির্দিষ্ট করার জন্য এটিতে একটি সাবক্লাস বাস্তবায়ন প্রয়োজন। সুতরাং সত্যিই, একটি বাস্তব বিন্দু তুলনায় আরও একটি ছোট অজ্ঞতা মত।
ডিস্ক বেসটার

@ ডার্কবেস্টার - চিয়ার্স - অপেক্ষা করুন, আপনি আরম্ভকারীদের সাথে কথা বলছেন ??
ফ্যাটি

আবার @ ডার্কবেস্টার আমার কিছুটা বিভ্রান্তি হতে পারে তবে requiredএকটি প্রোটোকলে ফাংশন করার আগে কেউ ব্যবহার করতে পারবেন না , আপনি ঠিক পান 'required' may only be used on 'init' declarations...
ফ্যাটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.