Podpis typu - Type signature
v počítačová věda, a podpis typu nebo anotace typu definuje vstupy a výstupy pro funkci, podprogram nebo metoda. Podpis typu zahrnuje počet, typy a pořadí argumentů obsažených ve funkci. Typický podpis se obvykle používá během přetížení rozlišení pro výběr správné definice funkce, která má být volána mezi mnoha přetíženými formami.
Příklady
C / C ++
v C a C ++, podpis typu je deklaroval tím, co je běžně známé jako funkční prototyp. V C / C ++ funkce prohlášení odráží jeho použití; například a ukazatel funkce který by byl vyvolán jako:
char C;dvojnásobek d;int retVal = (*fPtr)(C, d);
má podpis:
(int) (char, dvojnásobek);
Erlang
v Erlang, podpisy typu mohou být volitelně deklarovány jako:
-spec(název_funkce(typ1(), typ2(), ...) -> out_type()).
Například:
-spec(is_even(číslo()) -> booleovský()).
Haskell
Podpis typu v Haskell programovací jazyk je obvykle psán v následujícím formátu:
název funkce :: typ arg1 -> arg2Type -> ... -> argNType
Všimněte si, že typ výsledku lze považovat za vše za prvním zadaným argumentem. To je důsledek kari, což umožňuje Haskellova podpora pro prvotřídní funkce; tato funkce vyžaduje dva vstupy, kde je zadán jeden argument a funkce je „curried“, aby se vytvořila funkce pro nedodaný argument. Tak volá F X
, kde F :: A -> b -> C
, přináší novou funkci f2 :: b -> C
které lze nazvat f2 b
k výrobě C
.
Skutečné specifikace typu se mohou skládat ze skutečného typu, například Celé číslo
nebo generál proměnná typu který se používá v parametrická polymorfní funkce, jako A
nebo b
nebo jakýkoliv typ
. Můžeme tedy napsat něco jako:název funkce :: A -> A -> ... -> A
Protože Haskell podporuje funkce vyššího řádu, funkce lze předat jako argumenty. Toto se píše jako:název funkce :: (A -> A) -> A
Tato funkce přebírá funkci s podpisem typu A -> A
a vrátí data typu A
ven.
Jáva
V Virtuální stroj Java, interní podpisy typu se používají k identifikaci metod a tříd na úrovni kódu virtuálního stroje.
Příklad: Metoda Tětiva Tětiva.podřetězec(int, int)
je zastoupena v bytecode tak jako Ljava/jazyk/Tětiva.podřetězec(II)Ljava/jazyk/Tětiva;
. Podpis hlavní()
metoda vypadá takto:
veřejnost statický prázdnota hlavní(Tětiva[] args)
A v rozloženém bajtkódu má podobu Lsome/balík/Hlavní/hlavní:([Ljava/jazyk/Tětiva;)PROTI
Podpis metody pro hlavní()
metoda obsahuje tři modifikátory:
veřejnost
znamená, žehlavní()
metodu lze volat jakýmkoli objektem.statický
znamená, žehlavní()
metoda je metoda třídy.prázdnota
znamená, žehlavní()
metoda nemá žádnou návratovou hodnotu.
Podpis
![]() | Tato část je tón nebo styl nemusí odrážet encyklopedický tón použitý na Wikipedii.Říjen 2013) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Funkční podpis se skládá z prototypu funkce. Určuje obecné informace o funkci, jako je název, rozsah a parametry. Mnoho programovacích jazyků používá zmanipulované jméno za účelem předání více sémantických informací z překladačů linkerům. Kromě manipulace je v podpisu funkce (uloženém interně do většiny překladačů) přebytek informací, který není snadno dostupný, ale lze k němu přistupovat.[1]
Pochopení pojmu podpis funkce je důležitým konceptem pro všechna studia informatiky.
- Moderní techniky orientace na objekty využívají rozhraní, což jsou v podstatě šablony vytvořené z podpisů funkcí.
- C / C ++ používá přetížení funkce s různými podpisy.
Praxe vícenásobné dědictví vyžaduje zvážení podpisů funkcí, aby se zabránilo nepředvídatelným výsledkům.
Teorie informatiky a pojem polymorfismus zejména hodně využívat koncept podpisu funkce.
V Programovací jazyk C. podpis je zhruba ekvivalentní jeho podpisu definice prototypu.
Termín „podpis“ může mít v informatice jiné významy. Například:
- Podpisy souborů může identifikovat nebo ověřit obsah souboru.
- Podpisy databáze mohou identifikovat nebo ověřit schéma nebo verzi databáze.
- V ML rodina programovací jazyky, "podpis" se používá jako klíčové slovo odkazující na konstrukci modulového systému, která hraje roli rozhraní.
Podpis metody
v programování, zvláště objektově orientované programování, a metoda je běžně identifikován podle jeho jedinečnosti podpis metody, který obvykle zahrnuje název metody a její počet, typy a pořadí parametry.[2] Podpis metody je nejmenší typ metody.
Příklady
C / C ++
v C /C ++, podpis metody je název metody a její číslo a typ parametry, ale je možné mít poslední parametr, který se skládá z pole hodnot:
int printf(konst char*, ... );
Manipulaci s těmito parametry lze provést pomocí rutin ve standardní záhlaví knihovny [[stdarg.h |<stdarg.h>
]].
C#
Podobně jako syntaxe C, C# vidí jako podpis metody její název a počet a typ jejích parametrů, kde posledním parametrem může být pole hodnot:[3]
prázdnota Přidat(ven int součet, parametry int[] hodnota);[...]Přidat(ven součet, 3, 5, 7, 11, -1); // součet == 25
Jáva
V Programovací jazyk Java, podpis metody je název metody a počet, typ a pořadí jejích parametrů. Návratové typy a vyvolané výjimky se nepovažují za součást podpisu metody.
methodName(parametry) {...};přestávka;
Například následující dvě metody mají odlišné podpisy:
dělej něco(Tětiva[] y);dělej něco(Tětiva y);
Následující tři metody mají stejné podpisy a jsou považovány za stejné, protože se liší pouze návratová hodnota. Název parametru není součástí podpisu metody a je kompilátorem pro kontrolu jedinečnosti metody ignorován.
int dělej něco(int y) Tětiva dělej něco(int X)int dělej něco(int z) hodí Jáva.jazyk.Výjimka
Julie
v Julie, podpisy funkcí jsou psány v následujícím formátu:
komise(množství::Int, hodnotit::Float64)::Float64
Typy v argumentech se používají pro hromadné odeslání. Návratový typ je ověřen, když funkce vrací hodnotu, a je spuštěna výjimka za běhu, pokud typ hodnoty nesouhlasí se zadaným typem.
Abstraktní typy jsou povoleny a je doporučeno pro implementaci obecného chování, které je společné pro všechny podtypy. Výše uvedenou funkci lze tedy přepsat následujícím způsobem. V tomto případě může funkce odpovídajícím způsobem přijmout jakýkoli podtyp Integer a Real.
komise(množství::Celé číslo, hodnotit::Nemovitý)::Nemovitý
Typy jsou v argumentech funkcí zcela volitelné. Pokud není uvedeno, je ekvivalentní použití typu Any, což je supertyp všech typů.
Nakonec je idiomatické určit typy argumentů, ale nikoli návratový typ.
Cíl-C
V Cíl-C programovací jazyk, podpisy metod pro objekt jsou deklarovány v souboru záhlaví rozhraní. Například,
- (id)initWithInt:(int)hodnota;
definuje metodu initWithInt
který vrací obecný objekt (an id
) a vezme jeden celočíselný argument. Objective-C vyžaduje pouze typ podpisu, aby byl explicitní, pokud typ není id
; tento podpis je ekvivalentní:
- initWithInt:(int)hodnota;
Rez
v Rez, podpisy funkcí jsou psány v následujícím formátu:
fn komise(množství: u32,hodnotit: f64)-> f64;
Reference
- ^ „Reference C ++: Podmínky programování“. Citováno 3. prosince 2013.
- ^ Paul Leahy. "Podpis metody". http://www.about.com/: Průvodce About.com. Citováno 2011-05-31.
Podpis metody je součástí deklarace metody. Jedná se o kombinaci názvu metody a seznamu parametrů.
- ^ Mössenböck, Hanspeter (2002-03-25). „Advanced C #: Variabilní počet parametrů“ (PDF). http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/: Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik. str. 52. Citováno 2011-08-03.