Jump to content

nerv

Expert
  • Posts

    674
  • Joined

  • Last visited

  • Days Won

    29

Everything posted by nerv

  1. nerv

    Примитивы

    примитив от слова простой, не составной (как массив или объект) Boolean Number String Null Undefined Symbol
  2. nerv

    TypeScript

    аха. Мягко говоря javascript не очень подходит в ряде проектов ввиду своей динамической природы и предоставляемой степени свободы, которую следовало бы ограничить =)
  3. мягко говоря вопрос поставлен некорректно тем не менее, скорее всего ответом на твой вопрос будет -- модули http://frontender.info/es6-modules/ https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/import http://www.2ality.com/2014/09/es6-modules-final.html
  4. Конечно, невозможно. Причем невозможно не в рамках веба, а в принципе невозможно на сегодняшний день. Тот, кто формулировал данную задачу просто фантазер и не имеет ни малейшего представления о том, как она будет решаться.
  5. Все печально. См тему http://htmlforum.ru/index.php?showtopic=55226
  6. думаю, надо рассматривать каждый случай отдельно. Например, данный подпадает, как мне кажется, под "это твой калькулятор, ты вправе сам решать, как он будет работать" =) лично я воспринимаю данный калькулятор исключительно как игрушечный, т.к. там отсутствуют хотя бы "скобочные группы". А по скольку он игрушечный и так нормально) зависит от ситуации. А данном случае я склоняюсь к тому, что в "модуле отображения"
  7. Лайк тебе за старания =) Твой код выдает тебя. Он просто кричит, что у тебя мало практики) План таков: 1. Сейчас дожимаешь свой "объектный" калькулятор 2. После чего я покажу, как достаточно просто его визуализировать без лишних плясок с бубном --- Далее все по п.1: 1.1 Чем очевидней твой код, тем его проще читать. Вместо (''+val).matchрекомендую String(val).matchНе надо самому себе создавать доп. трудности1.2 static isOperation(val) { return (''+val).match(/^[\+\-\*\/]$/) !== null; }вместо см. match мой пример выше с REGEXP.test()1.3 вместо (+val)лучше писать Number(val)1.4 вместо let fn = new Function('return '+str+';'),см. мой пример выше со string templates1.5 рекурсия на ровном месте непонятно зачем add(val) { if(Array.isArray(val)) { val.forEach((value) => this.add(value));сам себе сложности создаешьесли хочешь валидировать массив actions, лучше отдельную функцию создать я последовательность не валидировал. на мой взгляд это лишнее) 1.6 // Предотвращает ошибку в случае если последний элемент это знак, удаляя еговсе равно try catсh нужен. Понятно почему? чтобы сделать свойство приватным. Когда ты описываешь класс, подразумевается, что он инкапсулирован в модуль что еще за "функция в ней"? =)Далее по п.2 Набросал на скорую руку очень упрощенно и приближенно https://jsfiddle.net/gLgo2s2d/2/
  8. любая реализация имеет право на жизнь, даже нерабочая =)== мелочи == в нескольких местах if(Object.prototype.toString.call( arr ) !== '[object Array]') {вместо Array.isArrayв чем смысл? this.actions = this.actions.concat(val);== главное ==могу ошибаться, но при данных let obj = new Calculator([2, '+', '*', 2.15]);твой калькулятор тихо умираетвалидация не отрабатывает, ошибка не перехватывается мне кажется тебе надо еще больше упростить провеку: не пытайся валидировать весь массив, валидурий входящие данные поэлементно думаю, проверку надо делать на этапе добавления данных, а не запуске (просчете) калькулятора --- примерно так (обработка ошибок по вкусу) 'use strict';const PRIVATE = Symbol();class Calculator { constructor(...items) { this[PRIVATE] = []; this.add(...items); } clear() { this[PRIVATE].length = 0; } add(...items) { let valideted = items.filter(item => Calculator.isValid(item)); this[PRIVATE].push(...valideted); } calculate() { let string = this[PRIVATE].join(''); let fn; try { fn = new Function(`return ${string} + 0;`); } catch (e) { console.log(1); throw e; } return Number(fn()); } static isValid(item) { return /^(?:[-+*/%]|\d+|\d+.\d+)$/.test(item); }}let obj = new Calculator(2, '/', 4);console.log(obj);console.log(obj.calculate());http://codepen.io/anon/pen/PZBowj?editors=1011
  9. new Calculator({actions: '2 + 2 * 2'})не понятно, зачем указывать объект {actions: '2 + 2 * 2'}который содержит строку, которая должна быть разбита пробелами, чтобы потом разбирать эту строку по пробелам, вместо того, чтобы просто указать {new Calculator([2, '+', 2, '*', 2]) throw new Error("Должно быть число или операция, а не: "+val);на английском static getOperations() { return { '+': {priority: 1,func: (a, => a + b}, '-': {priority: 2,func: (a, => a - b}, '*': {priority: 3,func: (a, => a * b}, '/': {priority: 4,func: (a, => a / b} }; }каждый раз создаешь и возвращаешь объект. Зачем? static checkOperation(val) { return Calculator.getOperations()[val] !== undefined; }не так проверяется наличие/отсутствие в объекте ключадолжно проверяться либо hasOwnProperty либо key in object (в зависимости от ситуации) из-за того, что используешь parseFloat, твой калькулятор позволяет писать '2_ololo + 1' // 3мне кажется это не то поведение, которое ожидается от калькуляторапохоже на хард код if(isOperation && Calculator.checkOperation(actions[actions.length-1])) { // Если последнее и новое действие это операция то заменяем старое новым actions[actions.length-1] = val; } else if (!isOperation || (isOperation && actions.length > 0)) { if(!isOperation && Calculator.checkNumber(actions[actions.length-1])) { actions.push('+'); // (!) ТУТ } actions.push(val); } }Сделай еще проще:1. на входе проверяешь регулярками 2. чтобы получить результат, делаешь так var fn = new Function('return 2 + 2 * 2;');console.log(fn());
  10. 1. @li4e, см. коммент http://htmlforum.ru/index.php?showtopic=55226#entry369653 2. забудь про DOM. Напиши калькулятор который работает БЕЗ DOM 3. если ты сумеешь правильно написать таковой, то визуализировать его работу труда не составит я тебе предлагаю упростить твой калькулятор до такого let obj = new Calculator();obj.add('7');obj.add('+');obj.add('2');obj.add('fffff'); // должно бросаться исключениеlet result = obj.calculate(); // результат или ошибкаobj.clear();class Calculator { constructor() { // your code here } add(some) { // your code here } clear() { // your code here } calculate() { // your code here }}
  11. Best practice is a feature detection instead of a browser detection.
  12. С приходом интернета ситуация такая, что на вебинарах можно научится большему/лучшему нежели в "гараже у дяди Васи". Вы уверены, что хотите быть именно верстальщиком? Быть верстальщиком и вебразработчиком не совсем одно и тоже. Последнее понятие гораздо шире. На самом деле всем глубоко пофиг в каком объеме ваши курсы. Важно другое: ваш код, его качество, применение "лучших практик", умение обосновать свой выбор и т.п.
  13. девушка просто не о том думает, когда книжки по яваскрипту читает исключение бросают изучай наследование сразу в es6 https://learn.javascript.ru/es-modern
  14. Самый простой способ выучить С++ за 21 день
  15. 15% от чего? От нуля? Есть разница между 15% от 1000 и 0.15*10^6? на деревню дедушке)
  16. это не вопрос, это предъява =) У меня обращение к подобным лицам
  17. Релиз языка программирования PHP 7.0
  18. конечно же нет =)
  19. var vopros = "Угадай цвет,"; // <-- нет такого англ. слова "vopros" var color = "red"; var count = 0;
  20. Лично мне никогда не была интересна верстка. Вместе с тем я понимаю, что хороший верстальщик дорогого стоит, т.к. часто работаю с ним на проектах. По большей части я пишу клиентский javascript. При этом, поднимал несколько проектов (full stack) самостоятельно в рамках студии, в кот. сейчас работаю. Т.е. я имею немного больше, чем общее представление, что и как у нас происходит на сервере (php+mysql+zendframework+doctrine+smarty). Последнее время рассматриваю инструменты/технологии клиентской разработки исключительно с точки зрения рационального подхода. Если какой-то инструмент сравнительно легок в освоении и позволит делать мою работу быстрее/качественнее, я скорее всего посмотрю внимательно, что это такое и подумаю над тем, использовать ли его. Вместе с тем, стараюсь не изменять уже зарекомндовавшим себя. Отдаю предпочтение базовым знаниям, таким как паттерны проектирования, алгоритмам (хотя сам себя алгоритмистом не считаю) просто потому, что они легко переносятся с ЯПа на ЯП. Стараюсь писать легкочитаемый самодокументирумемый код без ухищрений. Скучно на фронтенде. Хорошо, что такие инструменты как node.js & phonegap открывают перспективы серверной и кроссплатформерной разработки в первом случае, и мобильной во втором. Пробовал свои силы и там и там, но пока нет желания/стимула углублятся в какую-либо из них. Пытаюсь определить, что мне будет интересно, а также выгодно в долгосрочной перспективе. Глобально, смотрю в сторону Artificial Intelligence. Читаю книгу Искусственный интеллект. Современный подход, параллельно прохожу онлайн курсы. Забавно, оказалось, что я запилил ряд простых вещей из этой области еще до ее изучения =) Также рассматриваю направление анализа данных. Сам не знаю, что хочу. Выясняю =)
  21. Каскадные таблицы стилей для этого существуют
  22. Погуглил за вас https://tech.yandex.ru/maps/doc/jsapi/2.0/ref/reference/GeoObject-docpage/#param-options.openBalloonOnClick https://tech.yandex.ru/maps/jsbox/2.1/icon_customImage
  23. кажется, у @psywalker есть статьи на все случаи жизни. Этой и загробной. Для тех, кто в нее верит =)
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy