JavaScript je v dnešní době velmi dynamický, ale stále vidím spoustu starého kódu, ať už kvůli optimální zpětné kompatibilitě nebo jednoduše proto, že kód nebyl udržován. Jedna z praktik, která mě děsí, je kódování, které vytváří nežádoucí vedlejší účinky. Co je vedlejší účinek? Kousek kódu, pomocí kterého se vytvoří proměnná a je dostupná v celém rozsahu, když to není nutné. Dovolte mi ukázat vám několik příkladů a jak se těmto nežádoucím vedlejším účinkům vyhnout.
Array.prototype.forEach()
místo for(var x = ...)
Procházení pole JavaScriptu se tradičně provádělo pomocí for()
smyčka:
var myArray = [1, 2, 3]; for(var x=0, length = myArray.length; x < length; x++) { // ... } // "x" and "length" are side effects
Vedlejším efektem tohoto vzoru je minimální průběžný index, ne-li také délka – jsou k dispozici v celém rozsahu. Array
prototypové metody jako map
, forEach
a every
umožnit vývojáři vyhnout se těmto vedlejším účinkům:
[1, 2, 3].forEach(function(item, index, array) { // No side effects! :) });
Pro smyčkování není třeba vytvářet žádné "utilitní" proměnné, čímž se vyhnete vedlejším efektům. Toto se nazývá "funkční" programování.
Samoobslužné funkce
Pokud jste nečetli Skrytí vašich soukromých údajů pomocí JavaScriptu a nevíte, jak v JavaScriptu zachovat soukromé proměnné, věnujte několik minut jejímu přečtení. Stejný vzor uvedený v tomto příspěvku vám umožňuje vyhnout se vedlejším účinkům prostřednictvím samospouštěcích funkcí:
// Example from MooTools source... Browser.Request = (function(){ var XMLHTTP = function(){ return new XMLHttpRequest(); }; var MSXML2 = function(){ return new ActiveXObject('MSXML2.XMLHTTP'); }; var MSXML = function(){ return new ActiveXObject('Microsoft.XMLHTTP'); }; return Function.attempt(function(){ XMLHTTP(); return XMLHTTP; }, function(){ MSXML2(); return MSXML2; }, function(){ MSXML(); return MSXML; }); })(); // The three vars are stuck in the self-executing function, they don't "leak" out
Podstatou je, že můžete provádět spoustu zpracování v rámci samospouštěcí funkce (nový rozsah), aniž byste umožnili únik proměnných – jedinou vrácenou nebo uniklou položkou je požadovaná návratová hodnota.
Zpřísnění kódu zahrnuje vyhnutí se vedlejším účinkům a JavaScript vám to usnadní, pokud budete dodržovat tyto základní postupy!