Prevence vedlejších účinků v JavaScriptu

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!