Vedlejší účinek (programování)

Vedlejší účinek (anglicky side effect) je pojem, který v programování představuje situaci, kdy volaná funkce nebo výpočetní výraz mění i jiný stav procesu, než je návratová hodnota funkce nebo výrazu nebo změna hodnoty parametru odkazovaného přes odkaz referencí.

Vedlejší účinek může být úmyslný nebo neúmyslný. Neúmyslný vedlejší účinek je častým zdrojem mnoha programátorských chyb. Úmyslný vedlejší účinek je základem procedurálního přístupu k tvorbě software a pokud se používá přehledně a účelně, může zjednodušit implementaci programového kódu. Naopak v deklarativním přístupu tvorby software je vedlejší účinek zakázán a často není ani možný.

Z pohledu současných programovacích jazyků je vedlejší účinek považován spíše za programátorský antivzor a je snahou vedlejší účinky minimalizovat pomocí neměnných dat. S pojmem vedlejšího účinku souvisí také pojem čistá funkce, která ze své podstaty brání vzniku vedlejších účinků.

Příklady

Typický případ neúmyslného (chybného) vedlejšího účinku výrazu v jazyce C:

int i = 1;
foo( i++, i );

při volání funkce foo() se jako první argument předává hodnota i, která se následně zvýší o 1 (vedlejší účinek), má se jako druhý argument zapsat hodnota i původní nebo zvýšená o 1? V praxi záleží na konkrétní implementaci překladače jazyka.

Typický případ úmyslného vedlejšího účinku výrazu v jazyce C:

int pocitadlo=0;

void foo()
{
	pocitadlo++;
}

při každém volání funkce foo() se zvýší hodnota proměnné počítadlo o 1.

Následky vedlejších účinků

Díky vedlejšímu účinku je možné některé algoritmy zapsat jednodušším způsobem než v případě, kdy je snahou se vedlejším efektům vyhnout. Následkem vedlejšího efektu je ale změna vnitřního stavu běžícího programu (nebo některé jeho části). Běh programu tak může být na základě změny vnitřního stavu změněn neočekávaným způsobem. Jednoduchost zápisu je tak vykoupena snížením deterministického chování a stabilitou výsledného systému.

Stabilitu programu by mělo zajistit jeho testování ve fázi vzniku. Algoritmy s vedlejším efektem se ale těžko testují, protože jejich chování může být často nepředvídatelně ovlivněno předchozí činností programu. Z tohoto důvodu je nutné vytvářet velké množství testovacího kódu, aby pokrylo všechny možné eventuality, které by mohly nastat. To často znamená vytvořit větší množství testovacího kódu než produkčního.

Odstraněním vedlejších účinků vznikají tzv. čisté funkce, jejichž chování je neměnné a snadno testovatelné: Mají méně cest průchodu.

Vedlejší efekt jako událost reálného světa

Efekt v kontextu programovacích jazyků je něco co je pozorovatelné vně vykonávaného kódu. Efekt je tak něco co vykonává každý program (imperativní nebo deklarativní). Vedlejší efekt je ale speciální typ efektu, který není očekávaný. Dalo by se říct, že se jedná o sekundární efekt vykonávaného kódu, který mění stav a tím i chování jiných částí systému.

Vedlejší efekt je ale událost reálného světa a každý program, který dělá něco užitečného vyžaduje určitou formu vedlejšího efektu. Asi nejdůležitější operace, která vyžaduje vedlejší efekt jsou totiž vstup a výstup z programu, bez kterých se žádný program neobejde. Vstup do programu totiž mění stav běžícího programu, protože umožňuje brát data "odnikud" a výstup na druhou stranu umožňuje, aby se data ztrácela bez možnosti je získat zpět (nelze ověřit co bylo fyzicky výstupem).

To je největší problém se kterým se musejí potýkat funkcionální programovací jazyky.

Pahýl
Tento článek je příliš stručný nebo postrádá důležité informace.
Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty.

Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Vedlejší_účinek_(programování)
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.