1. JavaScript / Говнокод #27811

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    let checks: boolean[] = [];
    
          languages.value.map((language) => {
            checks.push(name.value.hasOwnProperty(language.locale) && !!name.value[language.locale]);
            checks.push(description.value.hasOwnProperty(language.locale) && !!description.value[language.locale]);
          });
    
          return !checks.includes(false);

    Запостил: hulkmaster, 12 Ноября 2021

    Комментарии (25) RSS

    • — Никифор, принеси-ка мне, голубчик, рояль из залы — на нём моя рюмка коньяка стоит...
      Ответить
    • и что тут прикольного
      Ответить
      • Генерили-генерили массив, а потом взяли и выбросили...

        З.Ы. Да ещё и map() юзают ради сайд-эффекта, как в басне про мартышку и очки.
        Ответить
        • Оу, Вы читаете Крылова? Давайте зачётку.
          Ответить
        • Помнится every для сайд-эффекта использовалось, чтобы на некорректной итерации можно было break-нуться. Возможно map вместо forEach тут потому, что раньше был код который кроме сайд-эффектов еще возвращает вспомогательный массив (например список кодов языков для передачи на какое-нибудь API). Возможно влияние "фуфу процедурщина зло" и тупого дроча на фишки функционального программирования, сочащегося из каждой второй статьи на Медиуме.
          Ответить
          • Ну в данном случае сайд-эффект нафиг не нужен...

            Возможно чел просто не знал про all/any (или как они там у вас называются).
            Ответить
            • блядь как можно знать map и не знать про some?
              https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/some

              https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

              https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
              Ответить
              • > как можно не знать

                Я сварщица не настоящая, вот и не знала как это называется ;(
                Ответить
                • в JS есть еще очень смешной обсер, что эти методы все есть не у какой-то последовательности, а у эррея.
                  Потому для ленивых хуйней типа rxjs там как-то это отдельно напилили
                  Ответить
                  • > у эррея

                    new Array(1, 2, 3)
                    new Array(1, 2)
                    new Array(1)

                    I ♡ JavaScript
                    Ответить
    • многие годы процедурщины так просто и не пропьешь
      Ответить
      • Процедурщик написал бы цикл, который обновляет один единственный бул (или даже сразу выходит)...

        В общем-то оно и читалось бы легче, чем эти однострочники с кучей операторов.
        Ответить
      • Вот код настоящей процедурщицы:
        function hasAllLocales(element) : bool {
            for (let language in languages.value) {
                if (!element.hasOwnProperty(language.locale))
                    return false;
                if (!element[language.locale])
                    return false;
            }
            return true;
        }
        
        return hasAllLocales(name.value) && hasAllLocales(description.value);
        С процедурой, внезапно. Говно? Плохо читается? Сложно поддерживать?
        Ответить
        • лучше чем оригинальный код, но хуже чем однострочка с some или every
          Ответить
        • > хуже чем однострочка
          [name.value, description.value].every(element => 
              languages.value.every(language =>
                  element.hasOwnProperty(language.locale) &&
                  element[language.locale]
              )
          );
          Как-то так? Хрен знает, мне процедурная версия больше нравится.
          Ответить
          • я быб в функцию вынесб
            const languages = {
                value: ['en_US', 'os_OS', 'de_DE']
            };
            
            interface Huita {
                value: {
                    [key: string]: boolean
                }
            }
            
            const myName: Huita = {
                value: {
                    ru_RU: true,
                    en_US: false
                }
            }
            
            const description: Huita = {
                value: {
                    ru_RU: true,
                    en_US: false
                }
            }
            
            function isHuita(language: string, ...huitas: Huita[]): boolean {
                return huitas.some(huita => huita.value.hasOwnProperty(language) && !!huita.value[language]);
            }
            
            // Вот код
            languages.value.some(language => isHuita(language, myName, description));
            Ответить
            • Один раз не huitas, но походу ты полярность результата попутал. Или я.
              Ответить
              • да, я в бизнес-смысле этого не очень
                Ответить
                • А почему внешний цикл по языкам, а не по элементам?
                  Ответить
                  • а почему ты спрашиваешь? Ты надеюсь не оптимизировать код собрался?
                    Ответить
                    • Хрен знает, так то оба варианта имеют право на жизнь: "переведён ли элемент на все языки?" и "все ли элементы переведены на этот язык?"
                      Ответить
                      • если на то пошло, то лучше взять Map: там не нужно hasOwnProperty будет
                        Правда я ХЗ не медленее ли оно объекта
                        Ответить
        • плохо читается, потому что отрицания в условиях

          в остальном ок.
          Ответить
        • Ничего тяжелее стакана и хуя (золотого) в руках не держала, а ты мне - лопату? И не стыдно, гражданин начальник?
          Ответить

    Добавить комментарий