Anka att skriva

Implicit typning , latent typing eller duck typing ( eng.  Duck typing ) på OOP-språk  - bestämmer det faktum att ett objekt implementerar ett visst gränssnitt utan att explicit specificera eller ärva detta gränssnitt, utan helt enkelt genom att implementera hela uppsättningen av dess metoder .

Titel

Namnet på termen kommer från det engelska "duck test" (" duck test "), som i originalet låter som:

Om den ser ut som en anka, simmar som en anka och kvackar som en anka, så är det förmodligen en anka.

Originaltext  (engelska)[ visaDölj] Om den ser ut som en anka, simmar som en anka och kvackar som en anka, så är det förmodligen en anka.

Princip

Ett objekt anses implementera ett gränssnitt om det innehåller alla metoder för det gränssnittet, oavsett relationerna i arvshierarkin eller tillhörande någon speciell klass. Således bestäms riktigheten av att använda ett objekt som ett värde för ett visst gränssnitt antingen statiskt, av kompilatorn, baserat på analysen av klassen som objektet tillhör och kontrollera implementeringen av den erforderliga uppsättningen metoder av den, eller dynamiskt, baserat på information om typerna av runtime-miljön.

Detta tillvägagångssätt låter dig arbeta polymorft med objekt som inte är relaterade i en arvshierarki . Det räcker att alla dessa objekt stöder den nödvändiga uppsättningen metoder .

Ett annat nära tillvägagångssätt är strukturell subtyping i OCaml , där objekttyper är kompatibla om deras metodsignaturer är kompatibla , oavsett deklarerat arv, vilket allt kontrolleras vid kompilering .

Problem med hierarkisk skrivning

Ducktyping löser hierarkiska skrivproblem som :

Ducktyping är praktiskt taget oumbärligt i tillämpade skriptspråk ("skript"), där du måste arbeta med dokument utanför programmet (skript) (webbsidor, text- och kalkylbladsdokument), vars objekthierarki inte är tillgänglig.

Duck-typing-språk

Ducktyping stöds också på språk: Prolog , D , Perl , Smalltalk , Python , Objective-C , Ruby , JavaScript , TypeScript , Groovy , ColdFusion , Boo , Lua , Go , Scala .

Länkar