আমাকে কিছু বিশৃঙ্খলা নিয়ে পিচ করে এই বিভ্রান্তির কিছুটা শুরু করার জন্য প্রস্তুত করি। আমি এটি ব্যাখ্যা করতে মান স্তরের উপমাটি ব্যবহার করতে চাই, কারণ লোকেরা এর সাথে আরও পরিচিত হতে থাকে more
একটি টাইপ কনস্ট্রাক্টর এমন এক প্রকার যা আপনি কোনও প্রকারের "কন্ট্রাক্ট" করতে আর্গুমেন্ট টাইপ করতে প্রয়োগ করতে পারেন।
একটি মান নির্মাতা এমন একটি মান যা আপনি একটি মান "কন্সট্রাক্ট" করার জন্য মূল্য যুক্তিগুলিতে প্রয়োগ করতে পারেন।
মান নির্মাতাদের সাধারণত "ফাংশন" বা "পদ্ধতি" বলা হয়। এই "কনস্ট্রাক্টর "গুলিকে" পলিমারফিক "ও বলা হয় (কারণ এগুলি "আকৃতির" বিভিন্ন "স্টাফ" তৈরি করতে ব্যবহার করা যেতে পারে), বা "বিমূর্তি" (যেহেতু তারা বিভিন্ন পলিমারফিক ইনস্ট্যান্টেশনের মধ্যে পরিবর্তিত হয় সে সম্পর্কে বিমূর্ততা দেয়)।
বিমূর্ততা / বহুবিজ্ঞানের প্রসঙ্গে, প্রথম-ক্রমটি বিমূর্তির "একক ব্যবহার" বোঝায়: আপনি একবারে কোনও প্রকারের উপর বিমূর্ত করেন তবে সেই প্রকারটি নিজেই কোনও কিছুর উপর বিমূর্ততা রাখতে পারে না। জাভা 5 জেনেরিকগুলি প্রথম-ক্রম।
উপরের বিমূর্ততার বৈশিষ্ট্যগুলির প্রথম ক্রমের ব্যাখ্যাটি হ'ল:
একটি টাইপ কনস্ট্রাক্টর এমন এক প্রকার যা আপনি সঠিক টাইপ "কনস্ট্রাক্ট" করতে উপযুক্ত টাইপ আর্গুমেন্টে প্রয়োগ করতে পারেন।
একটি মান নির্মাতা একটি মান যা আপনি যথাযথ মান "নির্মাণ" করার জন্য যথাযথ মান তর্কগুলিতে প্রয়োগ করতে পারেন।
জোর দেওয়ার জন্য কোনও বিমূর্ততা জড়িত নেই (আমি অনুমান করি আপনি এটি "শূন্য-ক্রম" বলতে পারেন, তবে আমি এটি কোথাও ব্যবহার করে দেখিনি) যেমন মান 1
বা প্রকার String
, আমরা সাধারণত বলি যে কোনও কিছু "যথাযথ" মান বা প্রকার।
একটি উপযুক্ত মান "তাত্ক্ষণিকভাবে ব্যবহারযোগ্য" এই অর্থে যে এটি আর্গুমেন্টের জন্য অপেক্ষা করছে না (এটি তাদের উপর বিমূর্ত নয়)। এগুলি এমন মান হিসাবে ভাবেন যা আপনি সহজেই মুদ্রণ / পরিদর্শন করতে পারেন (কোনও ক্রিয়াকলাপটি প্রতারণা করছে!) Serial
একটি সঠিক টাইপ এমন এক ধরণের যা মানগুলিকে শ্রেণিবদ্ধ করে (মান নির্মাতারা সহ), প্রকার নির্মাতারা কোনও মানকে শ্রেণিবদ্ধ করে না (যথাযথ প্রকারের জন্য প্রথমে তাদেরকে সঠিক টাইপের আর্গুমেন্ট প্রয়োগ করা প্রয়োজন)। কোনও প্রকারটি ইনস্ট্যান্ট করতে, এটি প্রয়োজনীয় (তবে পর্যাপ্ত নয়) এটি সঠিক ধরণের হতে পারে। (এটি একটি বিমূর্ত শ্রেণি বা আপনার কাছে অ্যাক্সেস নেই এমন একটি ক্লাস হতে পারে))
"উচ্চতর-আদেশ" কেবল একটি জেনেরিক শব্দ যার অর্থ পলিমারফিজম / অ্যাবস্ট্রাকশনটির বারবার ব্যবহার। পলিমারফিক ধরণের এবং মানগুলির জন্য এটি একই জিনিস means কংক্রিটলি, একটি উচ্চ-অর্ডারের বিমূর্ততা এমন কোনও কিছুকে বিমূর্ত করে যা কোনও কিছুর উপরে বিমূর্ত হয়। প্রকারভেদে, শব্দটি "উচ্চ-ধরণের" আরও সাধারণ "উচ্চতর-আদেশ" এর একটি বিশেষ-উদ্দেশ্য সংস্করণ।
সুতরাং, আমাদের বৈশিষ্ট্যটির উচ্চতর ক্রমের সংস্করণটি হয়ে যায়:
একটি টাইপ কনস্ট্রাক্টর এমন এক প্রকার যা আপনি যথাযথ টাইপ (কনস্ট্রাক্টর) "নির্মাণ" করার জন্য আর্গুমেন্ট (সঠিক টাইপ বা কনস্ট্রাক্টর) টাইপ করতে প্রয়োগ করতে পারেন।
একটি মান কন্সট্রাক্টর এমন একটি মান যা আপনি যথাযথ মান (কনস্ট্রাক্টর) "নির্মাণ" করতে আর্গুমেন্টের (যথাযথ মান বা মান নির্মাতাদের) প্রয়োগ করতে পারেন।
সুতরাং, "উচ্চতর-আদেশ" এর সহজ অর্থ হ'ল আপনি যখন "এক্স ওমাস্ট্রাক্টিং এক্স" বলছেন, আপনি সত্যিকার অর্থে এটি বোঝাচ্ছেন! X
করতে বিমূর্ত এটা সব চায়: ওভার আনমনা যে তার নিজস্ব "বিমূর্ততা অধিকারসমূহ" হারান না। (উপায় দ্বারা, আমি এখানে "বিমূর্ত" ক্রিয়াটি ব্যবহার করে বোঝাতে চাইছি: কোনও মান বা প্রকারের সংজ্ঞা দেওয়ার জন্য প্রয়োজনীয় নয় এমন কিছু রেখে দিতে, যাতে এটি বিমূর্ততার ব্যবহারকারীর দ্বারা আর্গুমেন্ট হিসাবে পরিবর্তিত / সরবরাহ করা যায় ।)
যথাযথ, প্রথম-আদেশ এবং উচ্চতর অর্ডার মান এবং প্রকারের কয়েকটি উদাহরণ (ইমেল দ্বারা লুটসের প্রশ্ন দ্বারা অনুপ্রাণিত):
proper first-order higher-order
values 10 (x: Int) => x (f: (Int => Int)) => f(10)
types (classes) String List Functor
types String ({type λ[x] = x})#λ ({type λ[F[x]] = F[String]})#λ
যেখানে ব্যবহৃত ক্লাসগুলি সংজ্ঞায়িত করা হয়েছিল:
class String
class List[T]
class Functor[F[_]]
সংজ্ঞায়িত ক্লাসগুলির মাধ্যমে নির্দেশনা এড়াতে আপনার কোনওভাবে বেনাম প্রকারের ক্রিয়াকলাপগুলি প্রকাশ করা দরকার যা সরাসরি স্কালায় প্রকাশযোগ্য নয়, তবে আপনি খুব বেশি সিনট্যাকটিক ওভারহেড ছাড়াই কাঠামোগত ধরণের ব্যবহার করতে পারেন ( #λ
স্টাইলটি https://stackoverflow.com এর কারণে হয় / ব্যবহারকারী / 160378 / রেট্রোনিম আফাইক):
বেনামি ধরণের ফাংশন সমর্থন করে এমন স্কেলার ভবিষ্যতের কিছু অনুমানের সংস্করণে, আপনি উদাহরণ থেকে শেষ লাইনটি সংক্ষেপণ করতে পারেন:
types (informally) String [x] => x [F[x]] => F[String]) // I repeat, this is not valid Scala, and might never be
(একটি ব্যক্তিগত নোটে, আমি কখনও আফসোস করি যে "উচ্চ ধরণের ধরণের" সম্পর্কে কথা বলার পরে সেগুলি কেবল টাইপস! আপনি যখন একেবারে বিস্মৃত হওয়া প্রয়োজন তখন আমি "টাইপ কনস্ট্রাক্টর প্যারামিটার", "টাইপ কনস্ট্রাক্টর মেম্বার") এর মত কথা বলার পরামর্শ দিই , বা "টাইপ কনস্ট্রাক্টর ওরফে", এটি জোর দেওয়ার জন্য যে আপনি কেবল সঠিক ধরণের কথা বলছেন না))
PS: বিষয়গুলিকে আরও জটিল করার জন্য, "পলিমারফিক" আলাদাভাবে অস্পষ্ট, যেহেতু পলিমারফিক টাইপের অর্থ মাঝে মাঝে একটি সর্বজনীন পরিমাণযুক্ত প্রকার, যেমন Forall T, T => T
একটি যথাযথ প্রকার, কারণ এটি বহুবর্ষীয় মানগুলিকে শ্রেণিবদ্ধ করে (স্কালায়, এই মানটি হতে পারে) কাঠামোগত ধরণ হিসাবে লিখিত {def apply[T](x: T): T = x}
)