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

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
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
class C {
    _length: number;

    constructor() {
        this._length = 10;
    }

    get length() {
        return this._length;
    }
    set length(value: number) {
        this._length = value;
    }
}

function main() {
    const c = new C();

    print(c.length);
    c.length = 20;
    print(c.length);

    delete c;

    print("done.");
}

пока вы тут балаболили я тут наговнокодил "property" или "accessors"

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

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

    • Потому что скучная фича.

      А через c['length'] эти свойства доступны? Или в TS эту фичу спрятали?
      Ответить
      • с чего бы их выпилили?
        оно аботает, посто типизиованное
        const Foo =  {
            get length():number {
                return 42;
            }
        };
        
        console.log(Foo["length"]);
        Ответить
        • > посто типизиованное

          Хуяссе, а как вы там типизированную гетерогенную мапу запилили? Что за ёбаная магия?

          Тип возвращаемого значения зависит от значения ключа? Да у вас там coq практически...
          Ответить
          • > Да у вас там coq практически..

            Опровергаю.
            Ответить
          • Язык будущего. Вот в V8 при добавлении питуху свойства он переходил от одного типа (struct Pituz -> struct PituzSoSvojstvom) к другому, чтобы доступ к полям был быстрый и не зашквариваться до состояния словарей, но в то же время не был дубовым как C++, где список свойств назначает один раз автор класса.
            Такая питушня с оптимизациями и проверки типов могут поднять ИТ до небес.
            Ответить
          • мы это кто? Я не Андрес.

            Да ты сам проверь
            // https://www.typescriptlang.org/play
            const Foo =  {
                get length():number {
                    return 42;
                },
                foo: "bgg"
            };
            
            console.log(Foo["length"].toExponential());
            console.log(Foo["foo"].toUpperCase());
            
            /** * uncomment me to sosnut an error
            console.log(Foo["foo"].toExponential());
            console.log(Foo["length"].toUpperCase());
            **/
            Ответить
            • Такая питушня и в ЖС работает, и в пистоне. Это проявление динамической питушни.

              А Борманд хотел спросить, наверно, что будет, если, скажем, запихнуть Foo['length'] в add : (number, number) -> number.
              Ответить
              • причем тут динамическая питушня? Мы про TS: тип проверяется в момент компиляции. Если раскомментировать код, то он не скомпилируется

                ни в JS, ни в питоне стат типизация не проверяется без спец средств.

                Борманд имел ввиду, что значение мапы зависит от ключа.
                В C#, Java или C++ такое выразить не просто
                Ответить
                • > причем тут динамическая питушня?
                  Ну что в жс такая же питушня сработает.
                  И что выражение на первый взгляд выглядит так, как будто в нём никому нет дела до проверки типов.
                  Ответить
                • > значение мапы зависит от ключа

                  Тип значения мапы зависит от значения ключа. В крестах такое вообще не выразить, разве что для кейсов, когда значения ключей заранее известны. Ну в общем-то и в тс точно так же, как мы выяснили ниже.
                  Ответить
          • >типизированную гетерогенную мапу запилили

            есть discriminated unions

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

              Ну это, по сути, подобие енума получится, а не "строка"? Обычную строку, которая мне от юзера пришла, туда уже никак не просунуть?
              Ответить
              • в тс можно сделать частью сигнатуры функции вывод типа, мол, функция вернула true - значит у аргумента тип Foo. Напиши такую функцию, проверяй ей - компилятор поверит и сузит тип со строки до множества значений
                Ответить
                • А, круто. Но это видимо ещё с if'ом надо совместить? Тогда внутри if'а тип будет правильный.
                  Ответить
                  • да

                    ну или в `else` если в ифе отрицание

                    или вообще если в ифе отрицание и там гарантирован return

                    или вообще в свитче (енам по значениям точно разберет, про функцию не уверен)
                    Ответить
                    • Ну принцип понятен, да. Там где инвариант про check(x) действует, там и можно юзать конкретный тип.

                      Круто сделали.
                      Ответить
                      • >круто

                        очень, угу


                        Вообще даже обидно, что скриптоблядям вебовским такой годный язык достался
                        Ответить
                          • Хуясе, у вас там в шарпик прям настоящие ADT завезли, как в функциональщине?!

                            А тьфу, это F#.
                            Ответить
                              • Для расширения сознания можно. Юзать -- ну такое, разве что ради job security. Где ты потом будешь искать девочек-волшебниц на поддержку.
                                Ответить
                                • У него интероп с C#, он же CLR

                                  заменишь девочку на ротоёба, и язык поменяешь
                                  Ответить
                                  • When learning F#, you should not try to bring your old imperative concepts with you.

                                    императивомразь!
                                    Ответить
                                  • > и язык поменяешь

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

                                    Так что интероп здесь в одну сторону.
                                    Ответить
                                    • можно писать ядро на сишарпе, а прикладуху на фишарпе

                                      вот бизнес порадуется! будет полное nevmerle!
                                      Ответить
                              • я малость читал про F#, мне показалось интересно

                                если бы я писал под .NET плотно, то вероятно бы выучил..
                                Ответить
                        • В котором из структур данных ничего нет, кроме голых объектов и массивов? В последних версиях еще Map/Set/WeakMap/WeakSet правда завезли + есть всякие Uint8Array/.. косплеющие статические массивы, но до той же джавовской std ЖС-у еще далеко.
                          Ответить
                            • По набору структур данных в стандартной библиотеке - да (тех же связных списков, priority queue, обычной очереди нету).
                              Ответить
                              • в npm есть стопудово

                                жаль конечно, что в стандартной библиотеке нихуя нет
                                Ответить
                              • >обычной очереди

                                Массив реализует интерфейс очереди

                                >связных списков, priority queue

                                Задачи с литкода рекомендую всё-таки решать на питоне или джаве
                                Ответить
                                • >Массив реализует интерфейс очереди
                                  не очень производительно

                                  >Задачи с литкода рекомендую всё-таки решать на питоне или джаве

                                  почему, кстати?
                                  Ответить
                                  • >не очень производительно

                                    Какая производительность )))

                                    >почему, кстати?

                                    1) там все перечисленное JaneBurt есть
                                    2) интервьюер на алгоритмической секции с большей вероятностью знает их чем жс
                                    Ответить
                                • > priority queue

                                  Ну priority queue -- это всё-таки практическая штука, а не хрень для лаб.
                                  Ответить
                                  • >А вот связные списки в жс действительно ни к чему.
                                    Если я буду перманентно срать в голову массиву размером в гигабайт, то могу и соснуть

                                    С другой стороны, современные процы умеют неплохо двигать последовательные куски данных
                                    Ответить
                                • > Массив реализует интерфейс очереди

                                  А вставка/удаление в начало работает за O(n) . У труЪевой очереди ето работает за O(1).

                                  > Задачи с литкода рекомендую всё-таки решать на питоне или джаве

                                  Я не думаю, что в том же Яндексе алгоритмическую секцию дадут решать на каком угодно ЯПе. Раз я подаюсь на позицию с ЖС, мне надо писать на ЖС.
                                  Ответить
                                  • >А вставка/удаление в начало работает за O(n) . У труЪевой очереди ето работает за O(1).

                                    Какой перформанс )))

                                    >Раз я подаюсь на позицию с ЖС, мне надо писать на ЖС.

                                    Мне это кажется добровольным усложнением жизни но флаг тебе в руки
                                    Ответить
                                    • >Какой перформанс )))


                                      JSер не обязан знать, чем массив отличается от листа, а O(1) от O(n)
                                      Ответить
                                      • В js нет никаких массивов, а есть гарантия стандарта что ключи объекта которые парсятся в целое число будут перечислены по возрастанию

                                        Глистов тоже нет только деревья
                                        Ответить
                                          • Это не массив

                                            Массив это Uint8Array он вроде обязан выделить сплошной кусок памяти

                                            А array не обязан
                                            Ответить
                                            • >А array не обязан
                                              охуясе, то есть доступ к Array[42] не за O(N)?!

                                              у вас там в джсе всё такое?
                                              Ответить
                                              • Array может быть реализован хешмапой

                                                Ты никогда не задумывался как работает индексация Array если в объекте ключи могут быть только строками или символами?
                                                Ответить
                                                • я думал, строки там отдельную мапу образуют, как и у любого объекта

                                                  а сам эррей массивом

                                                  ну если он хештаблой, то как же тогда перечислять его?
                                                  Ответить
                                                  • Стандарт гарантирует что ключи которые парсятся в число перечисляются строго по возрастанию и перед остальными строковыми ключами
                                                    Ответить
                                            • нахуя называть arrayем то, што им не являеца?

                                              ну назовите лист тада, або сиквенс
                                              Ответить
                                            • Более того, в «PHP» у одного «массива» могут быть как числовые ключи, так и строковые. И самое интересное, что ключи могут быть произвольно упорядочены. По сути ключи лежат в отдельном массиве.
                                              Ответить
          • нед
            буде Element implicitly has an 'any' type because expression of type 'string' can't be used to index type
            Ответить
            • Фу, читеры. А я уж думала, там реально зависимые типы подвезли.

              А что будет, если я в это any засуну "42"? Мне не дадут это сделать в компайлтайме или рантайме? Или просто читатели потом охуеют от разрушенных инвариантов?
              Ответить
      • пока не доступна такая фича. но можно будет переписать оператор и всунуть костыль для такой поддержки - просто мне это пока не интересно
        Ответить
      • напиши такую фичу на С или С++... узнаешь насколько скушная
        Ответить
    • Потому, что сторонний наблюдатель обычно эмоционально реагирует только на качественно новый класс достижения, а всё остальное его мозг сжимает.

      * Создан продукт с 1 фичей - очень интересно.
      * Добавлена фича - ну ладно.
      * Стало 3 фичи - зачем? Ты просто досчитал до трёх. Расскажи, когда будет скачок.
      * Стало 10 фич - интересно
      * Стало 100 фич - ну ладно
      * Стало 1000 фич - зачем? Ты просто досчитал до трёх по логарифмической шкале. Расскажи, когда будет скачок.
      * Код использует вся страна - интересно
      * Код использует вся планета - ну ладно
      * Код использует вся галактика - зачем? Ты просто досчитал до трёх по вселенской шкале. Расскажи, когда будет скачок.

      Так что штука крутая, но из-за особенностей восприятия она будет всё больше и больше недооцениваться.
      Ответить

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

Помни, guest, за тобой могут следить!

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


    8