Kachní psaní - Duck typing
Typové systémy |
---|
Obecné pojmy |
Hlavní kategorie |
Menší kategorie |
Viz také |
Kachní psaní v počítačovém programování je aplikace kachní test - „Pokud to chodí jako kachna a kváka to jako kachna, pak to musí být kachna“ - zjistit, zda objekt lze použít pro konkrétní účel. Při normálním psaní je vhodnost určena typem objektu. Při psaní na kachny je vhodnost objektu určena přítomností určitého metody a vlastnosti, spíše než typ samotného objektu.[1][2]
Příklad
Toto je jednoduchý příklad v Krajta 3, který ukazuje, jak lze libovolný objekt použít v jakémkoli kontextu, dokud není použit způsobem, který nepodporuje.
třída Kachna: def létat(já): tisk("Kachna létající")třída Vrabec: def létat(já): tisk("Sparrow flying")třída Velryba: def plavat(já): tisk("Plavání velryb")pro zvíře v Kachna(), Vrabec(), Velryba(): zvíře.létat()
Výstup:
Kachna létající Sparrow flyingAttributeError: Objekt 'Whale' nemá atribut 'fly'
Ve staticky zadaných jazycích
V některých staticky napsané jazyky jako C# a Vypískat,[3][4] Je možné určit, aby kontrola typu třídy proběhla v době běhu a nikoli v době kompilace. Kachní psaní lze dosáhnout v Jáva pomocí API MethodHandle.[5]
Srovnání s jinými systémy typu
Systémy strukturního typu
Kachní psaní je podobné, ale odlišné od, strukturální psaní. Strukturální psaní je a statické psaní systém, který určuje kompatibilitu typů a ekvivalenci podle struktury typu, zatímco typizace kachen ano dynamický a určuje kompatibilitu typů pouze tou částí struktury typu, ke které se přistupuje během doba běhu.
The Strojopis,[6] OCaml, Scala, Jít, Jilm,[7] Bože a PureScript jazyky v různé míře podporují strukturální psaní.
Protokoly a rozhraní
Protokoly a rozhraní může poskytovat některé z výhod kachního psaní, přesto se kachní psaní liší tím, že nemá definované explicitní rozhraní. Například pokud knihovna třetí strany implementuje třídu, kterou nelze upravit, klient nemůže použít její instanci s rozhraním neznámým pro tuto knihovnu, i když třída ve skutečnosti splňuje požadavky na rozhraní. (Běžným řešením tohoto problému je Adaptér vzor.) Psaní na kachně by to umožňovalo. Z důvodu kompatibility musí být znovu splněno celé rozhraní.
Šablony nebo obecné typy
Šablona nebo obecný funkce nebo metody aplikují kachní test v a statické psaní kontext; to přináší všechny výhody a nevýhody statická versus dynamická kontrola typu obecně. Kachní psaní může být také flexibilnější v tom, že pouze metody skutečně volané za běhu je třeba implementovat, zatímco šablony vyžadují implementaci všech metod, které nelze prokázat nedosažitelný v době kompilace.
Jazyky jako Python, Java a Objective-C jsou příklady psaní kachen, protože je možné v nich vytvářet nové typy za běhu pomocí odraz a zkontrolujte, zda tyto objekty implementují určité metody. Na druhou stranu existují jazyky, které se spoléhají na techniky metaprogramování v době kompilace (jako C ++ a jeho systém šablon), a proto nezapadají do kategorie psaní kachen; místo toho se v určitém okamžiku v kompilačním kanálu všechny zástupné typy nahradí některými konkrétními typy určenými v konkrétní instanci. I když je v nich možné určité mazání typů, runtime kontrola je omezená.
Viz také
Reference
- ^ "Glosář - dokumentace k Pythonu 3.7.1". docs.python.org. Citováno 2018-11-08.
- ^ "Python Duck Typing - Příklad". Techie Hours. 2020-06-28. Citováno 2020-07-26.
- ^ Boo: Psaní na kachnyArchivováno 6. Října 2008 v Wayback Machine
- ^ „Anders Hejlsberg představuje C # 4.0 na PDC 2008“. Citováno 30. ledna 2017.
- ^ "StackOverflow: Implementovat kachní psaní pomocí Java MethodHandles". Citováno 13. června 2020.
- ^ „SE Radio Episode 384: Boris Cherny on TypeScript“. se-radio.net. Citováno 2019-10-25.
- ^ Czaplicki, Evan. „Základní jazyk · Úvod do jilmu“. Citováno 30. ledna 2017.