Комментарии 20
Перевод хороший. А вот книжка, по моему, слишком «начинающая» для Хабра.
Но благодаря этому переводу, я, например, смогу поделиться с новичком материалом, избавляя себя от кучи ненужных слов и оставляя время только на сухое объяснение непонятного. Так что спасибо автору.
Пусть эти новички английский учат, в жизни не раз пригодится.
То есть наши проекты подождут, пока новички осилят английский в объеме, достаточном для того, чтобы читать на английском так же быстро как на русском?)
Если программист не в состоянии читать статьи и документацию на английском — это очень печально для всех.
Почему же не в состоянии читать? Многие могут прочитать, никто ведь не запрещает пользоваться словарями. При этом, пользуясь русскоязычными материалами, человек вполне может быстро начать писать на ЯП. ЯП в лексическом плане вообще-то гораздо проще живых языков, так что нет причин лишать человека права программировать только за то, что он родным языком владеет лучше чем иностранным. Со временем у человека и английский подтягивается, никакой катастрофы нет.
Печально, но не повод вставать в позу :)
Я бы сказал, что эта тема намного шире текущего обсуждения, т.к. это и школы, и университеты, и российские компании, и мотивация самих новичков и т.д. Не всю же жизнь жить опираясь лишь на переводы статей и книг… хотя, это зависит от самого человека, каких высот он хочет добиться. По моему мнению, программисту знать английский язык на уровне чтения — обязательно.
А то становится совсем грустно, когда видишь:
А то становится совсем грустно, когда видишь:
var погода = {};
погода['солнце'] = 1;
Вот, к слову, в тему вопрос — кто-нибудь знает аналог книги «CLR via C#» для js? Т.е. такую, в которой будет описана работа js на низком уровне — как хранятся переменные в куче, как работает сборщик мусора, мало вероятно, но может повезет и будет даже описано то, каким образом webkit пытается оптимизировать код и прочие низкоуровневые прелести.
Ищите книгу по тому, как работает V8.
Как работает приведение типов, как реализуются встроенные методы и все такое в этом роде — есть в стандарте языка, почти на псевдокоде.
А как хранятся переменные в куче и как сборщик мусора устроен — это зависит от конкретной реализации, которых несколько. WebKit, ЕМНИП, занимается только рендерингом HTML, за JS в Chrome отвечает V8, в Safari — JavaScriptCore.
А как хранятся переменные в куче и как сборщик мусора устроен — это зависит от конкретной реализации, которых несколько. 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();
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Выразительный JavaScript: Структура программ