প্রোগ্রামিং ভাষাগুলি রিটার্নের ধরণের বিষয়টি বিবেচনা না করে কেন পদ্ধতি স্বাক্ষর তৈরি করে?


11

আমি এমন অনেক ভাষার সাথে কাজ করেছি যা রিটার্নের ধরণের ভিত্তিতে কোনও পদ্ধতি স্বাক্ষর তৈরি করে না। আমি একটি (সম্ভবত কিছু?) এর সাথেও কাজ করেছি। যেগুলি অতীতে আমাকে সমস্যা দেয় না (যেমন এখানে )। প্রোগ্রামিং ভাষাগুলি রিটার্নের ধরণের বিষয়টি বিবেচনা না করে কেন পদ্ধতি স্বাক্ষর তৈরি করে?

আপডেট: আমি স্ট্যাটিকালি টাইপ করা ভাষার সংকলন বিশেষভাবে উল্লেখ করছি refer


এটি একটি অত্যন্ত ভিত্তিহীন অনুমান, তবে আমি অনুমান করছি যে এটি সংকলক বাস্তবায়ন এবং / বা সরঞ্জাম সহায়তার অসুবিধার সাথে কিছু করার আছে।
চার্লস ল্যামবার্ট

হাসকেলে আপনি মূলত ফাংশনগুলি তৈরি করতে টাইপচলগুলি ব্যবহার করতে পারেন যা রিটার্ন টাইপ নির্ভরশীল। আমি <3 হাস্কেল: ডি: ডি: ডি
থমাস এডিং

উত্তর:


5

এটি টাইপকাস্টিং এবং টাইপ শ্রেণিবিন্যাসের সাথে ভাল জাল হবে না। আপনার যদি কোনও পদ্ধতির দুটি সংস্করণ থাকে যার মধ্যে একটি রিটার্ন করে এ এবং অন্যটি বি টাইপ করে, আপনি সমস্যার মধ্যে পড়ে যখন:

  • A বা B একে অপরের উপপ্রকার, এবং আপনি যে সুপারটাইপ হয় তার ফেরতের মান নির্ধারণ করেন।
  • A এবং B এর একটি প্রচলিত সুপারটাইপ থাকে এবং আপনি এ জাতীয় একটি সুপারটাইপ মান নির্ধারণ করেন।

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


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

@ চার্লস ল্যামবার্ট: এটি ক্লাস এ, বি, বা সি ক্লাসে অপারেশন নয় এটি একই নাম এবং পরামিতি তালিকার দুটি ফাংশন, যার মধ্যে একটি টাইপ এ-এর কিছু প্রত্যাবর্তন করে এবং অন্যটি বি টাইপের কিছু প্রত্যাবর্তন করে এই প্রশ্নটি প্রযোজ্য কেবল ওওপি সিস্টেমের চেয়ে বেশি, তাই আমি সাধারণ ধরণের এবং ফাংশনের উপর ভিত্তি করে উত্তর দিয়েছি। এছাড়াও, আপনার প্রত্যাখ্যানমূলক উদাহরণটি কী সম্পাদন করতে চায় তা আমি বুঝতে পারি না; আমার তাতে সাড়া দেওয়ার জন্য আরও বিশদ প্রয়োজন
jprete

একটি উদাহরণ উদাহরণের জন্য খুব ছোট। পেস্টবিন.com/ জেআর 39 পি কে এস 0 মূলত যে ভাষাগুলিতে স্বাক্ষরটিতে রিটার্ন টাইপ অন্তর্ভুক্ত রয়েছে সেগুলি ইতিমধ্যে আপনার বর্ণনা করা সমস্যা নিরসনের উপায় নিয়ে এসেছে। এটি কোডিং কনভেনশন হোক বা কেবল স্ট্যান্ডার্ড অনুশীলন। এছাড়াও লক্ষণীয়, আপনি যা লেখেন তার চেয়ে অনেক বেশি নয় যেগুলি কেবল রিটার্নের ক্ষেত্রে পৃথক পদ্ধতি তৈরি করে warrant সুতরাং আবারও, আপনি
চার্লস ল্যামবার্ট

কোনও নিয়ম থাকতে কোনও অসুবিধা হবে যে প্রদত্ত যে কোনও যুক্তি স্বাক্ষরের জন্য কেবলমাত্র একটি "প্রাথমিক" পদ্ধতি ঘোষণা করা যেতে পারে, তবে গৌণ পদ্ধতিগুলির একটি স্বেচ্ছাসেবী ঘোষণা করা যেতে পারে, এবং একটি সংকলক প্রথমে একটি যুক্তি স্বাক্ষর সনাক্ত করে ওভারলোডিং করা উচিত যার জন্য একটি প্রাথমিক পদ্ধতি বিদ্যমান, এবং তারপরে নির্দিষ্ট কোনও ক্রমে মাধ্যমিক পদ্ধতিগুলি পরীক্ষা করে দেখুন যে এ জাতীয় কোনও পদ্ধতি একটি দ্ব্যর্থহীনতর ভাল ম্যাচ কিনা (বা প্রাথমিকটি না থাকলেও ব্যবহারযোগ্য হবে)?
সুপারক্যাট

3

কারণ আপনি কোনও পদ্ধতিতে কল করতে পারেন এবং এর ফলাফল নির্ধারণ করতে পারবেন না।


3
প্রতিটি ভাষায় নয়।
Jörg ডব্লু মিটাগ

@ জর্জি কোন ভাষার মত?
চিরন

1
চ # একটি ভাষা। আপনি সাধারণত foo দেখতে পান -> উপেক্ষা করুন যেখানে উপেক্ষা এমন এক পদ্ধতির রিটার্ন টাইপ যা শূন্যের অনুরূপ
চার্লস ল্যামবার্ট

অ্যাডা আরও ভাল উদাহরণ। সেই ভাষা আসলে স্বাক্ষরের অংশ হিসাবে ফেরত প্রকারগুলি ব্যবহার করে uses
চার্লস ল্যামবার্ট

-4

থাম্বের বিধি: দৃ strongly়ভাবে টাইপ করা ভাষাগুলি সাধারণত পদ্ধতির স্বাক্ষরকে একটি রিটার্ন টাইপের সাথে আবদ্ধ করে। দুর্বল টাইপ করা ভাষা না।
আমি সি # জানি না, তবে আমি ধরে নিয়েছি যে সি # জেনেরিকগুলি পরিচালনা করে এমন কারণে সমস্যা হতে পারে। এটি জেনেরিকের জন্য একেবারে পৃথক পদ্ধতি তৈরি করতে পারে, তবে এ ক্ষেত্রে তারা দুটি ভিন্ন পদ্ধতি।


1
আমি উত্সাহী এই দৃ strongly়-টাইপ করা ভাষাগুলির মধ্যে কোনটি আপনি উল্লেখ করেন? আমি কোনওটিই জানি না এবং আমি জানি যে সি ++ প্রত্যাবর্তনের ধরণের সমাধানকে স্পষ্টভাবে নিষেধ করে।
গ্রেফ্যাড

2
-1 আপনি যদি একটি নিয়ম দিতে যাচ্ছেন যা এটির লঙ্ঘন করে এমন একটি উদাহরণের সাথে অবশ্যই ভুল you

@ গ্রেফ্যাড, আমার বক্তব্যটি ছিল যে দুর্বলভাবে টাইপ করা ভাষায় কমপাইলের সময় অ্যাসাইনমেন্টটি পরীক্ষা করা হয় না। সম্মত হন, এটি এখানে প্রাসঙ্গিক নাও হতে পারে।
সিএমআর

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