For faster navigation, this Iframe is preloading the Wikiwand page for Vedlejší účinek (programování).

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

[editovat | editovat zdroj]

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ů

[editovat | editovat zdroj]

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

[editovat | editovat zdroj]

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.
{{bottomLinkPreText}} {{bottomLinkText}}
Vedlejší účinek (programování)
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?