• Как вы боретесь со слабой типизацией и зачем ее придумали?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Хорошая архитектура снижает необходимость в приведении типов.
    5af00f1b811b0153622827.png
    А придумали и используют динамическую типизацию потому, что она существенно снижает TTM.
    Ответ написан
    4 комментария
  • Как вы боретесь со слабой типизацией и зачем ее придумали?

    И самое главное: кто придумал слабую типизацию?

    Для начала разберитесь с классическим заблуждением, и не путайте слабую типизацию и динамическую типизацию. Сейчас из вашего вопроса можно подумать, что это одно и то же.

    Динамическую типизацию придумали для того, чтобы было легче писать обобщённые алгоритмы и мета-алгоритмы, в дин. языке для обобщения кода не нужны ухищрения типа дженериков (TypeScript, C# и много чего ещё) или шаблонов/макросов (C++). В ОО-языках часто доступны и другие удобства, например смена интерфейса объекта в зависимости от его состояния (т.к. решение о возможности вызова метода/свойства объект может принимать сам).

    Слабую типизацию придумали чтобы заставить людей страдать (да, я не знаю кому такое нужно вообще).

    Как вы пишете код на жс?

    Мы не пишем код на JS, мы пишем код на TypeScript. Да, такие сейчас странные времена, когда язык со статической типизацией компилится в язык с динамической, т.к. исполнять на клиенте (в браузере) больше нечего пока.

    Он же не должен быть напичкан parseInt() и !== undefined.

    Не должен. Если писать на голом JS, можно а) использовать JSDoc для аннотаций о типах, и работать с типами на уровне документации и договорённостей; б) писать алгоритмы в максимально обобщенной манере, и требовать по возможности не конкретных типов данных, а значений, над которыми допустимы нужные вам операции; в) покрывать код тестами, что и спасает в динамических языках.

    Чем больше проект, тем важнее статическая типизация, это нормально. JS - это язык который популярен по техническим причинам и по стечению обстоятельств, а не потому что он этого заслуживает (имхо). Очень неглупые дяди и тёти не стали бы тратить годы своего времени и кучу денег на разработку TypeScript и Flow, если бы это было ненужно.
    Ответ написан
    1 комментарий
  • Агрессивное собирание инфы о пользователе через браузерный js?

    kuzvac
    @kuzvac
    https://github.com/Valve/fingerprintjs2 дальше можете сами продолжите делать что вам необходимо.
    Ответ написан
    Комментировать
  • Абстракция в JavaScript?

    @TimurBaiguzhaev
    Backend Golang Developer
    Помните, как родители заставляли вас играть на фортепиано или учить стихи?.. Так вот, Абстрактные классы также как и многие родители вовсе и знать не знают зачем ребенку-потомку это будет нужно, и как он это будет использовать, но уверены, что так НАДО! Т.е. такие классы содержат абстрактные методы, которые являют собой объявление метода без самой реализации, как фантик без конфетки, тем самым обязывая потомка, этот метод реализовать. Как и в жизни, где родители нередко перекладывают на детей свои нереализованные мечты…

    Вот в такой шутливо-серьезной форме, мы затронули тему абстрактных классов и семейных отношений, как способ понять… и то и другое?.. А если серьезно, то разумеется, в программировании не должно быть случайных методов, и любые методы и свойства являются частью продуманной иерархии классов, которая как генеалогическое дерево, может давать возможности расширять функционал от поколения к поколению. А абстрактные классы, и еще более абстрактные – интерфейсы ( interface — вообще не содержит реализаций ), помогают программисту не потерять, не забыть реализовать общие необходимые для всех потомков умения в жизни, без которых особь умрет, а с ней и приложение.


    Источник : habrahabr.ru

    Abstract classes in JavaScript
    Ответ написан
    Комментировать
  • Как в JS работать с альтернативными часовыми поясами?

    Veliky
    @Veliky
    Full Stack Web Dev
    Возможно для вас будет лучше использовать Moment Timezone.
    Ответ написан
    Комментировать
  • React.js: как правильно собрать проект для публикации на сервере?

    Millerish
    @Millerish Автор вопроса
    Нужно было добавить в package.json:

    "homepage": "http://site.ru/dir/dir2/",
      "start_url": ".",
    Ответ написан
    2 комментария
  • Как выбрать первое значение из массива?

    @Arik
    echo $arr[0][0];
    Ответ написан
    Комментировать
  • Какой ресурс самый полезный для изучения angularjs?

    их много мне нравится сайт https://www.w3schools.com/angular/default.asp
    Ответ написан
    Комментировать
  • Зачем нужно ООП в javascript?

    для того же, для чего и в других языках
    Ответ написан
    1 комментарий
  • В каком порядке изучать математические дисциплины?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    В старших классах проходят степенные функции, тригонометрию, производные и интегралы, без этих знаний ни вектор в плоскости не повернёшь, ни кружок в шейдере не нарисуешь, так что лучше повторить. Чтобы закрепить эти знания, погуглите или возьмите в библиотеке сборник задач по математике для поступающих в вузы. В подобных книжках обычно задачи слишком сложные, на практике такие не встречаются, так что решать всё не обязательно.

    Если ещё не читали, то прочтите статью Линейная алгебра для разработчиков игр, ещё могу посоветовать этот доклад с GDC. Для лучшего понимания трёхмерной графики очень полезно научиться моделить примитивные вещи в трёхмерном редакторе, а ещё лучше попробовать процедурно сгенерировать какую-нибудь сферу или кубик.

    Кроме того, для расширения кругозора советую погулять по ссылкам википедии про вычислительную геометрию. Какие-то вещи стоит попробовать написать самому (например, алгоритм пересечения отрезков), а про какие-то достаточно просто знать - с той же триангуляцией можно месяцами возиться, для таких вещей лучше брать готовую библиотеку.
    Ответ написан
    Комментировать
  • Как отловить EventListener при ajax?

    @asd111
    Скрипты, загруженные через ajax НЕ выполняются. Их нужно выполнять вручную.
    Получаем нужный javascript со всеми event listener через AJAX:
    <script type="text/javascript" id="runscript">
        alert("running from main");
    </script>

    После получения делаем:
    eval(document.getElementById("runscript").innerHTML);


    Но лучше взять vuejs и забыть про проблемы на фронтенде.
    Ответ написан
    1 комментарий
  • Какие задачи (сайты) лучше всего реализовать на MEAN стеке?

    tema_sun
    @tema_sun
    Вы теплое с высоким сравниваете. С одной стороны у вас стек технологий, а с другой готовое решение какой-то задачи. И с какого вдруг php стал "мощнее" js?

    Видеохостинг или cайт с данными о (1000 000 товаров) на стеке MEAN также не сделаешь.

    Вы знаете зачем вообще mongodb появилась? Блин, да у них слоган даже "for GIANT ideas". Сайт с миллионами документов как-раз для монго.
    Ответ написан
  • Авторизация через соц. сети в концепции SPA?

    @vetsmen Автор вопроса
    Кому интересно решение данной задачи: все предельно просто.
    Сначала создаем pop-up окно, авторизовываемся в нем и редиректимся на нашу страницу прослойку, там мы имеем уже наш jwt токен (или любой другой) и через window.opener мы можем вызвать любой метод в родительском окне. К примеру: window.opener.setToken('{token}'), перед этим определив функцию в родительском окне:
    window.setToken = function(token){ /* записываем наш токен */}
    Ответ написан
    Комментировать
  • Разве Composer бесполезен в 2017?

    clockworkbird
    @clockworkbird
    leko.team
    Если тимлид не ставил задач по подключению композера и настройки тестов, то получается, что вместо реальных задач вы занимались самодеятельностью и потратили на это ресурсы компании (свое рабочее время).
    Junior-вакансия это прощает, но если хотите работать в команде, нужно понимать, что в работе важен результат, а не самолюбование.
    Кроме того, исходя из того, что проект старый, высок риск того, что вы подключив композер что-то сломали. Например, кто-то когда-то "пофиксил" код в копипастенной библиотеке (как бы это дико не звучало), а вы выкачали ее исходную версию из репозитория и т.д. - моментов, на самом деле много.
    Может это разовая задача по внешнему проекту на 3 рубля и какой смысл в ней городить огород, если ее нужно сделать за пару часов, отдать клиенту и забыть.
    Конечно, тимлид хоть и динозавр, но будет обоснованно не доволен. Странно, что он не контролировал ход работы - такую самодеятельность в процессе работы нужно пресекать на корню.

    Композер, конечно желательно использовать. Тесты (и непрерывная интеграция, и код-ревью и т.д...) - замечательно, но многие в реальном мире, в котором приходится поддерживать проекты с историей (в которой композера не было и в помине), замечательно живут и без них.

    Рефакторинг проекта и модернизация процесса разработки - замечательные, но отдельные задачи, которые требуют предварительного обсуждения и согласования.
    Сделай поставленную задачу, предложи вариант развития (композер и тесты), обсудите с командой и тимлидом, запланируйте внедрение - все будут довольны.
    Ответ написан
    2 комментария
  • Разве Composer бесполезен в 2017?

    search
    @search
    мама говорит что я особенный
    Композер - это, пожалуй, лучшее что произошло с пхп 5й версии.
    Валить или переубеждать тимлида - это по сути одно и тоже, если присмотреться. Просто демонстрация вашей неспособности брать на себя ответственность.

    Года 3 назад на моей прошлой работе в команду пришел очень толковый проактивный человек, который никого не стал переубеждать. Он просто стал делать правильные вещи. Без объяснений. И без приглашений. Коммитеть юнит тесты. Подключать линтеры. Деклайнить неудачные пулл-реквесты. В итоге он сам стал тимлидом где-то через год.

    Такие дела.

    Не у всех, правда, стальные яйца. Но за проактивность никогда еще не увольняли. Если вы уже создали пулл реквест, то "переубеждение" становится задачей тимлида.
    Ответ написан
    3 комментария
  • Как найти все экземпляры определенного класса в javascript?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    const instancesOfFoo = new Set();
    class Foo {
      constructor() {
        instancesOfFoo.add(this);
      }
    }
    
    new Foo;
    new Foo;
    new Foo;
    
    console.log([...instancesOfFoo.values()]);


    Set
    Ответ написан
    Комментировать
  • Как работает функция - обертка в этом случаи?

    Devinora
    @Devinora Автор вопроса
    Front-end web development
    Точка, идущая сразу за цифрой в числе считается десятичной точкой, а не обращением к свойству. Чтобы этого избежать, можно например использовать пробел 12 .toString(); // '12'
    https://developer.mozilla.org/en-US/docs/Web/JavaS...

    P.S: Ответ был дан в комментариях, но автор поленился написать ответ, по этому пишу его я.
    Автор: Aves
    Ответ написан
    Комментировать