হাঁসের টাইপিং কী?


429

অনলাইনে সফটওয়্যারটিতে এলোমেলো বিষয়গুলি পড়ার সময় আমি হাঁসের টাইপিং শব্দটি পেয়েছি এবং এটি পুরোপুরি বুঝতে পারি নি।

"হাঁসের টাইপিং" কী?


1
@ মিচ আমি চেষ্টা করেছি এবং এর উত্তরাধিকারের কিছু রূপ হিসাবে কিছু পেয়েছি। তবে বেশি কিছু অনুসরণ করতে পারেনি। আমি যদি ভুল প্রশ্ন জিজ্ঞাসা করি তবে দুঃখিত।
সুশীল ভরওয়ানি

3
@ সুশীল ভরওয়ানি: না, রেগে নেই। তবে লোকেদের প্রত্যাশা রয়েছে যে কলটির প্রথম বন্দর হিসাবে (যেমন আপনি প্রথম কাজটি করেন) এখানে পোস্ট করার আগে অনুসন্ধানের চেষ্টা করা উচিত।
মিচ গম

104
উপরোক্ত যুক্তি দেওয়া দেখে মনে হচ্ছে না যে স্ট্যাকওভারফ্লো আসলেই প্রয়োজনীয় কারণ যেহেতু আমি নিশ্চিত যে প্রায় প্রতিটি প্রশ্নেরই সম্ভবত ইন্টারনেটে কোথাও কোথাও উত্তর দেওয়া যেতে পারে এবং যদি না হয় তবে উত্তর সম্ভবত আরও সহজে এবং সমালোচনা ছাড়াই ইমেইল করে পাওয়া যেত জ্ঞানী বন্ধু আমি মনে করি আপনারা অনেকে স্ট্যাকওভারফ্লোটির বিন্দুটি মিস করেছেন।
রোডি

41
আমি নিশ্চিত যে আমি কোথাও পড়েছি যে এসওর উদ্দেশ্য "ক্যানোনিকাল প্রশ্নের একটি ভাণ্ডার" হওয়ার কথা ছিল এবং আমি নিশ্চিত যে আপনি এটির চেয়ে বেশি ক্যানোনিকাল পেতে পারবেন না।
হেলটনবাইকার

উত্তর:


302

এটা ব্যবহৃত শব্দই হলো গতিশীল ভাষায় যে হবে না শক্তিশালী টাইপিং

ধারণাটি হ'ল কোনও বস্তুর উপর বিদ্যমান পদ্ধতিটি চাওয়ার জন্য আপনার কোনও প্রকারের দরকার নেই - যদি কোনও পদ্ধতিতে এটি সংজ্ঞায়িত করা হয় তবে আপনি এটি শুরু করতে পারেন।

নামটি এই শব্দটি থেকে এসেছে "এটি যদি হাঁসের মতো দেখায় এবং হাঁসের মতো কোঁক দেয়, এটি একটি হাঁস"।

উইকিপিডিয়ায় আরও অনেক তথ্য রয়েছে।


25
স্ট্রং টাইপিং ব্যবহারে সতর্ক থাকুন। এটি যে ভাল সংজ্ঞায়িত হয় না। দুটিই হাঁসের টাইপিং নয় is গুগল গো বা ওকামাল স্ট্র্যাচারাল সাব টাইপিং-কনস্ট্রাকশন সহ স্ট্যাটিকালি টাইপ করা ভাষা। এই হাঁস টাইপ ভাষা আছে?
আমি

7
হাঁসের টাইপিংয়ের জন্য একটি ভাল বাক্যটি হ'ল: "যদি বলা হয় এটি একটি হাঁস .. তবে এটি আমার পক্ষে যথেষ্ট ভাল।" দেখতে pyvideo.org/video/1669/keynote-3 28:30 বা youtube.com/watch?v=NfngrdLv9ZQ#t=1716
tovmeod

7
হাঁসের টাইপিং অগত্যা কেবল গতিময় ভাষায় ব্যবহৃত হয় না। উদ্দেশ্য-সি কোনও গতিশীল ভাষা নয় এবং এটি হাঁসের টাইপিং ব্যবহার করে।
ehuelt

12
পাইথন এবং রুবি উভয়ই শক্তিশালী টাইপযুক্ত ভাষা এবং উভয়েরই হাঁসের টাইপিং রয়েছে। স্ট্রিং টাইপিং হাঁসের টাইপিং না থাকার বোঝায় না।
অ্যালানজডস

8
আমি এটাকে নিম্নমানের করছি। হাঁসের হাঁসের ধরণের শক্তির সাথে কিছু করার নেই, কেবল কোনও পদ্ধতি থাকা কোনও বস্তু ব্যবহার করতে সক্ষম হওয়ার ক্ষমতা, এটি কোনও ইন্টারফেস প্রয়োগ করে বা না করে।
ই-সন্তুষ্ট

209

হাঁসের টাইপিংয়ের অর্থ একটি অপারেশন এর অপারেশনগুলি যে পূরণ করতে হবে তা আনুষ্ঠানিকভাবে নির্দিষ্ট করে না , তবে যা দেওয়া হয় তা দিয়ে চেষ্টা করে

অন্যেরা যা বলেছে তার বিপরীতে, এটি অগত্যা গতিময় ভাষা বা উত্তরাধিকার সংক্রান্ত সমস্যার সাথে সম্পর্কিত নয়।

উদাহরণ টাস্ক:Quack একটি বস্তুর উপর কিছু পদ্ধতি কল করুন ।

হাঁস-টাইপিং ব্যবহার না করে, fএই টাস্কটি করছে এমন একটি ক্রিয়াকলাপটি আগে থেকেই নির্দিষ্ট করতে হবে যে তার যুক্তিতে কিছু পদ্ধতি সমর্থন করতে হবে Quack। একটি সাধারণ উপায় হ'ল ইন্টারফেস ব্যবহার

interface IQuack { 
    void Quack();
}

void f(IQuack x) { 
    x.Quack(); 
}

কলিং f(42)ব্যর্থ হয়, তবে f(donald)যতক্ষণ না donaldএকটি IQuackসাব-টাইপের উদাহরণ হিসাবে কাজ করে ।

আর একটি পদ্ধতির কাঠামোগত টাইপিং - তবে আবার, পদ্ধতিটি Quack()এমন কোনও কিছুকে আনুষ্ঠানিকভাবে নির্দিষ্ট করা হয়েছে যা এটি quackআগে থেকে প্রমাণ করতে পারে না যে সংকলক ব্যর্থতার কারণ হতে পারে।

def f(x : { def Quack() : Unit }) = x.Quack() 

আমরা এমনকি লিখতে পারে

f :: Quackable a => a -> IO ()
f = quack

হাস্কেল-এ, যেখানে Quackableটাইপক্লাস আমাদের পদ্ধতির অস্তিত্ব নিশ্চিত করে।


তাহলে হাঁসের টাইপিং কীভাবে এটি পরিবর্তন করে?

ঠিক আছে, যেমনটি আমি বলেছি, হাঁসের টাইপিং সিস্টেম প্রয়োজনীয়তা নির্দিষ্ট করে না তবে কিছু কাজ করে কিনা চেষ্টা করে

সুতরাং, পাইথনের সর্বদা হাঁসের টাইপিং ব্যবহার করে একটি গতিশীল টাইপ সিস্টেম:

def f(x):
    x.Quack()

যদি fএকটি xসমর্থনকারী একটি পায় Quack(), সবকিছু ঠিক আছে, যদি তা না হয় তবে এটি রানটাইমের সময় ক্রাশ হবে।

তবে হাঁসের টাইপিং মোটেও গতিশীল টাইপিংকে বোঝায় না - আসলে, এখানে একটি খুব জনপ্রিয় তবে সম্পূর্ণ স্ট্যাটিক হাঁস টাইপিং অ্যাপ্রোচ আছে যা কোনও প্রয়োজনীয়তাও দেয় না:

template <typename T>
void f(T x) { x.Quack(); } 

ফাংশনটি কোনওভাবে বলতে পারে না যে এটি কিছু xকরতে পারে Quackএমনটি চায় , তাই পরিবর্তে এটি কেবল সংকলন করার সময় চেষ্টা করে এবং যদি সবকিছু কাজ করে তবে তা ঠিক আছে।


5
আপনার অর্থ এই নয়: অকার্যকর চ (আইকিউক এক্স) {x.Quak (); K (কে.ক্যাকের পরিবর্তে) কারণ ফাংশন এফের প্যারামিটারটি আইউক্যাক এক্স নয়, আইভ্যাক কে, খুব ছোট ভুল তবে আমার মনে হয়েছিল যে এটি সংশোধন করা দরকার :)
dominicbri7

উইকিপিডিয়া অনুসারে, আপনার শেষ উদাহরণটি "স্ট্রাকচারাল টাইপিং", "হাঁসের টাইপিং" নয়।
ব্রিলিয়ান্ড

ঠিক আছে, মনে হয় সেই আলোচনার জন্য একটি পৃথক প্রশ্ন রয়েছে: stackoverflow.com/questions/1948069/…
ব্রিলিয়ান্ড

1
সুতরাং যদি আমি বুঝতে পেরেছি যে আপনি কী বলেছেন, হাঁসের টাইপিং সমর্থন করে এমন একটি ভাষার মধ্যে পার্থক্য এবং হাঁসের টাইপিংয়ের সাথে এটি ঠিক নয় তবে কোনও ফাংশন গ্রহণ করে এমন ধরণের অবজেক্টের আপনাকে নির্দিষ্ট করতে হবে না? def f(x)পরিবর্তে def f(IQuack x)
পিপিপ্রোটাস

124

সাধারণ ব্যাখ্যা (কোড ব্যতীত)

প্রশ্নের শব্দার্থবিজ্ঞানের আলোচনাটি মোটামুটি nuanced (এবং খুব একাডেমিক), তবে এখানে সাধারণ ধারণাটি রয়েছে:

হাঁসের টাইপিং

("যদি এটি হাঁসের মতো হাঁটতে থাকে এবং হাঁসের মতো কোঁক দেয় তবে এটি হাঁস” ") - হ্যাঁ! তবে তার মানে কি ??! উদাহরণস্বরূপ এটি সর্বোত্তমভাবে ফুটিয়ে তোলা হয়েছে:

হাঁসের টাইপিং কার্যকারিতার উদাহরণ:

ভাবুন আমার একটা ম্যাজিক ভান্ড আছে। এটির বিশেষ ক্ষমতা রয়েছে। আমি যদি লাঠিটি তরঙ্গ করে বলি "ড্রাইভ!" একটি গাড়ী, ভাল তারপর, এটি ড্রাইভ!

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

কিন্তু এটা কি বলার জন্য কাজ করবে, একটি শিক্ষাদান? ত্রুটি: KAAAA-BOOOOOOM! যে এত ভাল কাজ করে না। ====> টিপস চালাতে পারে না !! duh !?

এটি মূলত হাঁসের টাইপিংয়ের ধারণা। এটি আপনি কেনার আগে-আগে চেষ্টা করার ব্যবস্থা। যদি এটি কাজ করে তবে সব ঠিক আছে। তবে যদি এটি আপনার হাতে একটি গ্রেনেডের মতো ব্যর্থ হয় তবে এটি আপনার মুখে ফুঁকতে উঠবে।

অন্য কথায়, আমরা বস্তুটি কী করতে পারে তা সম্পর্কে আগ্রহী , বরং বস্তুটি কী তা করে

উদাহরণ: স্ট্যাটিকালি টাইপ করা ভাষা

যদি আমরা বস্তুটি আসলে কী ছিল তা নিয়ে উদ্বিগ্ন হয়ে থাকি তবে আমাদের যাদু কৌশলটি কেবল প্রি-সেট, অনুমোদিত ধরণের ক্ষেত্রে কাজ করবে - এই ক্ষেত্রে গাড়িগুলি, তবে গাড়ি চালাতে পারে এমন অন্যান্য বস্তুগুলিতে ব্যর্থ হবে : ট্রাক, মোপেড, টুক-টুকস ইত্যাদি cars এটি ট্রাকগুলিতে কাজ করবে না কারণ আমাদের যাদু যাতায়াত কেবল এটির জন্য কাজ করবে বলে আশা করছে ।

অন্য কথায়, এই পরিস্থিতিতে, জাদু সৌন্দর্য খুব ঘনিষ্ঠভাবে কি বস্তুর সময়ে জাদুদণ্ড হয় (এটা একটা গাড়ী আছে?) বদলে কি বস্তু কি করতে পারেন (যেমন গাড়ি, ট্রাক ইত্যাদি ড্রাইভ করতে পারেন কিনা)।

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

সংক্ষিপ্তসার: কী টেক আউট

হাঁসের টাইপিংয়ের ক্ষেত্রে যা গুরুত্বপূর্ণ তা হ'ল বস্তুটি আসলে কী করতে পারে তার চেয়ে অবজেক্টটি কী


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

27

আপনি একটি সাধারণ ফাংশন ডিজাইন করছেন তা বিবেচনা করুন, যা কোনও ধরণের অবজেক্ট পায় Birdএবং এর walk()পদ্ধতিটি কল করে । দুটি উপায় আছে যা আপনি ভাবতে পারেন:

  1. এটি আমার ফাংশন এবং আমাকে অবশ্যই নিশ্চিত হতে হবে যে এটি কেবল গ্রহণ করে Bird, বা তাদের কোডটি সংকলন করবে না। কেউ আমার ফাংশন ব্যবহার করতে চায়, তিনি যে আমি শুধুমাত্র গ্রহণ সচেতন থাকতে হবে Birdগুলি
  2. আমার ফাংশনটি কোনও হয় objectsএবং আমি কেবলমাত্র অবজেক্টের walk()পদ্ধতিতে কল করি । সুতরাং, যদি objectকরতে পারেন walk()এটি সঠিক কিনা, যদি এটা আমার কাজ করবে ব্যর্থ করতে পারবে না। সুতরাং এখানে এটি গুরুত্বপূর্ণ নয় যে বিষয়টি কোনও Birdবা অন্য কিছু, এটি গুরুত্বপূর্ণ যে এটি করতে পারে walk() (এটি হাঁসের টাইপিং )

এটি অবশ্যই বিবেচনা করা উচিত যে হাঁসের টাইপিং কিছু ক্ষেত্রে কার্যকর হতে পারে, উদাহরণস্বরূপ পাইথন হাঁসের টাইপিংকে প্রচুর পরিমাণে ব্যবহার করে।


দরকারী পড়া

  • Https://en.wikedia.org/wiki/Duck_typing এ জাভা, পাইথন, জাভাস্ক্রিপ্ট ইত্যাদির জন্য হাঁসের টাইপিংয়ের ভাল উদাহরণ রয়েছে
  • এখানে একটি ভাল উত্তর যা গতিশীল টাইপিংয়ের সুবিধাগুলি এবং এর অসুবিধাগুলিও বর্ণনা করে: গতিশীল টাইপিংয়ের অনুমিত উত্পাদনশীলতা কী?

1
সুন্দর ব্যাখ্যা, কোন সুবিধা কি?
সুশীল ভরওয়ানি

2
এই উত্তরটি সহজ, স্পষ্ট এবং সম্ভবত নবীনদের পক্ষে সেরা। উপরের উত্তরের সাথে এই উত্তরটি পড়ুন (বা যদি এটি চালিত হয় তবে যে উত্তরটি গাড়ি এবং
শিক্ষাগুলির

18

উইকিপিডিয়ায় মোটামুটি বিস্তারিত ব্যাখ্যা রয়েছে:

http://en.wikipedia.org/wiki/Duck_typing

হাঁসের টাইপিং হ'ল ডায়নামিক টাইপিংয়ের একটি স্টাইল যেখানে কোনও নির্দিষ্ট শ্রেণি থেকে তার উত্তরাধিকার বা নির্দিষ্ট ইন্টারফেসের প্রয়োগের পরিবর্তে কোনও বস্তুর বর্তমান পদ্ধতি এবং বৈশিষ্ট্যের সেটটি বৈধ শব্দার্থবিজ্ঞান নির্ধারণ করে।

গুরুত্বপূর্ণ নোটটি সম্ভবত হাঁসের টাইপিংয়ের সাথে একজন বিকাশকারী প্রকৃত অন্তর্নিহিত ধরণটি পরিবর্তে যে পরিমাণ বস্তু সেবন করা হয় তার চেয়ে বেশি উদ্বিগ্ন।


13

আমি প্রচুর উত্তর দেখতে পাচ্ছি যা পুরানো প্রতিবাদের পুনরাবৃত্তি করে:

এটি যদি হাঁসের মতো দেখতে লাগে এবং হাঁসের মতো কোঁক দেয় তবে এটি একটি হাঁস

এবং তারপরে হাঁসের টাইপিংয়ের সাহায্যে আপনি কী করতে পারেন তার একটি ব্যাখ্যাতে ডুব দিন বা এমন একটি উদাহরণ যা ধারণাটিকে আরও বিস্মৃত করে বলে মনে হচ্ছে।

আমি তেমন সাহায্য পাই না।

হাঁসের টাইপিংয়ের বিষয়ে আমি যে স্পষ্ট ইংরেজী উত্তর পেয়েছি তার মধ্যে এটি সেরা চেষ্টা:

হাঁসের টাইপিংয়ের অর্থ একটি অবজেক্টটি যা করতে পারে তার দ্বারা সংজ্ঞায়িত করা হয়, এটি কী তা দিয়ে নয়।

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


3

হাঁসের টাইপিং:

যদি এটি কথা বলে হাঁসের মতো হাঁটতে থাকে তবে এটি হাঁস

এটি বিশেষভাবে বলা হয় অপহরণ ( abductive যুক্তি বা নামেও retroduction , একটি পরিষ্কার সংজ্ঞা আমি মনে করি):

  • থেকে সি (উপসংহার কি আমরা দেখতে ) এবং আর (নিয়ম, আমরা কি জানি ), আমরা গ্রহণ / সিদ্ধান্ত নেন / অনুমান পি (চত্বর, সম্পত্তি অন্য কথায়) একটি প্রদত্ত সত্য

    ... চিকিৎসা নির্ণয়ের একেবারে ভিত্তি

    হাঁসের সাথে: সি = হাঁটা, কথা বলা , আর = হাঁসের মতো , পি = এটি একটি হাঁস

প্রোগ্রামিংয়ে ফিরে যান:

  • অবজেক্ট এর পদ্ধতি / সম্পত্তি এমপি 1 রয়েছে এবং ইন্টারফেস / টাইপ টি এমপি 1 সংজ্ঞায়িত / সংজ্ঞায়িত করে

  • অবজেক্ট এর পদ্ধতি / সম্পত্তি এমপি 2 রয়েছে এবং ইন্টারফেস / টাইপ টি এমপি 2 সংজ্ঞায়িত / সংজ্ঞায়িত করে

  • ...

সুতরাং, কেবল গ্রহণ চেয়ে বেশি mp1 ... কোন বস্তুর উপর যতদিন এর কিছু সংজ্ঞা পূরণ করেছে mp1 ..., কম্পাইলার / রানটাইম এছাড়াও ঠিক আছে হওয়া উচিত কথন সঙ্গে ধরনের হয় টি

এবং ভাল, উপরের উদাহরণগুলির সাথে কি এটি ঘটেছে? হাঁসের টাইপিং কি মূলত কোনও টাইপিং নয়? বা আমরা কি এটি অন্তর্ভুক্ত টাইপিং বলা উচিত?


3

ভাষা নিজেই তাকান সাহায্য করতে পারে; এটি প্রায়শই আমাকে সহায়তা করে (আমি স্থানীয় ইংরেজী স্পিকার নই)।

ভিতরে duck typing :

1) শব্দের typingঅর্থ কোনও কীবোর্ডে টাইপ করা নয় (যেমনটি আমার মনে দৃ in় প্রতিচ্ছবি ছিল), তার অর্থ নির্ধারণ করা হয় " জিনিসটি কোন ধরণের জিনিস? "

2) শব্দটি duckপ্রকাশ করে যে কীভাবে নির্ধারণ করা হয়; এটি এক ধরণের 'looseিলে .ালা' নির্ধারণ করে যেমন রয়েছে: " যদি এটি হাঁসের মতো হাঁটে ... তবে এটি একটি হাঁস "। এটি 'আলগা' কারণ জিনিসটি হাঁস হতে পারে বা নাও পারে তবে এটি আসলে হাঁস কিনা তা বিবেচনাধীন নয়; মূল বিষয়টি হ'ল আমি হাঁসের সাথে যা করতে পারি তা দিয়ে আমি এটি করতে পারি এবং হাঁসের দ্বারা প্রদর্শিত আচরণগুলি প্রত্যাশা করি। আমি এটিকে রুটির টুকরো টুকরো খাওয়াতে পারি এবং জিনিসটি আমার দিকে যেতে পারে বা আমার কাছ থেকে চার্জ দিতে বা পিছনে ফিরে যেতে পারে ... তবে এটি আমাকে গ্রিজির মতো গ্রাস করবে না।


2

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

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

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

def append_song(result, song)
    # test we're given the right parameters 
    unless result.kind_of?(String)
        fail TypeError.new("String expected") end
    unless song.kind_of?(Song)
        fail TypeError.new("Song expected")
end

result << song.title << " (" << song.artist << ")" end
result = ""

append_song(result, song) # => "I Got Rhythm (Gene Kelly)"

রুবির হাঁসের টাইপিং আলিঙ্গন করুন এবং আপনি আরও সহজ কিছু লিখতে চাইছেন:

def append_song(result, song)
    result << song.title << " (" << song.artist << ")"
end

result = ""
append_song(result, song) # => "I Got Rhythm (Gene Kelly)"

আপনার আর্গুমেন্টের ধরণটি পরীক্ষা করার দরকার নেই। যদি তারা << (ফলাফলের ক্ষেত্রে) বা শিরোনাম এবং শিল্পী (গানের ক্ষেত্রে) সমর্থন করে তবে সবকিছু ঠিক কাজ করবে। যদি তা না করে, আপনার পদ্ধতিটি যাইহোক যাইহোক একটি ব্যতিক্রম ছুঁড়ে ফেলবে (ঠিক তেমনভাবে যদি আপনি প্রকারগুলি পরীক্ষা করে থাকেন তবে)। তবে চেক না করে হঠাৎ আপনার পদ্ধতিটি অনেক বেশি নমনীয়। আপনি এটিকে একটি অ্যারে, একটি স্ট্রিং, একটি ফাইল বা অন্য কোনও বস্তু যা << ব্যবহার করে সংযোজন করতে পারেন তা পাস করতে পারেন এবং এটি কেবল কাজ করবে।


2

হাঁসের টাইপিং হিন্টিং টাইপ নয়!

মূলত "হাঁসের টাইপিং" ব্যবহার করার জন্য আপনি একটি সাধারণ ইন্টারফেস ব্যবহার করে একটি নির্দিষ্ট প্রকারটিকে লক্ষ্য করে বরং বৃহত্তর উপ-প্রকারকে লক্ষ্য করবেন না (উত্তরাধিকারের বিষয়ে কথা বলছেন না, যখন আমি সাবটাইপস বোঝাতে চাইছি "জিনিস" যা একই প্রোফাইলের সাথে খাপ খায়) ।

আপনি এমন একটি সিস্টেম কল্পনা করতে পারেন যা তথ্য সঞ্চয় করে। তথ্য লিখতে / পড়তে আপনার এক ধরণের স্টোরেজ এবং তথ্য প্রয়োজন।

স্টোরেজের ধরণগুলি হতে পারে: ফাইল, ডাটাবেস, সেশন ইত্যাদি

ইন্টারফেসটি স্টোরেজ প্রকার নির্বিশেষে উপলভ্য বিকল্পগুলি (পদ্ধতিগুলি) আপনাকে জানাতে দেবে, যার অর্থ এই মুহুর্তে কিছুই প্রয়োগ করা হয়নি! অন্য কথায় ইন্টারফেস তথ্য সংরক্ষণের উপায় সম্পর্কে কিছুই জানে না।

প্রতিটি স্টোরেজ সিস্টেমের অবশ্যই ইন্টারফেসের অস্তিত্বটি একেবারে একই পদ্ধতি প্রয়োগ করে জানতে হবে।

interface StorageInterface
{
   public function write(string $key, array $value): bool;
   public function read(string $key): array;
}


class File implements StorageInterface
{
    public function read(string $key): array {
        //reading from a file
    }

    public function write(string $key, array $value): bool {
         //writing in a file implementation
    }
}


class Session implements StorageInterface
{
    public function read(string $key): array {
        //reading from a session
    }

    public function write(string $key, array $value): bool {
         //writing in a session implementation
    }
}


class Storage implements StorageInterface
{
    private $_storage = null;

    function __construct(StorageInterface $storage) {
        $this->_storage = $storage;
    }

    public function read(string $key): array {
        return $this->_storage->read($key);
    }

    public function write(string $key, array $value): bool {
        return ($this->_storage->write($key, $value)) ? true : false;
    }
}

সুতরাং এখন, প্রতিটি সময় আপনার তথ্য লেখার / পড়ার দরকার পড়ে:

$file = new Storage(new File());
$file->write('filename', ['information'] );
echo $file->read('filename');

$session = new Storage(new Session());
$session->write('filename', ['information'] );
echo $session->read('filename');

এই উদাহরণে আপনি স্টোরেজ কনস্ট্রাক্টরে হাঁস টাইপিং ব্যবহার করে শেষ করেছেন:

function __construct(StorageInterface $storage) ...

আশা করি এটি সাহায্য করেছে;)


2

হাঁসের টাইপিং কৌশল সহ ট্রি ট্রভারসাল

def traverse(t):
    try:
        t.label()
    except AttributeError:
        print(t, end=" ")
    else:
        # Now we know that t.node is defined
        print('(', t.label(), end=" ")
        for child in t:
            traverse(child)
        print(')', end=" ")

0

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


-1

আমি বিখ্যাত বাক্যটি আমার উপায়ে বোঝার চেষ্টা করি: "পাইথন ডোজ কোনও জিনিসকে যত্নশীল করে না এটি একটি আসল হাঁস বা না All

একটি ভাল ওয়েবসাইট আছে। http://www.voidspace.org.uk/python/articles/duck_typing.shtml#id14

লেখক নির্দেশ করেছেন যে হাঁসের টাইপিংয়ের সাহায্যে আপনার নিজস্ব শ্রেণি তৈরি করা যায় যাগুলির নিজস্ব অভ্যন্তরীণ ডেটা কাঠামো রয়েছে - তবে সাধারণ পাইথন সিনট্যাক্স ব্যবহার করে অ্যাক্সেস করা হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.