• Что лучше хранить в базе данных 0 или None?

    Beshere
    @Beshere
    Разработчик
    None - это не 0 и не "", а типа null - пусто.

    А что там хранить, зависит от логики заполнения поля. Например, вы храните показания термометра. Глуповато хранить 0 в этом случае, если данных нет, согласитесь. А вес или рост человека, можно и так и так - навряд ли есть люди с нулевым ростом или весом.
    Ответ написан
    4 комментария
  • Зачем передают объект в функцию вот так?

    mannaro
    @mannaro Куратор тега JavaScript
    Умею профессионально гуглить
    Это spread оператор. Такая запись просто создаёт объект, в который копирует все ключи из другого объекта. Это просто синтаксический сахар для Object.assign({}, anyObj);

    Очевидно, так надо делать - когда это нужно. И не надо делать, когда это не нужно. Если надо скопировать объект, скопировать объект и добавить в него новые ключи, объединить 2 объекта. Развитие этих конструкций получило после популяризации философии immutable.
    Ответ написан
    Комментировать
  • Чем заменить функцию .map() в моем случае?

    @askhat
    На вопрос ответил автор вопроса, я в свою очередь попытаюсь объяснить что произошло.

    Рендер в реакте всегда идёт по наименее трудозатратному пути, а именно вычисляет дельту (разницу) между новым стейтом и предыдущим, если таковой имеется. Например:

    class TodoList extends React.Component {
      state = {
        todos: [
          'Commit',
          'Push'
        ]
      }
      render() {
        return <ul>
          {this.state.todos.map(item => {
            return <li>{ todo }</li>
          }
        </ul>
      }
    }


    Если стейт компонента изменится, скажем при добавление элемента в начало списка todos, так что он станет таким:

    const todos = [
      'Init',
      'Commit',
      'Push'
    ]


    Реакт вычислит два древа VirtualDOM:

    // Начальный стейт
    <ul>
      <li>Commit</li>
      <li>Push</li>
    </ul>
    // Добавлен элемент
    <ul>
      <li>Init</li> // <- разница начинается здесь и до конца древа
      <li>Commit</li>
      <li>Push</li>
    </ul>


    Здесь выполняется работа которой можно было бы избежать. К примеру если бы элемент был добавлен в конец списка:

    const todos = [
      'Commit',
      'Push',
      'Merge'
    ]


    То реакт получил бы на сравнение другие два древа элементов:

    // Начальный стейт
    <ul>
      <li>Commit</li>
      <li>Push</li>
    </ul>
    // Добавлен элемент
    <ul>
      <li>Commit</li>
      <li>Push</li>
      <li>Merge</li> <- разница начинается здесь, от начала и до сих по ничего не менялось
    </ul>


    Дельта этих двух списков меньше, а значит и работы нужно сделать меньше.

    Совершенно очевидно что <li>Commit</li> и <li>Push</li> не менялись, однако реакт недостаточно умён чтобы это понять. Чтобы помочь ему следует воспользоваться специальным пропом key={}. Он может быть значением любого типа, единственно требование — значение должно стабильно идентифицировать соответствующие данные.

    Если бы компонент выглядел так:

    class TodoList extends React.Component {
      state = {
        todos: [
          { id: 0, text: 'Commit' },
          { id: 1, text: 'Push' }
        ]
      }
      render() {
        return <ul>
          {this.state.todos.map(item => {
            return <li key={todo.id}>{ todo.text }</li>
          }
        </ul>
      }
    }


    То добавление элемента в начало массива, породило бы следующий стейт:

    const todos = [
      { id: 2, text: 'Init' },
      { id: 0, text: 'Commit' },
      { id: 1, text: 'Push' }
    ]


    И, снова, два древа элементов:

    // Начальный стейт
    <ul>
      <li>Commit</li> // id 0
      <li>Push</li> // id 1
    </ul>
    // Добавлен элемент
    <ul>
      <li>Init</li> // id 2 новый элемент отобразится в начале
      <li>Commit</li> // id 0
      <li>Push</li> // id 1 
    </ul>


    Благодаря подсказке, реакт не учтёт в дельте элементы чьи идентификаторы не изменились, и, как следствие, не будет делать лишних действий.

    Таким образом использовать индекс в массиве в качестве ключа — не лучшая идея, особенно если массив будет меняться. По той же причине не следует использовать Math.random() в качестве ключа, так вы почти гарантировано будете всегда получать нестабильные идентификаторы.

    Подробнее об этом можно почитать здесь — Reconciliation.
    Ответ написан
    5 комментариев
  • Почему некорректно отрабатывает JSON.stringify?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Всё работает корректно. Свойства, имена которых не являются целыми числами большими или равными нулю, отбрасываются. У вас же массив. Используйте объект.
    Ответ написан
    Комментировать
  • Что такое item?

    Adamos
    @Adamos
    Семантически вернее всего, наверное, будет "штука".
    Это одна штука неважно чего из множества таких же штук.

    А вот если эта штука действительно стала самостоятельной боевой единицей - тогда она уже не item, а unit :)
    Ответ написан
    Комментировать
  • Почему парсинг не идет?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Достаточно заглянуть в исходный код страницы, чтобы заметить, что блок с идентификатором taskContainer там пуст, и понять, что его содержимое создаётся JavaScript'ом. BeautifulSoup не исполняет JavaScript. Либо анализируйте работу javascript-кода и выполняйте такие же запросы к бэкенду, либо используйте Selenium.
    Ответ написан
    2 комментария
  • Чем android: отличается от app: в XML разметки?

    @acbelter
    android: используется для доступа к атрибутам, которые предоставляются Android-платформой, а app: используется для доступа к атрибутам, которые предоставляются приложением (например, из подключенных библиотек).
    Ответ написан
    Комментировать
  • Что такое бизнес логика android приложения?

    @MaxLich
    java developer
    Это часть кода, которая выполняет то, ради чего пишется это приложение. Кроме бизнес-логики, в приложении может быть код, который отвечает за отображение информации, управление информацией, работу с внешними ресурсами/сервисами, какой-то вспомогательный код (например, удалить все символы 'x' в строке), и т.д.
    Ответ написан
    Комментировать
  • Лучше свой проект или полный объем необходимых знаний?

    gobananas
    @gobananas
    finishhim.ru
    Я бы проголосовал за свой проект, потому что только в реальных условиях возникают вопросы и ситуации, о которых не прочитать в учебниках. Я когда начинал реальные проекты делать просто офигевал поначалу от объёма проблем, о которых в руководствах ни слова.
    Ответ написан
    Комментировать
  • Стоит ли использовать vue js для ленивой реализации js плюшек верстальщику?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    VueJS это Angular без неудачных решений типа очень кривого DI, скоупов, упоротых директив и ненадежной проверки изменений.
    VueJS это React без завиральных идей типа JSX и иммутабельности.
    VueJS это jQuery без спагетти-кода и легаси, зато с декларативностью и поощрением модуляризации кода.

    При всем этом в минимальном варианте достаточно подключить на страницу один скрипт с CDN и не морочиться с webpack или, прости господи, gulp.
    Ответ написан
    Комментировать
  • Как в pug, jade показать контент при изменении url?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    pug работает статически, т.е. после его компиляции создается html файл, и этот html файл уже открывается в браузере. Если вы напишите так
    if a > 10
    div hello
    else
    div ne hello

    то если в момент компиляции a была больше 10, то в html файл попадет строка
    <div>Hello</div>
    и больше никак, до следующей компиляции (и если там уже a будет меньше, то попадет ne hello).
    Поэтому pug ничего не знает о объекте window и адресе текущей страницы. Вы можете адрес задавать в шапке страницы указывая свою переменную, например currentPage. И везде на разных страницах указывать ее разной
    Ответ написан
    Комментировать