ЙажаСценарий / Говнокод #27546 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
function main() {
    let { aa, bb } = { aa: 10, bb: 20 };
    print(aa + bb);

    let {
        aa,
        bb: { q, r },
    } = { aa: 10, bb: { q: 1, r: 2 } };
    assert(aa == 10, "{}");
    assert(q == 1, "{}");
    assert(r == 2, "{}");

    let { x, y } = new ObjF(1, "foo");
    assert(x == 1, "{}");
    assert(y == "foo", "{}");

    print("done.");
}

Добрый вечер дорогие неопределившиеся... или заблудшие... вот я тут вам новую фичу притарабанил .. называет деконстракт :)

Запостил: ASD_77 ASD_77, (Updated )

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

  • а для самых маленьких любознательных вылаживаю дампик .. что-то пошло не так и хрен вам а не дампик.
    Ответить
  • > называет деконстракт

    В приличных домах это называют pattern matching
    Ответить
  • и исправленный код

    class ObjF {
      constructor(public x: number, public y: string) { }
    }
    
    function main() {
        let { aa, bb } = { aa: 10, bb: 20 };
        print(aa + bb);
    
        let {
            aa,
            bb: { q, r },
        } = { aa: 10, bb: { q: 1, r: 2 } };
        assert(aa == 10, "{}");
        assert(q == 1, "{}");
        assert(r == 2, "{}");
    
        let { x, y } = new ObjF(1, "foo");
        assert(x == 1, "{}");
        assert(y == "foo", "{}");
    
        print("done.");
    }
    Ответить
    • Это выглядит как непонятно нахуя нужный сахарок над структурами и инициализацией всякой хуйни.
      Ответить
    • > constructor(public x: number, public y: string) { }
      > let { x, y } = new ObjF(1, "foo");

      Счастливого рефакторинга.
      Ответить
      • Да, объекты наверное не стоило распидорашивать по позициям полей... Оно же не по именам матчит?
        Ответить
        • 1) Запилить фичу
          2) Продавать пивас студию для TypeScript'а, которая эту фичу запрещает
          Ответить
          • А в гомоиконном языке можно сразу в одной либе и фичу запилить и правило для пивас студии, которое эту фичу запрещает!
            Ответить
            • пивас студия тоже должна быть гомоиконной тогда, чтобы все гомоиконные фичи гомоиконно описывать.
              Ответить
            • Не ломай бизнес-модель. Хотя можно в компилятор встроить гомоиконный смарт-контракт, который за срабатывания правила будет с тебя снимать эфирчик.
              Ответить
  • В лиспе эта конструкция как-то ужасно называлась... (destructuring-binding (aa bb) x) что ли.
    Ответить
  • и результат работы

    C:\temp>C:\dev\TypeScriptCompiler\__build\tsc\bin\tsc.exe --emit=jit C:\temp\1.ts 
    30
    done.
    Ответить
  • Да, давайте побольше встраивать непосредственно в язык всякий говносахарок, который можно было бы конструировать через компилтайм-библиотеку в языке с гомоиконностью или механизмом типа миксинов из D (которые полны по Тьюрингу).
    Ответить
    • Или как в «Nim» с помощью мокросов, шаблонов и редактирования AST.
      Ответить
  • Пуфыстик обожает выражения в левой части оператора присвоения.

    Например, в «Бейсике» в левой части можно было использовать строковые функции:
    10 NAME$ = "ВАСЯ"
    20 LET MID$(NAME$, 2, 2) = "ИТ"
    30 PRINT NAME$
    40 STOP
    50 END

    Программа выведет слово «ВИТЯ»
    Ответить
    • Годная питушня. Вот бы ещё можно было произвольные функции там использовать, чтобы движок языка всё трейсил взад:
      double x;
      (double -> double) f = x -> x*x - 8*x;
      f(x) = -16;
      print(x); // 4
      Ответить
      • В «Бейсике» было много интересных идей. Но все они выглядели, как игрушечные: можно было пользоваться только готовым, а своё добавлять было нельзя.

        Помню, можно было использовать слайсы для строк (функции MID$, LEFT$, RIGHT$) и, кажется, изменять длину строки (функция LEN). Дальше создатели «Бейсика» не пошли.

        А если бы развили эту мысль, было бы круто: декомпозиция, паттерн-матчинг, решение уравнений...

        У уравнений есть проблемы:
        1. У квадратного уравнения два корня.
        2. Многие уравнения нельзя обратить аналитически, а у решения методом итераций есть проблема останова.
        Ответить
            • С помощью них можно было писать самомодифицирующийся код, вирусы, вообще много всего интересного...
              Ответить
                    • Да) и где гусятами подтирались

                      Вообще охуенное произведение же:)
                      Ответить
                      • - Сейчас я вам расскажу, - отвечал Гаргантюа. - Как-то раз я подтерся бархатной полумаской одной из ваших притворных, то бишь придворных, дам и нашел, что это недурно, - прикосновение мягкой материи к заднепроходному отверстию доставило мне наслаждение неизъяснимое. В другой раз - шапочкой одной из помянутых дам, - ощущение было то же самое. Затем шейным платком. Затем атласными наушниками, но к ним, оказывается, была прицеплена уйма этих поганых золотых шариков, и они мне все седалище ободрали. Антонов огонь ему в зад, этому ювелиру, который их сделал, а заодно и придворной даме, которая их носила!

                        Боль прошла только после того, как я подтерся шляпой пажа, украшенной перьями на швейцарский манер.
                        Ответить
                        • атем как-то раз я присел под кустик и подтерся мартовской кошкой, попавшейся мне под руку, но она мне расцарапала своими когтями всю промежность.

                          - Оправился я от этого только на другой день, после того как подтерся перчатками моей матери, надушенными этим несносным, то бишь росным, ладаном.

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

                          Затем я подтирался простынями, одеялами, занавесками, подушками, скатертями, дорожками, тряпочками для пыли, салфетками, носовыми платками, пеньюарами. Все это доставляло мне больше удовольствия, нежели получает чесоточный, когда его скребут.
                          Ответить
                          • Кто подтирает зад бумагой,
                            Тот весь обрызган желтой влагой *.

                            - Что я слышу? - воскликнул Грангузье. - Ах, озорник ты этакий! Тишком, тишком уже и до стишков добрался?
                            Ответить
                          • Красным перцем не пробовал подтираться?
                            Ответить
        • > два корня
          Либо делать fork, либо интерпретировать код как do-нотацию монады List (строчки программы как бы умножаются декартово)

          Либо будет implementation defined и возвращать какое-то одно значение. Это вообще универсальный вариант. Поскольку форкнуться на 2 корня уравнения x: x^2-1=0 просто, а форкнуться на континуум корней уравнения x: 0=0 чуть сложнее.

          > нельзя обратить аналитически
          Бросать исключение или ошибку компиляции, если в тот момент известно?

          > проблема останова
          Не так важно с точки зрения языка. Пусть пердолятся программисты/пользователи.
          Ответить
          • Значит вы свииньи! Значит вы недоумкы! Понимаете? Вы делаете сервис абсолютно неудобным для клиентов. Понимаете? Я дойду до начальства, но у меня есть адвокат, (стучит, вероятно, пальцем по телефонной тумбе) и я даже тогда буду судиться с вами! Вы у меня ещё попляшете!
            Ответить
    • Так вот откуда Гнидо взял присваивание слайсам.
      >>> a = [0, 1, 2, 3, 4, 5, 6]
      >>> a[5:0:-2] = 'a', 'b', 'c'
      >>> a
      [0, 'c', 2, 'b', 4, 'a', 6]
      Ответить
      • Вообще на первый взгляд «Питон» чем-то напоминает «Бейсик»: так же чувствителен к переводу строки...

        Жаль, в «Бейсике» не было слайсов для массивов, был только доступ к отдельному элементу.
        Ответить
            • v[45] = true для vector<bool>. Оно там аккуратно впишет 45 бит куда надо.
              Ответить
                • Да. Либо ты возвращаешь ссылку и значение впишется напрямую, либо ты возвращаешь прокси с перегрузкой присваивания.
                  Ответить
                  • С возвратом ссылки в С++ есть еще такой код
                    petuh.getFoo() = 42;

                    это вызывает охуение у большинства питухов
                    Ответить
                    • Я бы на ревью не пропустила... Или уж оставь структурой или допиши сеттер по-человечески.
                      Ответить
                    • Понял. Слева может быть вообще произвольное выражение, результат которого — ссылка. Тогда и перегружать = не нужно.

                      Это как в сишке, если getFoo() возвращает указатель, то можно *(getFoo()) = 42;
                      Ответить
            • #include <iostream>
              #include <utility>
              
              int main()
              {
                  auto point = std::pair(10, 20);
                  auto & [x, y] = point;
                  x = 42;
                  
                  std::cout << point.first << ", " << point.second << std::endl;  // 42, 20
              }
              Ответить
              • Кстати, а в рейнджах сделали сплайсинг строк/векторов как в твоём примере напитоне?
                Ответить
              • Пропустил через «cppinsights»:
                #include <iostream>
                #include <utility>
                
                int main()
                {
                  std::pair<int, int> point = std::pair<int, int>(10, 20);
                  std::pair<int, int> & __point7 = point;
                  int & x = std::get<0UL>(__point7);
                  int & y = std::get<1UL>(__point7);
                  x = 42;
                  std::operator<<(std::cout.operator<<(point.first), ", ").operator<<(point.second).operator<<(std::endl);
                }


                Создаёт временную переменную и производит декомпозицию.
                Ответить
                          • Данное утверждение, фактически, стало аксиомой. Деконструкция жанра в аниме — значит «Ева», «Ева» — значит деконструкция жанра в аниме. Но так ли это?
                            Ответить
                              • А мать другой подружки главного героя повесилась, из-за чего та периодически проявляет агрессию, но при этом требует внимания и признания, а также интересуется мужчиной гораздо старше себя. Этим же мужчиной интересуются и другая героиня, исполняющая функцию матери для главного героя. В свою очередь, упомянутый мужчина интересуется своими арбузами.
                                Ответить
                                • ебать, да это же я

                                  только мной никто не интересуется и арбузов у меня нет, а так один в один!
                                  Ответить
    • Самый пиздец в «Андроиде» в том, что производители железок блокируют загрузчик, и хрен ты ядро поменяешь. «fastboot oem unlock» работает далеко не везде. Да и после разблокировки могут внезапно перестать работать всякие банковские приложения, потому что они через чтение свойств системы узнают о разблокировке.
      Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8