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

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    function some<T>(arr: T[], f: (it: T) => boolean) : boolean
    {
    	let r = false;
    	for (const v of arr) if (r ||= f(v)) break;
    	return r;
    }
    
    function main() {
        let str = [1.0, 2.0, 3.0];
        assert(some(str, (x => x == 2.0)), "sometrue");
        assert(!some(str, (x => x < 0)), "somefalse");
        print("done.");
    }

    Ну что скажите про мои "генерики" ? вам нравиться? А кто знает какой челенж я тут проходил пока написал эту часть компилятора... (даю подстказку - проблема в определении типов для лямбды)

    Запостил: ASD_77, 02 Февраля 2022

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

    • еще раз побалую вас дампиком https://pastebin.com/k5yFpPXF
      в какие красивые имена функций - "define i1 @"some<i32>"(...)"
      Ответить
      • а че так дохуя
        Ответить
        • это оптимизатор заинлайнил все функции.. получилось в 2а раза больше кода но быстрее
          Ответить
    • кто у нас там С++ любители.. дайте аналог
      Ответить
      • #include <algorithm>
        #include <cassert>
        
        int main()
        {
            using std::ranges::any_of;
            auto str = {1.0, 2.0, 3.0};
            assert(     any_of(str, [](auto x){ return x == 2.0; }) );
            assert( not any_of(str, [](auto x){ return x < 0;    }) );
        }

        https://wandbox.org/permlink/s052tqRx3AFrebv7
        Ответить
    • Когда нейросеть по сигнатуре с первого раза пишет реализацию красивее чем у опа.
      function some<T>(arr: T[], f: (it: T) => boolean) : boolean
      {
        for (it of arr) {
          if (f(it)) { return true }
        }
      
        return false
      }
      
      var array = [1, 2, 3]
      some(array, v => v % 2 === 0);
      some(array, v => v >= 2 && v <= 4);
      some(array, v => v === 'a');

      ИИ согласен, что var — лютая годнота.
      Ответить
      • > красивее чем у опа.

        Твой код оскорбляет одновозвратников.
        Ответить
        • > break;
          Уже не по Дейкстре.
          Ответить
          • на получай ....
            function some<T>(arr: T[], f: (it: T) => boolean) 
            {
            	let r = false;
            	for (const v of arr)  !r && (r ||= f(v));
            	return r;
            }
            
            function main() {
                let str = [1.0, 2.0, 3.0];
                assert(some(str, (x => x == 2.0)), "sometrue");
                assert(!some(str, (x => x < 0)), "somefalse");
                print("done.");
            }
            Ответить
            • Может быть r ||= (!r && f(v)), чтобы ||= посреди выражения не торчало?
              Ответить
              • Так, а сам ||= поди тоже short-circuit умеет и не вызывает правую часть лишний раз?

                Т.е. просто r ||= f(v)
                Ответить
        • всегда ненавидел эту соцсеть
          Ответить
          • Соцсеть любителей одного return?

            А против соцсетей структурного программирования у тебя ничего нет??
            Ответить

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