Как стать автором
Обновить

Комментарии 20

Перевод хороший. А вот книжка, по моему, слишком «начинающая» для Хабра.
Но благодаря этому переводу, я, например, смогу поделиться с новичком материалом, избавляя себя от кучи ненужных слов и оставляя время только на сухое объяснение непонятного. Так что спасибо автору.
Пусть эти новички английский учат, в жизни не раз пригодится.
То есть наши проекты подождут, пока новички осилят английский в объеме, достаточном для того, чтобы читать на английском так же быстро как на русском?)
Если программист не в состоянии читать статьи и документацию на английском — это очень печально для всех.
Почему же не в состоянии читать? Многие могут прочитать, никто ведь не запрещает пользоваться словарями. При этом, пользуясь русскоязычными материалами, человек вполне может быстро начать писать на ЯП. ЯП в лексическом плане вообще-то гораздо проще живых языков, так что нет причин лишать человека права программировать только за то, что он родным языком владеет лучше чем иностранным. Со временем у человека и английский подтягивается, никакой катастрофы нет.
Печально, но не повод вставать в позу :)
Я бы сказал, что эта тема намного шире текущего обсуждения, т.к. это и школы, и университеты, и российские компании, и мотивация самих новичков и т.д. Не всю же жизнь жить опираясь лишь на переводы статей и книг… хотя, это зависит от самого человека, каких высот он хочет добиться. По моему мнению, программисту знать английский язык на уровне чтения — обязательно.

А то становится совсем грустно, когда видишь:
var погода = {};
погода['солнце'] = 1;
Вот, к слову, в тему вопрос — кто-нибудь знает аналог книги «CLR via C#» для js? Т.е. такую, в которой будет описана работа js на низком уровне — как хранятся переменные в куче, как работает сборщик мусора, мало вероятно, но может повезет и будет даже описано то, каким образом webkit пытается оптимизировать код и прочие низкоуровневые прелести.
Ищите книгу по тому, как работает V8.
Как работает приведение типов, как реализуются встроенные методы и все такое в этом роде — есть в стандарте языка, почти на псевдокоде.

А как хранятся переменные в куче и как сборщик мусора устроен — это зависит от конкретной реализации, которых несколько. WebKit, ЕМНИП, занимается только рендерингом HTML, за JS в Chrome отвечает V8, в Safari — JavaScriptCore.
Спасибо за перевод
> Треугольник в цикле
for(var s=''; s.length < 7;) console.log(s += '#');
(но за стиль — придерутся: присв. в выражении, нет цикловых скобок)

> Шахматная доска
> размер доски переменным
дам пример, как писать нетрадиционно, за что не похвалят:
for(var k in {8:1, 9: 2}){
  for(var w = k, s ='', i = w * w - 1; i >=0; i--)
    s += ((i + (0|(i / w))*((w - 1) % 2)) % 2 ? ' ':'#') + (i % w ? '' : '\n');
  console.log(s);
}
Соответственно, ожидается широчайшая масса советов о том, как писать политкорректно: ).
Ваш пример сложно читать, тема же «Выразительный JS»

И если хочется нетрадиционности, то можно так:
var SIZE=prompt("Size?");
function add(str) { return str += str[str.length-1]=='#' ? ' ' : '#' ; }
function query(str) { return str.length<SIZE ? query(add(str)) : str ; }
console.log( query('').split('').map(query).join('\n') ); 
Или
chessBoard = function(n){
  var a;
  return n <= 1 ? ['#']
    : (a = chessBoard(n - 1).map(function(s, i){
      return s + (s[s.length - 2]||' ');
    })).concat(a[n - 3] || [' #']);
};
for(var k in {8:1, 9: 2})
  console.log(chessBoard(k).join('\n'));
Интересный вариант, но нужно обойтись без функций, потому-что их как бы еще не проходили по книге ))
Так хорошо?

	var result = '', line, row;
	for(row = 1; row <= 8; row++) {
		for(line = 1; line <= 8; line++) {
			if(row % 2 == 0) {
				if(line % 2 == 0) {
					result+= '#';
				} else {
					result+= ' ';
				}
			} else {
				if(line % 2 == 0) {
					result+= ' ';
				} else {
					result+= '#';
				}
			}
		}
		result='';
	}

О! Вот это мой вариант! =)

А если забегать вперед и думать о ES6, то задачу про FizzBuzz можно решить так:

function fizzBuzz(n = 100) {
  
  for (let i=1; i <= n; i++){
    if ((i%3==0) && (i%5==0))
      console.log(`${i} FizzBuzz`);
    else
      console.log(`${i} ${!(i%3)?'Fizz':(!(i%5)?'Buzz':'')}`);
  }

}

fizzBuzz();

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации