1. Куча / Говнокод #29178

    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
    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    pub trait Normalize<T> {
        type Output;
        fn normalize(&self, baseline_value: &T) -> Self::Output;
        fn denormalize(&self, baseline_value: &T) -> Self::Output;
    }
    
    impl<T, U, W> Normalize<T> for U
    where
        T: Copy,
        U: Copy + Div<T, Output = W> + Mul<T, Output = W>,
    {
        type Output = W;
        fn normalize(&self, baseline_value: &T) -> Self::Output { *self / *baseline_value }
        fn denormalize(&self, baseline_value: &T) -> Self::Output { *self * *baseline_value }
    }
    
    impl<T> Normalize<CanvasSize<T>> for Rectangle
    where
        T: Copy,
        f32: Normalize<T, Output = f32>
    {
        type Output = Rectangle;
    
        fn normalize(&self, baseline_value: &CanvasSize<T>) -> Self::Output {
            Rectangle {
                x1: self.x1.normalize(&baseline_value.width),
                y1: self.y1.normalize(&baseline_value.height),
                x2: self.x2.normalize(&baseline_value.width),
                y2: self.y2.normalize(&baseline_value.height),
            }
        }
        fn denormalize(&self, baseline_value: &CanvasSize<T>) -> Self::Output {
            Rectangle {
                x1: self.x1.denormalize(&baseline_value.width),
                y1: self.y1.denormalize(&baseline_value.height),
                x2: self.x2.denormalize(&baseline_value.width),
                y2: self.y2.denormalize(&baseline_value.height),
            }
        }
    }

    Запостил: ISO, 13 Сентября 2025

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

    • Когда вечером пятницы кодируешь в потоке и, чувствуя себя словно в горячке, понимаешь, что выдаёшь полнейшую бредятину, но уже не можешь остановиться, с некоторым клиническим любопытством желая узнать, чем же это закончится.
      Ответить
      • На два пакета целая пятница уходит. Зато потом, после трудового дня
        Ответить
      • Проще было попросить погаллюцинировать Copilot какой-нибудь
        Ответить
        • Copy-lot — какое-то днище.
          Вчера споросил его про ассоциации, он мне придумал совершенную дичь и сослался на несуществующую документацию
          Ответить
          • Как думаешь, Гологуб, не заменят 90% программистов на копилот к концу 2025-го года, как нам обещали Сёмы Альтманы?

            Пора уже учиться ухаживать за деревьями и водить погрузчики, или пока не?
            Ответить
            • Так давно пора, уже когда left-pad.js выпустили, хорошие места садовников все расхватали
              Ответить
              • Не успел дописать

                Вообще надо спросить (((альтманскую))) версию, может хорошо ответит, по моему опыту часто бывают по делу ответы и справляется с большими кучами текстов, что как раз у майков так и есть с файлоассоциациями
                Ответить
    • питураст
      Ответить
      • Гост слушай, почему тут нету RNVO в VC, а в GCC есть?
        #include <iostream>
        
        
        struct Foo {
            char data[1024 * 128];
        };
        
        static Foo create() {
            const Foo foo{};
            std::cout << &foo << std::endl;
            return foo;
        }
        
        int main() {
            const auto f = create();
            std::cout << &f << std::endl;
        }
        Ответить
        • RVO, конечно же, есть (по стандарту)
          #include <iostream>
          
          
          struct Foo {
              char data[1024 * 128];
              Foo* ptr;
              Foo() {
                  this->ptr = this;
              }
          };
          
          static Foo create() {
              return Foo{};
          }
          
          int main() {
              const auto f = create();
              std::cout << ( & f == f.ptr) << std::endl;
          }
          Ответить
    • Вижу какую-то логику в строках 10, 13 и 14, всё остальное — клей. Какие интерпрайзные решения )))
      Ответить
      • Да и то в 10, насколько я понял, выведение типа: выбирается тип, который разработан настолько, что способен вместить результат умножения и деления.
        Ответить
      • строка 10 это не логика, а ограничение на принимаемый тип U
        Ответить
      • Я приносил сюда цитату чувака про го же
        >>>
        About that, programs written in go are "simple" in the way 10 pages of GPS navigation instructions are simple: the business logic is hidden somewhere within a deluge of if and for loops.
        >>>
        Ответить
    • > type Output;

      А почему это не часть дженерика?
      Ответить
      • Это так называемый «associated type», и он нужен тогда, когда предполагается, что для каждой реализации трейта должен иметься только одно конкретное значение associated type'а.
        Например, для (условного) трейта Iterator<TCollection> тип Output должен являться типом значений, хранящихся в TCollection. Нет смысла делать Iterator<TCollection, Output>: этим мы бы показали, что у нас для каждой коллекции может быть неограниченное количество разных итераторов, различающихся только выходным значением.

        См.: https://doc.rust-lang.org/book/ch20-02-advanced-traits.html#associated-types для менее запутанного объяснения.
        Ответить
        • Немного хуйню написал: (условный) трейт Iterator вообще не должен быть дженериком. Он просто должен быть имплементирован для конкретных типов коллекций.
          Ответить
        • То есть это условно Normalize<T, U> where T: Collection, U == T.Item ?
          Ответить
          • В некотором смыле можно и так сказать, но guest6 ниже более понятно объяснил. Об associated type'е можно думать просто как об элементе, который реализация трейта должна «имплементировать» вместе с функциями, объявленными в трейте.
            Ответить
      • Дженерик является публичной частью трейта, и позволяет реализовать много трейтов с разными типами, а ассоциирвоанный тип -- нет. Чтобы это понять, надо увидеть, что в расте трейты реализуются не в описании класса (структуры) а отдельно.
        struct RustCode;
        struct JavaCode;
        
        trait CompilerAsGeneric<Code> {
            fn compile(&self, code: Code);
        }
        
        
        
        impl CompilerAsGeneric<RustCode> for RustCode {
            fn compile(&self, code: RustCode) {
                todo!()
            }
        }
        // что бля???
        impl CompilerAsGeneric<JavaCode> for RustCode {
            fn compile(&self, code: JavaCode) {
                todo!()
            }
        }

        видишь проблему?
        Я могу два раза его реализовать.

        А если так
        trait CompilerAssocType {
            type Code;
            fn compile(&self, code: Self::Code);
        }
        struct JavaCode;
        
        impl CompilerAssocType for RustCode {
            type Code = RustCode;
        
            fn compile(&self, code: RustCode) {
                todo!()
            }
        }
        // Не скомпилируется, бо один раз уже реализовали
        impl CompilerAssocType for RustCode {
            type Code = JavaCode;
        
            fn compile(&self, code: RustCode) {
                todo!()
            }
        }
        Ответить
        • Ясно, в Свифте точно так же и это пососно
          Ответить
    • А может действительно запилить mailing list?
      Чтобы можно было писать «Desktop YOU SHUT THE FUCK UP JAVASCRIPTS SAVED MILLIONS OF JEWS!»
      Ответить
      • JEWASCRIPT
        Ответить
        • Гологуб, когда попадёт в ад, будет вынужден писать на этом языке.
          Ответить
      • Я вот возмущен тем, что точка с запятой у PHP называется на иврите: T_PAAMAYIM_NEKUDOTAYIM

        В то время, когда Нетаньяху проводит геноцид, они используют иврит!

        Я начинаю компанию по полному бойкоту PHP. Присоединяйтесь!
        Быть ПХП программистом должно быть стыдно!!
        Ответить
        • А ты жид? Нужен жид, чтобы пояснил, как они запяточие называют. У меня тут какие-то разночтения, то nekuda, то psikot, то большие конструкции типа твоего множественного числа
          Ответить
          • У меня шаббат, извини.

            так вот, T_PAAMAYIM_NEKUDOTAYIM это "::" оказывается, а не двоеточие


            &gt;The T_PAAMAYIM_NEKUDOTAYIM token first appeared in version 0.5 of the Zend Engine, which powered PHP 3, and which was developed in Israel.

            &gt;This continues to remind us of the major contribution the Israeli community has brought to PHP by laying its modern foundation.



            https://wiki.php.net/rfc/rename-double-colon-token
            Ответить
            • О, я ещё успею спросить на Кворе, что пишут в талмуде про гоев.
              Ответить
            • Израиль изобрел PHP.
              А Палестина нет.

              Вы еще спрашиваете, почему я за Палестину?
              Ответить
              • Вход открыт: Любой человек (еврей или нет) может прийти в синагогу на молитву в Шаббат. Это приветствуется.
                · Бесплатно: Поскольку деньги запрещены, за вход платить не нужно. Все мероприятия бесплатны.

                Балабоба ещё утверждает, что подадут полдник, а потом пригласят обедать
                Ответить
                • Формально синагога — это изба-читальня, а не храм, поскольку у иудеев храм существует в единственном экземпляре (в настоящий момент временно не работает).

                  Пускают ли туда иноверцев и атеистов, не проверял.
                  Ответить
                  • Кстати , почему они не могут построить новый храм? потому что храм может только Б-г построить?
                    Ответить
                    • Так место уже занято под центр мировой торговли
                      Ответить
            • Ты понимаешь, что если бы два еврея не придумали PHP3 с ООП, то про PHP все бы давно забыли? Творение Расмуса Лердорфа изначально было чисто шаблонизатором безо всякого ООП, что-то вроде улучшенного SSI, на нём писать большие проекты было невозможно.

              Так что «PHP» своей популярностью обязан (((Гутмансу))) и (((Сураски))).
              Ответить
              • ну вот и нахуя они это сделали?

                Знаешь, как в анекдоте? Ему мало, что он Рабинович?
                Ответить
        • Не точку с запятой, а двойное двоеточие.

          ::
          Ответить
          • Авторы ПХП старались выбрать максимально вербозный способ написания кода, потому что они обезьяны.

            Двойное двоеточие можно заменить на точку (как сделано в куче ЯП) но точка короче

            "-&gt;" тоже можно заменить на точку (как сделано в куче ЯП) то точка корочке

            "new" не нужен, его можно убрать (как сделано в куче ЯП) но без new короче


            "$" не нужен,. но вы поняли, да?
            Ответить
            • Да, избыточность.

              -> имеет смысл в крестах, ибо там есть разыменование указателей, «new» тоже имеет смысл во «взрослых» ЯП, где есть несколько способов инстанцирования.

              Доллар имеет смысл в шелле, ибо там это макроподстановка. Ну и в Перле, потому что в Перле нужно указывать тип контекста. В «PHP» же на ровном месте создали раздельные неймспейсы для переменных и функций, зато можно написать function f($f), и никакого затенения не будет.
              Ответить
            • Why is the source code compiled?

              Since we are in 2020s, this question should not be asked by a web developer. If you have employed such a guy, trust me, he/she should be fired.

              We are using many lovely features in our project, some from ESNext, and some are popular in development but not supported natively by any browser. So we compile those parts to legacy JavaScript code to make the extension work for more browsers.

              For example, we build UI in Violentmonkey with Vue.js, a popular framework good at building complexed UIs. It depends on quite a few custom annotations which need to be transformed to vanilla JavaScript and CSS so that the browser can understand.

              There are also some constants injected at compilation time so that we don’t need to hard-code them.
              Ответить
            • Двойной семиколон придумал Труп Страуса, потому что петухам очень трудно было понять C With Classes, и он старался им как-то помочь
              &gt;&gt;&gt;
              This had been the cause of some minor confusion and could also be used to construct ambiguous examples. To alleviate this, :: was introduced to mean membership of class and . was retained exclusively for membership of object
              &gt;&gt;&gt;.
              Уже во времена питона и джавы стало понятно, что это не нужное разделение (кроме редкого кейса -- указателя на мембер). Да и в плюсах ябы оставил :: только для неймспейсов (кроме редкого кейса -- указателя на мембер)

              "-&gt;" называется "разыменуй указатель на структуру" чтоб не писать каждый раз (*petuz).
              Поскольку в ПХПне ты всегда работаешь по ссылке, смысла в этой хуйне никакого нет.
              Это даже джависты поняли. Причем в C++ для референса стрелочка не нужна уже, то-есть даже в С++ у тебя больше сахара, чем в пыхе. В рустне стрелочки нет, но есть спец трейт, который разыменовывает ссылку прозрачно. Стрелочка имеет хоть какой-то смысл разве что в перле, но и там она опциональна после первого разымновывания.

              "new" нужен был только в C++, где ты явно создавал объект в куче (в аллокаторе наверное точнее говоря). Тупые макаки растащили его по всем языкам, включая блядь JavaScript. Хорошо в питоне с котлином этого нет.
              Иронично, но со времен С++11 управлять памятью вручную стало почти никогда не надо, и почти всегда вместо "new" ты видишь умный указатель (кроме специального лоу-левел кода, который пишут тсори).
              Еще более иронично, что в C# "new" создает объект НА СТЕКЕ БЛЯДЬ если это value type.
              Ответить
              • "$" появился в shell для строковой интерполяции и чтобы отличаться от команд.
                Оттуда он перекочевал в awk (там кстати есть и встроенные переменные без доллара, NC например) и там он уже был нужен только для интерполяции. "$1" -- первое место итд.

                Оттуда он перекочевал в Перл, где был нужен для интерполяции и для указания контекста (@a это вам не $a). В остальной скриптушне он наъуй не нуэен: даже в руби, где интерполяция была раньше всех, обошлись без долара (переменну надо обернуть скобочками). В пыхе он просто наъуй не нуэен.
                Ответить
              • В пхп точка совсем другим оператором занята, потому стрелочка
                Ответить
                • Верно.
                  Ответить
                • а что там? кокотинация?

                  почмеу не плюс? Понятно почему в перле не плюс, а в пхп-то что?
                  Ответить
                  • Да, как в Перле. Слава Ктулху, в PHP для сложения и кококонкатенации разные операторы, поэтому не бывает такого багра, как в JS.
                    Ответить
                    • но в перле хотя бы честно типа нет! скаляр и есть скаляр

                      а в пхп же есть тип, не?
                      Ответить
                      • Какая разница? Сложение и конкатенация — это в любом случае разные операции. Если у нас есть 12 и 34, то конкатенация даст 1234, а сложение даст 46 (намеренно опустил кавычки, чтобы не акцентировать типы).

                        В PHP нет типов переменных, но есть типы значений. В новых версиях у аргументов функций есть хинты типов — такой ассерт, чтобы в рантайме выкинуть исключение, если передали значение другого типа.
                        Ответить
                        • ну можно было завести строгую типизацию как в питоне, и перегрузить оператор
                          >>> "123" + "1"
                          '1231'
                          >>> 123 + 1
                          124
                          >>> "123" + 1
                          Traceback (most recent call last):
                            File "<python-input-2>", line 1, in <module>
                              "123" + 1
                              ~~~~~~^~~
                          TypeError: can only concatenate str (not "int") to str
                          >>>
                          Ответить
                          • Да, в Питоне годно из-за строгой типизации. А в PHP так нельзя, потому что там строки и числа могут автоматом преобразовываться друг в друга.

                            Итак, есть два стула:
                            1. Питон с одним оператором и строгой типизацией.
                            2. PHP с двумя операторами и слабой типизацией.

                            JS взял худшее из обоих миров.
                            Ответить
                            • в пхп видимо так из за перла
                              а в перле частично из за шелла, а частично ради того, чтобы легко собирать структуры из файлов, ведь perl это язык для текста.
                              $ echo 1 | perl -e 'while(<>){print $_ + 1}'
                              2


                              вот тут я считал переменную из stdin, и мне не нужно кастить ее в int явно.
                              Ответить
                              • Да, для шелла пойдёт, чтобы много кода не писать. А в более «взрослых» ЯП слабая типизация только усложняет отладку.
                                Ответить
                                • Тюрлюк.

                                  Отсутствие статической типизации, равно как и слабая типизация хороша когда ты пишешь скрипт (размером в одну страницу), а в реальности даже скриптовики хотят статической и строгой типизпции, именно потому проекты на пайтоне обманазы mypy и pyright (кстати, кто лучше?) а на JS пишут только с TS
                                  Ответить
                                  • Представь, каким был бы мир, если бы ES4 не завернули!
                                    Ответить
                                    • да, было бы много лучше.

                                      На самом деле, TS не так плох. Вот как называется такой вывод типов для юнионов
                                      function doAll(bar: number | boolean) {
                                      
                                      }
                                      
                                      function foo(bar: string | number | boolean) {
                                        if (typeof bar == 'string') {
                                      
                                        } else {
                                          doAll(bar);
                                        }
                                      }

                                      это скомпилируется, а где еще так можно написать (крмое функциональных яп)?
                                      Ответить
                                      • В новых версиях «PHP»:
                                        https://www.php.net/manual/ru/language.types.type-system.php#language.types.type-system.composite.union

                                        function foo(string|int|bool $bar) {
                                          if (is_string($bar)) {
                                        
                                          } else {
                                            doAll($bar);
                                          }
                                        }
                                        Ответить
                                        • а что doAll принимает? реально int | bool ?
                                          Ответить
                                          • Проверил. Лучше бы ничего не делали, чем так.

                                            В Ideone PHP7, там не работает. Запустил на PHP8...

                                            doAll('Питух'); не упало. PHP сконвертировал строку в бул!

                                            Слабая типизация — говно. Именно поэтому я за «Питон».
                                            Ответить
                                            • всё в порядке, я бы удивился, если бы пыхеры не обосрались

                                              а подмножество енума умеет выводить?
                                              Ответить
                                      • Зачем такое говно ещё где-то писать?
                                        Ответить
                                        • Зачем писать что? Функцию, которая принимает union, и выводит из него другой юнион?

                                          ну ща приведу пример, погоди
                                          Ответить
                                        • вот такое можешь написать
                                          function getPosixLikeAsyncApi(osFlavor: 'BSD' | 'Linux'): string {
                                            switch (osFlavor) {
                                              case "BSD":
                                                return "kqueue";
                                              case "Linux":
                                                return "epoll";
                                            }
                                          }
                                          
                                          function getAsyncApi(os: 'Linux' | 'BSD' | 'Window'): string {
                                            switch (os) {
                                              case "Window":
                                                return "CompletionPorts";
                                              default:
                                                return getPosixLikeAsyncApi(os);
                                            }
                                          }
                                          Ответить
                                          • Это для инвалидов, у которых нет энамов?

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

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

                                                Возможно, ты просто не знаешь ТС, а может он тоже говно
                                                Ответить
                                                • переписывать-то будешь?
                                                  Ответить
                                                  • protocol BusinessError: Equatable {
                                                        static var found: Self { get }
                                                        static var missing: Self { get }
                                                        static var mismatch: Self { get }
                                                    }
                                                    
                                                    enum BasicError: BusinessError {
                                                        case found
                                                        case missing
                                                        case mismatch
                                                        case serverError
                                                    }
                                                    
                                                    func checkBusinessError<T>(bError: T) where T: BusinessError {
                                                        switch bError {
                                                        case T.found:
                                                            print("Found")
                                                        case T.mismatch:
                                                            print("Mismatch")
                                                        case T.missing:
                                                            print("Missing")
                                                        default:
                                                            print("")
                                                        }
                                                    }
                                                    
                                                    let error = BasicError.found
                                                    checkBusinessError(bError: error)


                                                    но от метки default избавиться не удалось

                                                    впрочем, тебе в функции на самом верхнем уровне от него тоже не уйти
                                                    Ответить
                                                    • Почему не избавиться?
                                                      никаких дефолтов нет
                                                      https://govnokod.xyz/_29178/#comment-1330974
                                                      Ответить
                                                      • ну, заебись

                                                        сэкономил дюжину символов

                                                        партия выдать тебе скрипто-кошко-жена
                                                        Ответить
                                                        • Всего лишь перенес проверку в компайл тайм.
                                                          Если поменять enum, то у меня не скомпилируется. В твоем же случае ты узнаешь о проблеме только в рантайме, когда тебе напечатает пустоту

                                                          Ты понимаешь, почему проверка в компайл-тайме лучше проверки в рантайме?
                                                          Ответить
                                                          • Ну код такой себе и так конечно вряд ли кто-то будет писать, но в default оно никогда не зайдёт, если ты не понял

                                                            По сравнению с тайпофом вообще норм
                                                            Ответить
                                                            • ты добавишь новый бизнес еррор, и зайдет
                                                              Ответить
                                                              • Это классическое раздвигание ворот от Макаки, который только с третьей попытки написал пример, который не пахнет, а теперь ищет, ну к чему же ещё придраться
                                                                Ответить
                                                                • так зайдет в default или не зайдет, если добавить новый error?
                                                                  Ответить
                                                                  • Зайдёт.

                                                                    Проблема 100% compile time check решается через один enum и переменную или метод isBusinessError, который может быть в каком тебе угодно месте и который тоже не скомпилируется без обработки всех кейсов

                                                                    Мой пример это демонстрация того, что ты в принципе можешь получить на Свифте. И да, можно ещё обработать напильником и в теории получить тот же 100% compile time check

                                                                    Зато ты дошёл от кода с тайпофом, который прямо напоминает индусскую проверку на bool, до чего-то похожего на

                                                                    Ты стал немножко лучше сегодня
                                                                    Ответить
                                                                    • С `isBusinessError` ты сразу же потеряешь информацию о том, какая именно бизнес ошибка у тебя была, и тебе снова придется делать свитч по всем значениям.

                                                                      >Демонстрация того, что ты в принципе можешь получить на Свифте.

                                                                      Да, безусловно в свифте иначе нельзя.
                                                                      Как и в Java, Rust, C#, Kotlin, YouNameIt.

                                                                      >Зато ты дошёл от кода с тайпофом

                                                                      Поскольку ты совсем не знаешь ни JavaScript, ни TypeScript, то поясню:

                                                                      Проверка на typeof это совершенно валдиная конструкция в JS, ничем не отличающаяся от проверки на енум.

                                                                      В TC она полностью статически проверяема, и выводит тип:
                                                                      fun doo(bar: string  | bool) {
                                                                       // тут bar это строка или bool
                                                                       // if (typeof bar == 'хуй') //Это не скомпилируется
                                                                      
                                                                       // if (typeof bar == 'number') //Это не скомпилируется, потому что bar только string или bool
                                                                      
                                                                      if (typeof bar == 'bool') {
                                                                        //тут тип переменной bar это bool
                                                                       } else { 
                                                                       // а тут она, внезапно, обязательно string
                                                                       // вот можно методы стринга вызывать
                                                                       }
                                                                      }

                                                                      В Котлине для этого нужно использовать Sealed Classes. В Расте -- enum. В TS это можно сделать не указывая тип явно.
                                                                      Ответить
                                                                      • Прекрасно, вот мы и пришли к тому, что никакая метаинформация вообще не нужна и можно обойтись одним энамом и свитчом в том коде, который обрабатывает ошибки

                                                                        > В TC она полностью статически проверяема

                                                                        Как скажешь
                                                                        Ответить
                                                                      • В шарпе вроде хотят или уже прям завозят discriminated unions
                                                                        Ответить
                                                                        • enum Huenum {
                                                                              CTPOKA(String),
                                                                              TSHISLO(u32),
                                                                              BYL(bool),
                                                                          }
                                                                          
                                                                          fn do_all(enu: Huenum) {
                                                                              match enu {
                                                                                  Huenum::CTPOKA(s) => {
                                                                                      s.trim();
                                                                                  }
                                                                                  Huenum::TSHISLO(c) => {
                                                                                      c + c;
                                                                                  }
                                                                                  Huenum::BYL(b) => if b {},
                                                                              }
                                                                          }
                                                                          Ответить
                                                • Смотри, у меня есть условный фреймворк для нетворк кэша. Он возвращает discrimated union респонз со статусом enum { found, missing, mismatch (compare and swap не получился), invalid (ебобо использовал эмодзи в ключе), timeout, server error }. Первые три должен обрабатывать бизнес-код, остальные какая-то дженерик инфраструктура. Поэтому в бизнес коде я заинтересован принимать не Status status и писать default: // can't happen, а исключительно found, missing, mismatch, как и в приведенном примере.
                                                  Ответить
                                                  • на революцию не тянет

                                                    но скриптушкам нравится писать текстовые литералы в коде, судя по всему
                                                    Ответить
                                                    • Ну как сказать, с зависимыми типами ты можешь например баунд чеки опускать.
                                                      Ответить
                                                      • ну кстати если Десктоп хочет енумов, то их есть у нас
                                                        enum Result {
                                                          Found,
                                                          Missing,
                                                          Mismatch,
                                                          Invalid,
                                                          Timeout,
                                                          ServerError
                                                        }
                                                        
                                                        type BusinessError = Result.Found | Result.Missing | Result.Mismatch;
                                                        
                                                        function business(result: BusinessError): string {
                                                          switch (result) {
                                                            case Result.Found:
                                                              return "a";
                                                            case Result.Missing:
                                                              return "B";
                                                            case Result.Mismatch:
                                                              return "C";
                                                          }
                                                        }
                                                        
                                                        function processResult(result: Result): string {
                                                          switch (result) {
                                                            case Result.Found:
                                                            case Result.Missing:
                                                            case Result.Mismatch:
                                                              return business(result);
                                                            case Result.Invalid:
                                                              return "Q";
                                                            case Result.Timeout:
                                                              return "A";
                                                            case Result.ServerError:
                                                              return "Z";
                                                          }
                                                        }


                                                        еще раз, обратитие внимание: если убрать хоть один case тут -- оно НЕ скомпилируется
                                                        Ответить
                                                        • Да у вас же



                                                          Switch-технология — Википедия
                                                          5 июня 2006 г. - В качестве языков алгоритмизации и программирования в системах логического управления в зависимости от типов управляющих вычислительных
                                                          Ответить
                                                          • &gt; UniMod = UML + Switch-технология + Eclipse + Java + SourceForge
                                                            (разделить на ПХП умножить на sendmail_


                                                            ааа
                                                            Ответить
                                                      • Да там целого класса проблем нет, который приходится решать создавая новые енумы (или новые силд классы в котлине).
                                                        Ответить
                                                    • так как бы ты это на свифте написал бы?
                                                      или на любом другом ЯП, который ты занеш
                                                      Ответить
              • А в жс в своём стиле намутили, если конструктор без нью вызвать, получится обычная функция а зис будет ссылатся на уиндоу. Можно забыть нью и обосраться сразу или не сразуу
                Ответить
                • JS двадцать лет рассказывали нам как прекрасно прототипное наследоване а потом ВЖУХ и завезли класс-бейсд, и теперь там кал везде, да

                  Язык-на-салфетке потому что
                  Ответить
                • Какой багор )))

                  А ведь правда, прототипное ООП в JS начиналось с того, что перед функцией разрешили писать «new».
                  Ответить
                  • я помню как эмулировали классы: там была функция и new и приватные поля были через var, а публичные чреез this, да

                    Черезжопное какое ООП (правда, в перле оно еще более черезжопное)

                    ООП само по себе тот еще кал, а уж с этим говном и подавно
                    Ответить
                    • Было же ещё хуже, когда до newчерез Object.prototype писали
                      Ответить
                      • блядь как можно было сделать так сложно и неудобно НА ПУСТОМ МЕСТЕ? Ради чего?
                        Ответить
                      • Мы до сих пор так пишем
                        Ответить
                        • А мы не пишем

                          Мы не сеем
                          Мы не пишем
                          Мы валяем дурака

                          С колокольни хуем машем
                          Разгоняем облака!
                          Ответить
    • Кстати гость, хочешь багра?
      В расте не вызываются drop у статических полей.

      нехуй типа их вообще юзать
      Ответить
    • Бейт Шломо
      Не может устоять и хватает
      Ответить
    • О, гост, давай вот такую хуйню обсудим.

      Я хочу селф-референсд структуру. Например в крестушке я могу иметь поле `string` и другое поле на него `string_view`.

      Разумеется, я должен явно запретить копирование и муванье (ну или правильно его реализовать) чтобы при муве мой стринг вью не превратился в тыкву.

      Это правда? Это так?

      Теперь возьмем раст: Там селф-референс структуры это боль и ад во многом потому, что всё мувабл. Запретить копирование я могу (тупо не надо реализовывать клон) но муванье не могу (кроме как через pin, но это ад)

      Собссно вопрос: почему, на твой взгляд, в рустне не сделали трейт "UnMovable" чтобы тупо запретить мувинг, и позволить делать наконец селф референс структуры?
      Ответить
    • Сейчас играю в ретроигор под шиндошс
      Что-то с процессом произошло пока был в фоне
      Теперь вместо бравурного менуэта и пох и возрождения звучит минорная версия с ВРМ, замедленным прямо до готичности
      Какой belgian new beat )))
      Ответить
      • Это как когда мега-мен на NES тормозит?
        Ответить
        • Не помню такую
          Это "Sid Meier's Pirates!", ей еще 25 лет нет
          Ответить
          • в римейк что ли?

            оригинальной-то уже и все тридцать есть
            Ответить
            • И эту я тоже не видел
              До этого играл в отечественные «Морские Легенды»

              Не исключено, что то и другое клоны
              Ответить
              • сложно сказать, как можно играть в Пиратов 2006-го года и не знать про оригинал, ну это такое

                я на мегадрайве знатно времени провёл за ним. правда, картридж был тоже "пиратский" и слот под батарейку не завезли, а потому пройти вряд ли бы вышло. хотя я тогда даже и не думал, что игру можно пройти, типа ну плаваешь, торгуешь, воюешь, каких-то баб цепляешь, дуэли там, сокровища, what should we do with a drunken sailor

                а в римейк играл буквально в том году. он конечно ок и они там добавили понемногу того и сего, но для своего года выпуска как-то морально устарел. ещё и нампад там нужен
                Ответить
                • А что такого? Не обязательно же сразу к истокам

                  Она 2002 года вроде, а голд 2004

                  Девушек мышью танцевать не удобно, это да
                  Ответить
              • один из самых известных клонов это, пожалуй, "Корсары"

                А вообще по сути это elite и прочая космопижня, только на морскую тематику
                Ответить
                • Трейдинг в этой не работает, приносит какую-то жалкую мелочь, поэтому некорректное у тебя сравнение

                  А корсаров обоссывали за просраный поворот оверштаг, я даже смотреть на них не стал
                  Ответить
                  • А вот я вот однажды прошел воркрафт два за орду и за альянс, вот!
                    Бейонд зе дарк портал!
                    Ответить
                    • А в я-ваш-ментат-кирилл играл?
                      Ответить
                    • Воркрафт мне никогда не нравился, как и весь порожденный им хайп по RTS
                      Ответить
          • фу, я в современные игры не играют в них нет души
            Ответить
    • Друзья, поздравляю всех с сорокалетием игры Супер Марио Бразерс!
      Ответить
      • Как говорят у нас в Иудее, поздравление на хлеб не намажешь.
        Ответить
        • >Как говорят у нас в Идее
          Ты в JB работаешь?
          Ответить
        • Спасибо не булькает!
          Ответить
        • Как говорят у нас в Индее, удивительно что до сих пор работает
          Ответить
          • У нас в Индии говорят так: Хочешь изучать Ай Ти? Обращайся к мистеру Нагуру Бабу!

            Кстати, Дурга Софт Мистера Нагура Бабу делает и графический дизайн тоже!
            оцени https://www.durgasoftonline.com/
            Ответить
            • тян попердолило((
              https://i.postimg.cc/gkZLfSQ3/image.png
              Ответить
              • Причём оригинал непердолёный:

                https://d502jbuhuh9wk.cloudfront.net/orgData/5e356a710cf24531c92ac49f/pages/assets/images/slide1.png

                Тут забавный CSS, который пердолит картинку только по ширине в зависимости от размера окна браузера, игнорируя соотношения сторон и не пердоля высоту.
                Ответить
                • Всё-таки крипово. Нейросетка рисовала, мне кажется.
                  Ответить
                  • индус рисовал в седьмом фотошопе

                    криво вырезал, ещё лучше обтравил и вперде
                    Ответить
                • https://i.postimg.cc/Fs9NVV8g/image.png
                  Ответить
                  • У них, наверное, чем шире человек, тем больше доверия вызывает

                    А может они на мониторах 4:3 сидят?
                    Ответить
                    • Если смотреть страницу на вертикальном мониторе, например, на телефоне, то люди получаются узкими.

                      Т. е. их технология заточена под монитор строго определённого разрешения, на остальных пердолит.
                      Ответить
                      • Это нормально. Там просто было написано бест вьюед ин, а ты не прочитал

                        у верстальщшика просто такой монитор был, ну
                        Ответить
            • Смотри, как они ловко
              Courses


              Я так понимаю, какие-то неземные технологии криво закомментирвали, и они случайно попали плейн-текстом в аутпут.
              А что за технологии, кто скажет? Кофескрипт может?

              ИНЬЮ ЗАЕБАЛ
              ПОЧИНИ ХУХ
              Ответить
              • вот короче
                <script type="text/template" id="cartItemTemplate">
                		<tr data-id="<@- item.id @>" data-type="<@- item.type @>" data-title="<@- item.title @>" data-price="<@- item.price @>" data-coursecategory="<@- item.courseCategory @>">
                			<@ var itemType = item.type; @>
                			<td style="width:150px;">	
                				<@ var curl = "https://d502jbuhuh9wk.cloudfront.net/courses/"+ item.id +"/"+ item.id +"_scaled_cover.jpg?v=" + coverVersion; if(isNaN(coverVersion)) { curl = showCourseDefaultCover(null, item.id)   } @>
                				<img alt="<@- item.title @> cover" style="width:100%;max-height:100px;" class="img-fit-contain lazy"  onerror="showCourseDefaultCover(this, '<@- item.id @>')" 
                						data-src='<@- curl @>' />
                			</td>
                			<td class="itemTitle"><@- item.title @><@ if(item.description !== undefined) { @><div class='text-gray variantDescription'><@ print(item.description) @></div><@ } @></td>
                			<td class="text-right curr"><@ if(item.priceWithoutTax !== undefined && '' != '') { @><@ print(getDisplayAmount(item.priceWithoutTax)) @><br><small><@ print(getDisplayAmount(item.price)) @> incl. <@- item.gstRate @>% </small><@ } else { @><@ print(getDisplayAmount(item.price)) @> <@ if(item.gstRate > 0 && '' != '') { print("<br><small>incl. " +item.gstRate+"% </small>") } @><@ } @> 				
                			<@ if(item.pgChargesLearnerPercent !==undefined && getDisplayAmount(item.pgChargesLearnerPercent).includes('₹')) {@> <br><small>Internet handling fees: <@print(getDisplayAmount(item.pgChargesLearnerPercent/100*item.price))@></small> <@} @>
                			</td>
                			<td><button class="btn btn-sm btn-error btn-action circle removeItemBtn" data-url="/s/cart/remove/<@- item.id @>"><i class="material-icons">clear</i></button></td>
                		</tr>
                	</script>
                Ответить
                • <@print(getDisplayAmount(item.pgChargesLearnerPercent/100*item.price))@></small> <@} @>

                  похоже на хуй кофе-скрипт, да
                  Ответить
                • Блядь, это какой-то ПХП, только плохой
                  Ответить
                  • </a>
                    			<h3 class="sub-heading"><b class="size-18 text-primary"><@- item['spayee:resource']['spayee:title'] @></b></h4>
                    			<p class="size-16 description text-primary"> <@ if(item['spayee:resource']['spayee:courseType'] === 'package') { @><@ print(item["courses-count"]!==undefined?item["courses-count"]:"0") @> Courses<@ }else { @>
                    				Instructor : <@ print(item["spayee:resource"]["spayee:publisher"]!==undefined?item["spayee:resource"]["spayee:publisher"]:"&nbsp;") @><@ } @></p>
                    			<@if(item.rating){@>
                    				<p class="size-16 description text-primary">Rating: &nbsp;
                     					<@ for (ratingsSize = 1; ratingsSize <= 5; ratingsSize++) {@>
                    						<@if(item.rating){@> 
                    							<@if(item.rating.avgRating){@> 
                    								<@ if(item.rating.avgRating >= ratingsSize) {@> 
                    									<i class="icon ion-android-star text-primary"></i>&nbsp; 
                    								<@ } else if(item.rating.avgRating > ratingsSize-1 && item.rating.avgRating < ratingsSize) { @> 
                    									<i class="icon ion-android-star-half text-primary"></i>&nbsp; 
                    								<@ } @>
                    							<@}@>		
                    		  				<@}@>
                    					<@}@>
                    				</p>
                    			<@}@>
                    Ответить
                  • Client-side "PHP", называется "JavaScript".
                    Ответить
              • Западными хакерами была осуществлена атака на портал govnokod.xyz. Нашими специалистами оперативно были приняты меры противодейстия угрозе. Предположительно, злоумышленник находился в системе 10 лет. Отмечается, что персональные данные граждан к злоумышленникам не попали.
                Ответить
                • по нелепой случайности интерн поставил пароль рута 123
                  проблему мы решили, практику интерну не зачли
                  Ответить
                • по нелепой случайности интерн поставил пароль рута 123 на все сетевые устройства и сервера
                  проблему мы решили, практику интерну не зачли
                  Ответить
                • Отмечается, что персональные данные граждан к злоумышленникам не попали.

                  пароли не подпадают под ПД?
                  Ответить
                  • Один злоумышленник спиздил мой пароль

                    но вообще ты же знаешь, как это работает: куки ставить нельзя, а пароли хранить плейнтекстом -- можно, и их потом -==hax0r==- за триста евро в даркнете продает вместе с емейлом
                    Ответить
      • спидран примерно четыре с половиной минуты, между прочим
        Ответить
    • типичный растер: https://users.rust-lang.org/t/introducing-wavelet/133964
      типичеый джаваскритер: https://www.npmjs.com/package/is-number
      Ответить
      • Первая ссылочка:

        Introducing Wavelet

        announcements

        HTML content omitted because you are logged in or using a modern mobile device.

        Ставишь галочку «вид для ПК» — всё отображается.

        Смотришь код страницы, а там
        Ответить
        • Так это же движок "дискасс", что в переводе с латыни значит "тормозящий кусок говна" или как-то так
          Ответить
      • https://github.com/jonschlinkert/is-number/issues/42

        Лол

        Ещё меня очень веселит Linux build status и одновременно предложение сразу запустить
        Ответить
    • а вы за десепктиконов или автоботов??
      Ответить

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