• В чем превосходство Typescript?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Типы? Есть JSDOC.

    Именно Типы.
    1. Система типов у TypeScript по возможностям превосходит JSDOC.
    2. Много инструментов для автоматической проверки типов. JSDOC поменьше.


    Это такой более строгий предохранитель от того чтобы не выстрелить себе в ногу. Можете воспринимать это как навороченный линтер, который проверяет не форматирование кода, сколько логику его работы.
    Ответ написан
    1 комментарий
  • Возможность использования localStorage поддерживается в es5?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    localStorage это возможность браузеров, а не особенность языка.

    can I use пишет, что не поддерживается только на очень древних версиях:
    скрин
    605470ded5b8a572829998.png
    Ответ написан
    1 комментарий
  • Как работает атрибут scrset?

    @Steppp
    Идешь ты в магазин, в кармане 125р! Подходишь к витрине и видишь конфеты, одни за 100, другие 200 и 300))) Суешь продавцу 125р, и говоришь, дайте мне конфет за 200, у меня же больше 100р )))

    Думаю понятно объяснил)))
    Ответ написан
    Комментировать
  • Можно ли сказать, что языки высокой уровни абстракции инкапсулируют код низкоуровневых языков?

    Нет. Высокоуровневые языки просто уходят от низкоуровневых конструкций.
    Например есть низкоуровневый машинный код, ниже которого только электрические сигналы.
    Есть ассемблер, который абстрагируется от машинного кода и уже работает на уровне инструкций и регистров
    Есть си, который уже работает с переменными, указателями и структурами
    Есть C++ в котором уже есть объекты, наследование и прочее ООП.
    А есть python, который просто интерпретируемый.
    И имеет динамическую типизацию и сборщик мусора.

    Ну и высокоуровневый язык != медленный.
    Как пример - Rust, в котором есть очень высокоуровневые абстракции, но при этом он не уступает Си ни в скорости, ни в потреблении памяти.

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Это ваше собственное определение про обратное наследование?
    Родительский класс ничего не знает о методах потомков.
    Полиморфизм нужен для организации уровня абстракции.
    У автомобиля есть абстрактный интерфейс: разгоняться, тормозить, поворачивать. Вы применяете соответствующие методы, а под капотом происходит полиморфизм в зависимости от того, на какой машине вы едете: на ДВС при ускорении отодвигается заслонка, обогащается сместь, поступает в форсунки, увеличиваются обороты; у электромобиля частотник увеличивает частоту, синусоиды, идущей на двигатели, он начинает крутиться быстрее... Потом кто-то придумал гибрид и там всё гораздо сложнее, но на уровне "предка" обо всём этом не нужно думать, благодаря полиморфизму мы имеем простые понятные методы, которые у потомков реализованы по-своему.
    Ответ написан
    Комментировать
  • Вопрос к HR. Как часто ищут/принимают соискателей именно с высшим образованием?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Я работал в двух компаниях, где через какое-то время просили принести диплом о высшем образовании. Это компаниям было нужно для участия в каком-то тендере. А это, на минуточку, огромные деньги.
    Так что да, диплом о высшем образовании для некоторых компаний очень выгоден с финансовой точки зрения.
    Ответ написан
    Комментировать
  • Почему SSD медленно записывает?

    @tukreb
    Смарт в норме (по крайне мере что попало в скриншот), а вот со свободным местом очень плохо.
    SSD нельзя заполнять больше 75%, дальше скорость может падать катастрофически.
    Попробуйте удалить 100 ГБ, подождите когда сработает TRIM и проверьте.
    Ответ написан
    Комментировать
  • Можно ли замедлить работу программы, чтобы дать ей больше процессорного времени на исполнение?

    15432
    @15432
    Системный программист ^_^
    То есть вдобавок к "слайд-шоу", вы хотите добавить тормоза логики самой игры?

    Плавно не получится, если на рендеринг кадра уходит секунда, вы будете эту секунду ждать, пока кадр не прорисуется.
    Ответ написан
    2 комментария
  • Вопрос к HR. Как часто ищут/принимают соискателей именно с высшим образованием?

    DevMan
    @DevMan
    отделяйте мух от котлет.
    есть ряд вакансий, где ВО – мастхэв. и это регламентировано не реальной потребностью, а требованием от руководящего департамента: то есть – чистая административщина.
    всем остальным – пофигу на ваше образование, оно может быть только одним из плюсов и далеко не всегда решающим.

    плюс надо понимать, что абстрактное ВО в целом – это ни о чем: у каждого ВО есть своя ценность.
    Ответ написан
    Комментировать
  • Как документировать код на JavaScript?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Все придумали до нас: JSDoc
    Ответ написан
    1 комментарий
  • Как искать текст чтобы не "ломался" html?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Перебирать не innerHTML, а узлы, DOM Nodes, рекурсивно. Из них рассматривать только текстовые, и менять в них.
    Ответ написан
    9 комментариев
  • Как понять это выражение из JavaScript?

    @cheeroque
    Потому что запятая в индексе [1, 3] – это оператор. Выражение во вторых квадратных скобках возвращает тройку, [3,2,2,8,5][3] возвращает элемент массива с индексом 3, то есть четвёртый по счёту, то есть 8.

    Спасибо Дмитрий Беляев за исправление :)
    Ответ написан
    4 комментария
  • Как правильно выполнить деструктуризацию?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    А так?
    const dataReq: Record<string, string>  = { ...req.params, ...req.query };
    Ответ написан
    Комментировать
  • Java script, как сделать так чтобы срабатывали все условия if else?

    Alexandre888
    @Alexandre888
    Javascript-разработчик
    все грехи данного кода:

    function calculateFoodOrder(numAnimals, avgFood) {
      var numAnimals = 10;
      var avgFood = 3;
      if (numAnimals < 0) {
        return -1;
      } else if (numAnimals = String) {
        return -1;
      } else if (avgFood < 0) {
        return -1;
      } else if (avgFood = String) {
        return -1;
      } else {
        return numAnimals * avgFood;
      }
    }
    
    console.log(calculateFoodOrder());


    • = - оператор присваивания, не сравнения.
      чтобы сравнить A с B, вы должны использовать один из операторов сравнения:
      ==, ===, <=, >=, <, > . . .

    • если вы хотите проверить, является ли передаваемое параметру значение строкой, вы должны:
      1. убрать вышеобъявленные переменные с помощью var
      2. проверить, является ли значение параметра numAnimals строкой - это делается с помощью оператора typeof:
      if (typeof numAnimals === "string") { return . . . }


    • чтобы правильно вызвать функцию с таким кодом и получить правильный ответ - вам нужно передать в круглые скобки значения, которые присвоятся параметрам функции (numAnimals и avgFood):
      console.log(  calculateFoodOrder(значение1, значение2)  ) 
      
      console.log(  calculateFoodOrder(550, 241)  ) // пример

      не забывайте, что, если вы передаёте параметру функции строку - вы должны обрамить её в один из доступных видов кавычек (``, '', "").

    Ответ написан
    3 комментария
  • Как сверстать такой текст?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Ответ написан
    Комментировать
  • Как ввести целое число и определить, верно ли, что все его цифры четные (язык Си)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    int isAllDigitsEven(int x) {
      while (x > 0) {
        if (x % 2) {
          return 0;
        }
        x /= 10;
      }
      return 1;
    }
    
    int main(void) {
      int a;
      scanf("%d", &a);
      if (isAllDigitsEven(a)) {
        printf("YES\n");
      } else {
        printf("NO\n");
      }
      return 0;
    }
    Ответ написан
    1 комментарий
  • Хочу узнать мнение программистов о моем первом проекте?

    WblCHA
    @WblCHA
    Дополню Дмитрия.
    1. Плохое знание нативных методов.
    inp.value.indexOf('/')!=-1 // includes
    
    inp.value.slice(-1) 
    inp.value.substring(0, inp.value.length - 1) // в честь чего тут субстринг, когда везде слайс используешь?

    2. Извращения:
    inp.value.slice(index - inp.value.length + 1) // для чего тут inp.value.length?

    3. Неумение использовать свитч:
    case 'multiply':
                inp.value += item.innerText
              break;
              case 'division':
                inp.value += item.innerText
              break;
              case 'sub':
                inp.value += item.innerText
              break;
              case 'sum':
                inp.value += item.innerText
              break;
              case 'dot':
                inp.value += item.innerText
              break; 
    
    // =
    
              case 'multiply':
              case 'division':
              case 'sub':
              case 'sum':
              case 'dot':
                inp.value += item.innerText
                break;

    4. А тут DRY повесился:
    if (inp.value.indexOf('*')!=-1) {
                  index = inp.value.indexOf('*')
                  inp.value = parseFloat(inp.value.slice(0, index)) * parseFloat(inp.value.slice(index - inp.value.length + 1))
                } else if (inp.value.indexOf('/')!=-1) {
                   index = inp.value.indexOf('/')
                   inp.value = parseFloat(inp.value.slice(0, index))/parseFloat(inp.value.slice(index-inp.value.length+1))
                } else if (inp.value.indexOf('-')!=-1) {
                  index = inp.value.indexOf('-')
                  inp.value = parseFloat(inp.value.slice(0, index))-parseFloat(inp.value.slice(index-inp.value.length+1))
                } else if (inp.value.indexOf('+')!=-1) {
                  index = inp.value.indexOf('+')
                  inp.value = parseFloat(inp.value.slice(0, index))+parseFloat(inp.value.slice(index-inp.value.length+1))
                }


    Это что вот прям сильнее всего бросается в глаза, реализовано всё очень... Слабо. Такой простой калькулятор уж точно не является демонстрацией своего скила, он в лучшем случае демонстрирует знание основ, с чем у тебя явные проблемы.
    Иными словами, это даже не уровень трейни.
    Ответ написан
    1 комментарий
  • Почему свойство length начинает считать с единицы, а не с нуля, если в массиве счет начинается с нуля?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Как раз с длиной всё очевидно. length – количество элементов массива:
    []; // сколько элементов? – 0
    ['a']; // сколько элементов: 1
    ['a', 'b', 'c']  // 3

    Индексы начинают с нуля, потому, что индекс – это смещение.
    Исторически, с низкоуровневых языков программирования.
    В памяти под массив выделена некоторая память, начиная с адреса X.
    Последовательно находятся ячейки одинаковой длины. Чтобы найти, где лежит значение i-го элемента, к адресу X прибавляют i * size байт. Самый первый элемент начинается сразу с адреса X. Его индекс 0.

    Так же и со строкой в JavaScript: к буквам можно обращаться по индексу, как к элементам массива.
    "abcd"[1] // "b"
    "abcd"[3] // "d"
    Представьте, что в начале строки стоит курсор. Курсор возвращает букву перед которой стоит. Индекс – на сколько вправо надо этот курсор подвинуть.

    Эта особенность index / length общепринята во многих языках программирования. Так же, как для интервалов часто принято включать начало и исключать конец: [a; b) – например, в методе массива slice(), который вырезает кусок массива, если указать slice(1, 5) — вытащит элементы с индексами 1, 2, 3, 4 – включая 1-й, но не доходя до 5.
    Ответ написан
    Комментировать
  • Как удалить тег не удаляя содержимое?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const expandNode = (node) => {
      node.after(...node.childNodes);
      node.remove();
    }
    
    [...document.getElementsByClassName("mark")]
    .forEach(expandNode);
    Ответ написан
    1 комментарий