Задать вопрос
  • Почему советуют не выбирать yii2 для разработки?

    @Flying
    Даже если не учитывать массу очень дельных аргументов в других ответах - начинать новые проекты на Yii2 не стоит уже по той причине что 2-я версия уже почти два года официально находится в состоянии feature freeze т.е. по сути не развивается. Два года - огромный период в IT, к примеру поддержки только вышедшего PHP 7.4 и, тем более, 8-й версии там можно уже не ждать.

    Т.е. поддерживать уже имеющиеся проекты там ещё можно, но начинать новое лучше на framework'е у которого есть активная разработка и понятный план развития. В этом плане наиболее предсказуема Symfony.
    Ответ написан
    1 комментарий
  • Примеры сайтов крутых разработчиков/дизайнеров/художников и в целом творческих людей?

    FloydReme
    @FloydReme
    Пишу музыку и программирую
    awwwards.com
    Ответ написан
    Комментировать
  • SEO - как правильно верстать ссылки?

    RotgarSett
    @RotgarSett
    SEO Эксперт
    С точки зрения поисковой оптимизации разницы ровно ноль. Делайте как вашей душе угодно. Ну и, как правильно заметил profesor08, третий вариант невозможен, поэтому выбирайте из первых двух.

    Также вы правильно заметили что когда ссылка охватывает весь блок, то это более юзер-френдли, поэтому лучше делать именно так.
    Ответ написан
    6 комментариев
  • Какие книги по программированию must-have?

    delphinpro
    @delphinpro
    frontend developer
    Не буду оригинален, эти книги у всех на слуху (и у меня на полке =).

    Макконнелл: Совершенный код
    Кнут: Искусство программирования
    Роберт Мартин: Чистый код. Создание, анализ и рефакторинг
    Гамма, Влисидес, Хелм, Джонсон (также известные как "Банда четырех"): Приемы объектно-ориентированного проектирования. Паттерны
    Фаулер: Рефакторинг. Улучшение существующего кода
    Ответ написан
    1 комментарий
  • Как в PUG + NUXT вставлять background image?

    amux
    @amux Автор вопроса
    alp.ac
    :style="{'background-image': 'url(' + require('~/assets/img/logo.png') + ')' }"
    Ответ написан
    Комментировать
  • По какому пути вы бы пошли при рефакторинге?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Ни один из перечисленных!
    Добавить необязательный параметр для задания формата возвращаемого значения в метод getBalance и всё.
    Ответ написан
  • Как начать программировать под web (frontend, backend)?

    @Lord_Dantes
    Создаете папку называете " мой веб проект ".
    Создаете там файл index.html и main.css
    И создаете свой первый сайт. Первый шаг выполнен.

    Для достижения остальных 249125125 шагов купите ПРО-версию интернета ведь он такой дорогой!
    Ответ написан
    Комментировать
  • Как сделать склонение рандомных чисел на Js?

    @Aves
    const source = {one: 'человек', few: 'человека', many: 'человек'};
    const pr = new Intl.PluralRules('ru');
    
    for (let i = 70; i<= 400; i++)
      console.log(`${i} ${source[pr.select(i)]}`);
    Ответ написан
    Комментировать
  • Как писать Толковый ООП код в JS?

    @MadridianFox
    Web-программист, многостаночник
    Понимание ООП приходит с опытом. Сначала надо написать много кода, самому заметить его недостатки и тогда перечитывая те же самые статейки вы начнёте по новому понимать, что вот конкретно эту штуку можно было бы использовать в том моём коде, и было бы лучше.

    Я разделяю ООП на аутентичное и классическое. Аутентичное, это ООП как его представлял автор - объекты обмениваются сообщениями.
    Классическое - это то как оно реализовано в Java.
    И там и там есть инкапсуляция и полиморфизм. Наследование это приятная фишка классического ООП. Так же как и все пляски с типами. Вообще строгая типизация не является частью ООП. По крайней мере не является частью аутентичного ООП.

    Поэтому переход на typescript позволит только более точно воспроизводить классическое ООП. Ну и проверку типов добавит. Это само по себе полезно, но для ООП никакого значения не имеет.

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

    Заметьте, про js я почти ничего не сказал. Потому что дело не в нём. Дело только в понимании ООП. У языков программирования, конечно, есть различные возможности и ограничения что которые позволяют использовать ту или иную парадигму. Но ООП на js можно было делать и до es6, просто потому что в js можно инкапсулировать код в объект.

    И ещё, когда мы начинаем делить код на объекты, необходим механизм разделения кода на файлы и собирания его обратно. Т.е. нужна модульность. Лучше всего, конечно, использовать webpack, но вроде как в js есть и другие системы. Не сборки, а именно подключения модулей.
    Ответ написан
    1 комментарий
  • Как реализовать поиск значения в объекте?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Чей id хотим найти: const color = 'orange';.

    Ищем:

    const { id = null } = Object.values(fruits).find(n => n.color === color) || {};
    
    // или
    
    let id = null;
    for (const k in fruits) {
      if (fruits.hasOwnProperty(k) && fruits[k].color === color) {
        id = fruits[k].id;
        break;
      }
    }

    UPD. Вынесено из комментариев:

    А если у меня несколько оранжевых фруктов, как поступить?

    Ну, доставайте всё, что есть.

    Сразу достаём массив id для какого-то конкретного цвета:

    const ids = Object.values(fruits).reduce((acc, n) => (
      n.color === color && acc.push(n.id),
      acc
    ), []);

    Или, сначала группируем данные, а затем можно извлекать массивы id для различных цветов:

    function group(data, key, val = n => n) {
      const getKey = key instanceof Function ? key : n => n[key];
      const getVal = val instanceof Function ? val : n => n[val];
      const result = {};
    
      for (const n of data) {
        const k = getKey(n);
        (result[k] = result[k] || []).push(getVal(n));
      }
    
      return result;
    }

    const idsByColor = group(Object.values(fruits), 'color', 'id');
    
    const orangeIds = idsByColor.orange || [];
    const greenIds = idsByColor.green || [];
    Ответ написан
    2 комментария
  • Правда ли, что сейчас так сложно найти работу?

    @IvanOne
    Я вот тоже не так давно искал работу, и я скажу так. Надо ходить на собеседования и учиться. Иногда компании пишут в требованиях какие то супер знания, а по факту пообщавшись с разработчиками на собеседовании, понимаешь что компании просто ищут человека который близок им по духу и опыту работы, при этом я не раз проходил собеседование на 'троечку', но получал оффер, не думаю что там люди оценивали только мои знания алгоритмов или как я пишу голый sql через orm. Возможно это только мое мнение. И кстати насчет курсов они не так уж плохи иногда, просто нужно искать. Я недавно нашел отличный курс по определенному набору технологий, да там по большей части пересказ документаций, но если видосом воспринимается лучше то это хороший инструмент, плюс делятся практиками опытом, но далеко не все курсы такие.
    Ответ написан
    3 комментария
  • Какой следующий этап в изучении Vue после того как научился создавать блог с использованием компонентов и Vuex?

    @Barmunk
    попробуйте на vue сделать jivosite:
    - чат в реальном времени
    - пул операторов
    - перевод чата другому оператору в реальном времени
    - каналы доставки (емейл, вк, твиттер, фб и т.д.)
    - легкая установка одним js скриптом без отдельной библиотеки аля яндекс-метрика
    - кастомизируемый редактор дизайна виджета в реальном времени
    Ответ написан
    Комментировать
  • Можно ли изменить высоту псевдоэлемента ::before через js/jquery?

    y0u
    @y0u Куратор тега JavaScript
    dev
    Вычислите нужную высоту и вставьте css код прямо в HEAD

    $('head').append('<style>.element::before { height: ' + тут ваша высота + 'px; }</style>');
    Ответ написан
    Комментировать
  • Есть ли аналог htmlacademy или javarush для начинающих PHP-разработчиков на русском языке?

    deepblack
    @deepblack
    ru.hexlet.io
    Если совсем начинающий, то вот от Hexlet ресурс (совсем бесплатно):
    https://code-basics.ru/languages/php

    Offtop:
    Оказывается toster блокирует некоторые ссылки
    Ответ написан
    Комментировать
  • Starlink от SpaceX - прощай звездное небо, кошмар астронома?

    @airbor
    Представьте себе 12 000 человек на поверхности всей земли. Ну то есть не 8 миллиардов как сейчас, а всего 12 000. Представляете эту плотность? Можно было бы всю жизнь искать кого-то и не встретить ни одного человека.

    А теперь поднимемся на высоту обриты, где площадь сферы еще больше. Значительно. И плотность еще меньше.

    12 000 - это нисколько. Вероятность врезаться в такой спутник примерно такая же как вероятность попасть в человека брошенным из космоса камушком, если бы на планете было не 8 миллиардов человек, а 12 000.
    Ответ написан
    3 комментария
  • Какая на ваш взгляд лучшая система мониторинга удаленных сотрудников?

    Sanes
    @Sanes
    Не надо сидеть над душой. Ставите задачу, сроки и проверяете. Доверять надо людям.
    Ответ написан
    21 комментарий
  • Javascript библиотека для DOM & ajax в 2019?

    VueJs
    Ответ написан
    Комментировать
  • Зачем/Для чего нужен данный код?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это геттеры и сеттеры. То есть функции доступа к свойству.

    Зачем? Попробую объяснить простым языком. Большие программы сложно полностью загрузить в мозг отдельного человека и представлять всю структуру целиком со всеми нюансами одновременно. Поэтому принято делить программу на части. Вынос кода в отдельную функцию - один из простых способов. В ООП к этой проблеме подходят более основательно. Класс как явление - тому пример.

    Класс делит программу как минимум на 2 части - то, что внутри класса, и то, что снаружи класса. Считается как бы, что класс пишет один человек, а пользуется им другой человек. Но это может быть и один единственный человек, всё равно так проще, потому что человек сначала пишет класс, тщательно всё там кодит и тестирует, а потом напрочь ЗАБЫВАЕТ, как он устроен внутри, потому что он уже готов и им можно пользоваться. То есть человек выгружает из своей ненадежной человеческой памяти эту инфу и переходит к следующей задаче, в которой просто использует этот класс. Всё, что ему нужно помнить, это то, как пользоваться классом, а всю подноготную можно забыть до тех пор, пока не понадобится улучшить класс. И здесь снова получается удобно. Когда будем улучшать класс (это не обязательно тот же самый человек), можно не думать о том, как его используют. Главное, чтобы способ взаимодействия с классом не изменился (не сильно изменился).

    В вашем примере - это просто заготовка. Дальше нужно наполнять эту заготовку функционалом. В самом простом виде геттер просто возвращает приватное свойство, а сеттер меняет его. Так нужно сделать сразу, чтобы потом не пришлось переписывать всю программу (и согласовывать с коллегами). Но даже здесь уже есть небольшое правило - нельзя передавать отрицательные значения. Условия могут быть сложнее. И вообще всё может быть сложнее. Например, вместо age можно хранить дату рождения. И функция GetAge будет каждый раз высчитывать разницу с текущей датой. По сути для внешнего использования ничего не меняется, но внутри происходит магия.
    Ответ написан
    3 комментария