Uživatelem definovaná funkce

Uživatelsky definovaná funkce, taktéž UDF (z anglického User-Defined Function), představuje funkci, kterou definuje sám uživatel programu nebo prostředí.

Programovací jazyky

editovat

Uživatelsky definované funkce se zpravidla používají při strukturovaném programování, kdy se při řešení úloh krom vestavěných funkcí používají i funkce uživatelsky definované. Použití shodné uživatelsky definované funkce je vesměs pomalejší, než použití shodné, vestavěné.

Databáze

editovat

V SQL databázích poskytují uživatelsky definované funkce způsob rozšíření, který může být volán a vyhodnocován přímo v SQL dotazech. SQL standard rozšiřuje mezi skalárními a tabulkovými funkcemi. Skalární funkce vrací pouze jedu hodnotu (nebo NULL) zatímco tabulková funkce vrací tabulku. Tabulka může mít dle charakteru funkce jeden či více sloupců a vracet žádný či více řádků výsledku.

Uživatelsky definované funkce se v SQL deklarují pomocí příkazu CREATE FUNCTION. Například funkce pro výpočet druhé mocniny může vypadat takto:

CREATE FUNCTION dbo.Square(Base FLOAT)
  RETURNS FLOAT
  RETURN (Base * Base)

Takto definovanou funkci lze použít jako výraz v SQL dotazech a to v místech, kde se používá většina vestavěných funkcí včetně SELECT dotazů, kde je funkce vyhodnocována v každém řádku dotazu. Na příklad dotaz z tabulky hodnot

SELECT Value, Square(Value) as Square
  FROM Values

vrátí v jednom sloupci hodnotu a v druhém její druhou mocninu. V těle funkce lze použít konstrukcí jazyka PL/SQL.

Některé databáze (například Firebird) pomocí uživatelských funkcí zpřístupňují externí knihovny, napsané v běžných programovacích jazycích. V takovém případě vypadá deklarace následovně (příklad definice funkce ltrim z externí knihovny IB_UDF dodávané společně se serverem):

declare external function ltrim
  cstring(255) null
  returns cstring(255) free_it
  entry_point 'IB_UDF_ltrim' module_name 'ib_udf';

Takto definovaná funkce je zpravidla rychlejší, než uložená procedura se stejnou funkcionalitou.

Související články

editovat