প্যারামেট্রিক সংস্করণ ব্যবহার করে দেয়
- ফাংশন ব্যবহারকারীদের আরও তথ্য
- আপনি যে পরিমাণ প্রোগ্রাম লিখতে পারেন তা সীমাবদ্ধ করে (বিনামূল্যে বাগ চেকিং)
একটি এলোমেলো উদাহরণ হিসাবে, ধরুন আমাদের কাছে এমন একটি পদ্ধতি রয়েছে যা চতুর্ভুজ সমীকরণের শিকড় গণনা করে
int solve(int a, int b, int c) {
// My 7th grade math teacher is laughing somewhere
}
এবং তারপর আপনি এটা ছাড়া ভীষণ পছন্দ সংখ্যা অন্যান্য প্রকারের উপর কাজ করতে চান int
। আপনি যেমন কিছু লিখতে পারেন
Num solve(Num a, Num b, Num c){
...
}
সমস্যাটি হ'ল এটি আপনি যা চান তা বলে না। এটা বলে
আমাকে সংখ্যার মতো যে কোনও 3 টি জিনিস দিন (অগত্যা একইভাবে নয়) এবং আমি আপনাকে কিছু সংখ্যক ফিরিয়ে দেব
আমরা ভালো কিছু করতে পারেন না int sol = solve(a, b, c)
যদি a
, b
এবং c
হয় int
কারণ আমরা জানি না পদ্ধতি একটি ফিরে যাচ্ছে গুলি int
শেষ! এটি যদি আমরা কোনও বৃহত্তর অভিব্যক্তিতে সমাধানটি ব্যবহার করতে চাই তবে ডাউনকাস্টিংয়ের সাথে কিছু বিশ্রী নাচ এবং প্রার্থনা করার দিকে পরিচালিত করে।
ফাংশনের অভ্যন্তরে, কেউ আমাদের কাছে একটি ভাসা, বিগিন্ট এবং ডিগ্রি সরবরাহ করতে পারে এবং আমরা সেগুলি যোগ করতে এবং একসাথে বহুগুণ করতে চাই। আমরা এটিকে স্থিতিশীলভাবে প্রত্যাখ্যান করতে চাই কারণ এই 3 টি শ্রেণির মধ্যে ক্রিয়াকলাপগুলি গীবর হতে চলেছে। ডিগ্রিগুলি মোড 360 হয় তাই এটির ক্ষেত্রে এমনটি হবে না a.plus(b) = b.plus(a)
এবং একই রকম ilaষধিটি দেখা দেবে।
আমরা যদি সাব-টাইপিংয়ের মাধ্যমে প্যারামেট্রিক পলিমারফিজম ব্যবহার করি তবে আমরা এই সমস্ত বিষয়টিকে নিয়ম করে দেখতে পারি কারণ আমাদের ধরণটি আসলে আমাদের অর্থ কী বলে
<T : Num> T solve(T a, T b, T c)
বা কথায় কথায় "আপনি যদি আমাকে এমন কোনও প্রকার দেন যা একটি সংখ্যা হয় তবে আমি সেই সহগগুলির সাথে সমীকরণগুলি সমাধান করতে পারি"।
এটি অন্যান্য অনেক জায়গাতেও আসে। উদাহরণ আরেকটি ভাল উৎস ফাংশন যা বিমূর্ত ধারক, Ala কিছু বাছাই ধরে আছে reverse
, sort
, map
, ইত্যাদি