Невпопад

Хочу в отпуск. Так хочу, что меня все раздражает.

GC в ruby в сто раз примитивнее того, что используется в jvm. Ц-ц-ц.

И еще меня начинает раздражать “мусорность” javascript. Я имею ввиду, что, в целом, многие ништяки из ФЯП можно реализовать и в javascript, но на java-подобный синтакс такие штуки не очень хорошо ложатся:

 1 // пусть ArrayUtils - это специальная утилита для работы с массивами, 
 2 // реализующая for…each, map/reduce для всех браузеров, включая ie6. 
 3 // Что-то наподобие YUI.Array
 4 var A = window.ArrayUtils = {
 5     map : (Array.prototype.map) ?
 6         function (a, fn, c) {
 7             return a.map(fn, c || window);
 8         } :
 9         function (a, fn, c) {
10             var result = [], i = a.length;
11             while(i--) {
12                 result[i] = fn.call(c || window, a[i]);
13             }
14             return result;
15         },
16     filter : (Array.prototype.filter) ?
17         function (a, fn, c) {
18             return a.filter(fn, c || window);
19         } :
20         function (a, func, c) {
21             var result = [], i = a.length;
22             while(i--) {
23                 if (i in a && fn.call(c || window, a[i], i, a)) result.push(a[i]);
24             }
25             return result;
26         }
27 };
28 
29 // получим новый массив, получаемый из исходного путем умножения каждого элемента на два.
30 // уже немножко "weird", не так ли?
31 var data = [1, 2, 3, 4];
32 A.map(data, function (item) { return item * 2; }); // 2, 4, 6, 8
33 
34 // а теперь пример повеселее:
35 var persons = [
36 	{
37 		name : 'John', 
38 		lastName : 'Doe',
39 		address : 'California, Los Angeles'
40 	},
41 	{
42 		name : 'Ivan',
43 		lastName : 'Ivanov',
44 		address : 'Moscow'
45 	},
46 	{
47 		name : 'Abraham',
48 		lastName : 'Smith',
49 		address : 'California, San Francisco'
50 	}
51 ];
52 
53 // Получим массив, состоящий только из полных имен пользователей, проживающих в калифорнии
54 var townRegex = /california/i;
55 A.map(A.filter(persons, function (person) {
56     return townRegex.test(person.address);
57 }), function (person) {
58     return person.name + ' ' + person.lastName;
59 }); // John Doe, Abraham Smith

Чрезвычайно избыточный и непонятный с непривычки код, особенно в сравнении с аналогичным в ruby или python.

blog comments powered by Disqus