Идеальный программист
Книга дядюшки Боба, которая учит методам, практикам и инструментам настоящего мастерства в области программного обеспечения. Она содержит практические советы по оценке проектов, написанию кода, рефакторингу и тестированию.
Прочитав эту книгу, вы научитесь справляться с конфликтами, плотным графиком и нерациональностью менеджеров; научитесь бороться с постоянным давлением и избегать выгорания; узнаете, как управлять своим временем, как писать качественный код и способствовать созданию среды, в которой разработчики и команды могут успешно развиваться.
Книга дядюшки Боба, которая учит методам, практикам и инструментам настоящего мастерства в области программного обеспечения. Она содержит практические советы по оценке проектов, написанию кода, рефакторингу и тестированию.
Прочитав эту книгу, вы научитесь справляться с конфликтами, плотным графиком и нерациональностью менеджеров; научитесь бороться с постоянным давлением и избегать выгорания; узнаете, как управлять своим временем, как писать качественный код и способствовать созданию среды, в которой разработчики и команды могут успешно развиваться.
Расчеты символьных кодов
Вам дана строка символов. Переведите каждый символ в ASCII код, затем объедините полученные коды в число
//назовем полученное число total1
Замените все встречающиеся числа 7 на числа 1
//назовем полученное число total2
Вам дана строка символов. Переведите каждый символ в ASCII код, затем объедините полученные коды в число
'ABC' --> 'A' = 65, 'B' = 66, 'C' = 67 --> 656667 //назовем полученное число total1
Замените все встречающиеся числа 7 на числа 1
//назовем полученное число total2
total1 = 656667
^
total2 = 656661
Верните разницу между total1 и total2 (6 + 5 + 6 + 6 + 6 + 7)
- (6 + 5 + 6 + 6 + 6 + 1)
-------------------------
6Программист-прагматик
Издание полно как технических, так и профессиональных практических советов, которые помогли мне во многих проектах, а также помогли мне стать лучше как разработчику.
Книга очень актуальна даже в 2020 году, особенно последнее издание. Здесь автор анализирует, что значит быть современным разработчиком, исследуются различные темы: от личной ответственности и карьерного роста до архитектурных приемов.
Прочитав книгу, вы поймете, что такое непрерывное обучение и насколько оно важно; изучите, как писать гибкий, адаптируемый и динамический код, как решать проблемы конкурентности, как стоять на страже безопасности, как тестировать “безжалостно и эффективно”, и многое другое.
Издание полно как технических, так и профессиональных практических советов, которые помогли мне во многих проектах, а также помогли мне стать лучше как разработчику.
Книга очень актуальна даже в 2020 году, особенно последнее издание. Здесь автор анализирует, что значит быть современным разработчиком, исследуются различные темы: от личной ответственности и карьерного роста до архитектурных приемов.
Прочитав книгу, вы поймете, что такое непрерывное обучение и насколько оно важно; изучите, как писать гибкий, адаптируемый и динамический код, как решать проблемы конкурентности, как стоять на страже безопасности, как тестировать “безжалостно и эффективно”, и многое другое.
Что такое объектная обертка (Wrapper Objects)?
Примитивы строка, число и boolean имеют свойства и методы, несмотря на то, что они не являются объектами:
Причина такого поведения заключается в том, что name временно преобразуется в объект. У каждого примитива, кроме null и undefined, есть объект-обертка. Такими объектами являются String, Number, Boolean, Symbol и BigInt. В нашем случае код принимает следующий вид:
Примитивы строка, число и boolean имеют свойства и методы, несмотря на то, что они не являются объектами:
let name = 'marko'Name — это строка (примитивный тип), у которого нет свойств и методов, но когда мы вызываем метод toUpperCase(), это приводит не к ошибке, а к «MARKO».
console.log(typeof name) // string
console.log(name.toUpperCase()) // MARKO
Причина такого поведения заключается в том, что name временно преобразуется в объект. У каждого примитива, кроме null и undefined, есть объект-обертка. Такими объектами являются String, Number, Boolean, Symbol и BigInt. В нашем случае код принимает следующий вид:
console.log(new String(name).toUpperCase()) // MARKOВременный объект отбрасывается по завершении работы со свойством или методом.
Javanoscript - наш кормилец
Пошаговый план чтобы стать Фулстеком и получать от 80тр, прогая только на JS:
👉 Учим верстку и JS до продвинутого уровня
👉 Учим особенности Node.js
👉 Выбираем фреймворк (React / Angular / Vue)
👉 Пробегаемся по общими штукам (Git / Photoshop / Figma / Английский для IT)
💵 Трудоустраиваемся
Курс Fullstack-разработчик на JavaScript всё это включает, и пройти его можно со скидкой 60%
Пошаговый план чтобы стать Фулстеком и получать от 80тр, прогая только на JS:
👉 Учим верстку и JS до продвинутого уровня
👉 Учим особенности Node.js
👉 Выбираем фреймворк (React / Angular / Vue)
👉 Пробегаемся по общими штукам (Git / Photoshop / Figma / Английский для IT)
💵 Трудоустраиваемся
Курс Fullstack-разработчик на JavaScript всё это включает, и пройти его можно со скидкой 60%
В чем разница между явным и неявным преобразованием или приведением к типу (Implicit and Explicit Coercion)?
Неявное преобразование — это способ приведения значения к другому типу без нашего ведома (участия).
Предположим, у нас есть следующее:
Результатом второго console.log будет 1. False было преобразовано в 0, true — в 1. 0 + 1 = 1.
Результатом третьего console.log будет 12. Строка 2 была преобразована в число перед умножением на 6.
Явное преобразование предполагает наше участие в приведении значения к другому типу:
Неявное преобразование — это способ приведения значения к другому типу без нашего ведома (участия).
Предположим, у нас есть следующее:
console.log(1 + '6')Результатом первого console.log будет 16. В других языках это привело бы к ошибке, но в JS 1 конвертируется в строку и конкатенируется (присоединяется) c 6. Мы ничего не делали, преобразование произошло автоматически.
console.log(false + true)
console.log(6 * '2')
Результатом второго console.log будет 1. False было преобразовано в 0, true — в 1. 0 + 1 = 1.
Результатом третьего console.log будет 12. Строка 2 была преобразована в число перед умножением на 6.
Явное преобразование предполагает наше участие в приведении значения к другому типу:
console.log(1 + parseInt('6'))
В этом примере мы используем parseInt для приведения строки 6 к числу, затем складываем два числа и получаем 7.Какое изначальное значение у CSS свойства vertical-align?
Anonymous Quiz
34%
normal
9%
middle
36%
baseline
4%
bottom
17%
top
Что такое NaN? Как проверить, является ли значение NaN?
NaN или Not A Number (не число) — это значение, получаемое в результате выполнения числовой операции над нечисловым значением:
ES6 для проверки, является ли значение NaN, рекомендует использовать метод Number.isNaN. Мы также можем написать вспомогательную функцию для решения проблемы «неравенства NaN самому себе»:
NaN или Not A Number (не число) — это значение, получаемое в результате выполнения числовой операции над нечисловым значением:
let aВ JS есть встроенный метод isNaN, позволяющий проверять, является ли значение NaN, но он ведет себя довольно странно:
console.log(parseInt('abc'))
console.log(parseInt(null))
console.log(parseInt(undefined))
console.log(parseInt(++a))
console.log(parseInt({} * 10))
console.log(parseInt('abc' - 2))
console.log(parseInt(0 / 0))
console.log(parseInt('10a' * 10))
console.log(isNaN()) // trueРезультатом всех console.log является true, несмотря на то, что ни одно из значений не является NaN.
console.log(isNaN(undefined)) // true
console.log(isNaN({})) // true
console.log(isNaN(String('a'))) // true
console.log(isNaN(() => { })) // true
ES6 для проверки, является ли значение NaN, рекомендует использовать метод Number.isNaN. Мы также можем написать вспомогательную функцию для решения проблемы «неравенства NaN самому себе»:
function checkIsNan(value){
return value !== value
}Как проверить, является ли значение массивом?
Для этого следует использовать метод Array.isArray:
Для этого следует использовать метод Array.isArray:
console.log(Array.isArray(5)) // falseЕсли среда, в которой Вы работаете, не поддерживает данный метод, можете использовать такой полифил:
console.log(Array.isArray('')) // false
console.log(Array.isArray()) // false
console.log(Array.isArray(null)) // false
console.log(Array.isArray( {length: 5 })) // false
console.log(Array.isArray([])) // true
function isArray(value){
return Object.prototype.toString.call(value) === '[object Array]'
}Каково значение свойства height у элемента div?
Anonymous Quiz
60%
100px
23%
200px
17%
100% viewport
Почему в представленном коде переменная b становится глобальной при вызове функции?
Эту проблему можно решить сначала объявив локальные переменные, а затем присвоив им значения:
function myFunc(){
let a = b = 0
}
myFunc()
Так происходит, потому что оператор присваивания ("=") имеет правостороннюю ассоциативность, т.е. присваивает значения справа налево. Поэтому код принимает следующий вид: myFunc(){
let a = (b = 0)
}
myFunc()
Сначала значение 0 присваивается переменной «b», которая не объявлена. Движок JS делает ее глобальной. Возвращаемое выражением b = 0 значение (0) затем присваивается локальной переменной «a».Эту проблему можно решить сначала объявив локальные переменные, а затем присвоив им значения:
function myFunc(){
let a, b
a = b = 0
}
myFunc()