Implicit gépelés , látens gépelés vagy duck typing ( eng. Duck typing ) az OOP nyelveken – annak meghatározása, hogy egy objektum egy bizonyos interfészt anélkül valósít meg, hogy kifejezetten megadná vagy örökölné ezt a felületet, hanem egyszerűen a metódusai teljes készletének megvalósításával .
A kifejezés neve az angol "kacsateszt" (" kacsateszt ") szóból származik, amely az eredetiben így hangzik:
Ha úgy néz ki, mint egy kacsa, úszik, mint egy kacsa, és hápog, mint egy kacsa, akkor valószínűleg kacsa.
Eredeti szöveg (angol)[ showelrejt] Ha úgy néz ki, mint egy kacsa, úszik, mint egy kacsa, és hápog, mint egy kacsa, akkor valószínűleg kacsa.Egy objektum akkor tekinthető interfészt megvalósítónak, ha tartalmazza az adott interfész összes metódusát , függetlenül az öröklődési hierarchiában lévő kapcsolatoktól vagy egy adott osztályhoz való tartozástól. Így egy objektum egy adott interfész értékeként való felhasználásának helyességét vagy statikusan, a fordító határozza meg, annak az osztálynak az elemzése alapján, amelyhez az objektum tartozik, és ellenőrzi a szükséges metóduskészlet megvalósítását, vagy dinamikusan, a futási környezet típusaira vonatkozó információk alapján.
Ez a megközelítés lehetővé teszi , hogy polimorf módon dolgozzon olyan objektumokkal , amelyek nincsenek kapcsolatban az öröklődési hierarchiában . Elég, ha ezek az objektumok mindegyike támogatja a szükséges metóduskészletet .
Egy másik közeli megközelítés az OCaml strukturális altípusa , ahol az objektumtípusok akkor kompatibilisek, ha metódusaláírásaik kompatibilisek , függetlenül a deklarált öröklődéstől, és mindezt a fordításkor ellenőrzik .
A kacsagépelés megoldja a hierarchikus gépelési problémákat , például:
A kacsagépelés gyakorlatilag nélkülözhetetlen az alkalmazott szkriptnyelvekben ("script"), ahol a programon kívüli dokumentumokkal (script) kell dolgozni (weboldalak, szöveges és táblázatos dokumentumok), amelyek objektumhierarchiája nem érhető el.
A kacsagépelés a következő nyelveken is támogatott: Prolog , D , Perl , Smalltalk , Python , Objective-C , Ruby , JavaScript , TypeScript , Groovy , ColdFusion , Boo , Lua , Go , Scala .