1. C# / Говнокод #27920

    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
    using KoKo.Property;
    
    namespace MyProject {
    
        public class Person {
    
            private StoredProperty<string> FirstName { get; }
            private StoredProperty<string> LastName { get; }
            public Property<string> FullName { get; }
    
            public Person(string firstName, string lastName) {
                FirstName = new StoredProperty<string>(firstName);
                LastName = new StoredProperty<string>(lastName);
                FullName = DerivedProperty<string>.Create(FirstName, LastName, (first, last) => $"{first} {last}");
            }
    
            public void SetFirstName(string firstName) {
                FirstName.Value = firstName;
            }
    
        }
    }

    Запостил: 3_dar, 04 Января 2022

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

    • Кококо обсерватория.
      Дампик.
      Ответить
    • А зачем такое говно? Почему нельзя обычне филды в проперти завернуть и сделать проперти для fullname?
      Чтобы его типа кешировать?
      Ответить
      • Ко-ко-кококо
        Ответить
      • Может чтобы подписываться на изменения? Сам же как-то мне отвечал зачем нужна ко-ко-ко-обсерватория.
        Ответить
    • > FirstName = new StoredProperty<string>(firstName);
      > LastName = new StoredProperty<string>(lastName);
      > FullName = DerivedProperty<string>.Create(FirstName , LastName, (first, last) => $"{first} {last}");

      Автовывод генериков так и не завезли?
      Такое даже в 7ой йаже быдло:

      > LastName = new StoredProperty<>(lastName);
      Ответить
      • А нахуй он нужен? Явно видно что за тип, не нужно никуда смотреть
        Ответить
        • > Явно видно что за тип, не нужно никуда смотреть

          Настоящему джависту не влом написать одно и то же джва раза.

          Давайте тогда в каждом выражении у каждой переменной тип повторять, чтобы всё явно было.
          Ответить
          • Ддавайте давайте тип Тип повторять(повторять)
            Ответить
          • > одно и то же джва раза.
            Последние исследования ученых говорят, что оптимально делать третье, бустерное упоминание типа.
            StoredProperty<String> factory(String lastName)
            {
                   StoredProperty<String> result = new StoredProperty<String>(lastName);
                   return result;
            }
            Ну чтобы точно не ошибиться.
            Ответить
            • ((Person)This).FirstName = new StoredProperty<String>((String)FirstName );
              Ответить
          • Не перегибай. Заебали везде писать везде auto x = [](auto y) -> auto, особенно когда тип не очевиден.
            Вообще заебись. Я предлагаю при инициализации хотя бы писать.
            Ответить
            • Да, была шутка, что скоро будут писать: auto auto(auto) {auto;}
              Ответить
              • main = auto
                Ответить
              • > auto auto(auto) {auto;}
                Потом выяснится что половину auto можно не писать, их выведет компилятор.
                () {;}
                Ответить
                • :(){ :|:& };:
                  Ответить
                  • А потом окажется что не только типы, но оставшиеся куски тоже не нужно писать.

                    В Стандарте ™ сделают фичу чтобы компилятор сам догадывался по названиям файлов, какой код там должен быть.

                    grep.cpp
                    
                    () {;}
                    Будет кококмпилироваться в утилиту grep.

                    python3.cpp
                    
                    () {;}
                    Будет кококмпилироваться в python3. Итд.
                    Ответить
                    • g++ make-zaebis.cpp
                      Ответить
                    • В "PHP" это давно реализовано, только компилировать ничего не нужно.
                      Ответить
                    • В «Busybox» именно так и сделали: во что его переименуешь, ту функцию он и будет выполнять.
                      Ответить
          • В «Планкалкюле» (это ЯП такой, а не персонаж произведения «Гаргантюа и Пантагрюэль») все действия записывались в три строчки. В третьей строке под КАЖДЫМ операндом записывался его тип.

            Жаль, Конрад Цузе так и не внедрил его.
            Ответить
            • А в первых двух?!
              Ответить
              • В первой собственно действия, вторая строка — для индексов массивов.
                Ответить
                • А промежуточные результаты, как в тетрадке по ма-те-ма-ти-ке, можно было писать?
                  Ответить
                  • Вообще сам язык простой:
                    https://ru.m.wikipedia.org/wiki/Планкалкюль

                    Почти, как ассемблер, только для ма-те-ма-ти-ков.

                    Уже после смерти Цузе реализовали трансляторы, изменив синтаксис на однострочный (типы стали писать в квадратных скобках).
                    Ответить
                    • > Уже после смерти Цузе реализовали трансляторы, изменив синтаксис на однострочный (типы стали писать в квадратных скобках).
                      Не успел помереть, а тут же язык испоганили.
                      Ответить
    • А вообще меня дико восхищают современные языки погромирования:

      «Иажа»
      StoredProperty<String>  LastName = new StoredProperty<String>(lastName);

      «Cщ»
      StoredProperty<string>  LastName = new StoredProperty<string>(lastName);
      «ТуреЗсгiрт»
      let stringNumeric : StoredProperty<string> = new StoredProperty<string>(firstName);

      Итд.

      Почему анскильные няудачники ня могли зделать инициализаторы как в Сишке?
      StoredProperty stringNumeric = {firstName};

      Ок, если так нравится «new», неужели сложно было запилить нормальный type inference?

      class  Properties{
          StoredProperty<string> Name;
          StoredProperty<int>  Id;
          Properties (string LastName, int LastId) {
              Name = new StoredProperty<string>(LastName);
              Id = new (LastId);
          }
      }
      Ответить
      • Именно поэтому я за С++.
        Ответить
      • > Почему анскильные няудачники ня могли зделать инициализаторы как в Сишке?

        Вообще-то в «Cщ» давно сделали

        Beginning with C# 9.0, constructor invocation expressions are target-typed. That is, if a target type of an expression is known, you can omit a type name, as the following example shows:

        List<int> xs = new();
        List<int> ys = new(capacity: 10_000);
        List<int> zs = new() { Capacity = 20_000 };
        
        Dictionary<int, List<int>> lookup = new()
        {
            [1] = new() { 1, 2, 3 },
            [2] = new() { 5, 8, 3 },
            [5] = new() { 1, 0, 4 }
        };


        https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/new-operator

        StoredProperty<string> LastName = new(lastName);


        вот почему diamond operator до сих пор не завезли - это вопрос
        Ответить
        • Спасибо. А то ведь я не настоящий Свар#ик, а MSDN на CD-ROMе нашёл.
          Ответить
        • var a = new[] { 10, 20, 30 };
          
          Dictionary<int, List<int>> lookup = new()
          {
              [1] = new() { 1, 2, 3 },
              [2] = new() { 5, 8, 3 },
              [5] = new() { 1, 0, 4 }
          };


          Лютая годнота. Как я и предвидел, усилился процесс всеобщей ява-скриптизации современных типизированных языков.
          Сперва varы, потом автовывод, теперь облегчённые инициализаторы.

          Всё закончится тем что компилируемые строготипизированные языки получат компактность божественной скриптухи вроде ECMAScipt-5.

          var lookup = 
          {
              [1] =  { 1, 2, 3 },
              [2] =  { 5, 8, 3 },
              [5] =  { 1, 0, 4 }
          };
          
          var codes = 
          {
              ["key7" ] = 40,
              ["key14"] = 88,
          };
          Ответить
          • > яваскриптизации
            Возможно вы имели в виду: хаскеллизации. Т.к. ЙАЖА-свитки — динамический язычок.
            Ответить
            • Скорее всего. Автовывод через половину программмы.
              Но с императивностью и мутабельностью.

              Хотя я бы и var тоже сделал опциональным и по умолчанию всё бы сделал константным, идеально вообще так:

              константа = выражение
              var перменная = выражение
              a = {  ["key7" ] = 40, ["key14"] = 88 };
              Ответить
              • А может быть, сразу «OCaml» взять?
                Ответить
                • Инструментарий OCaml включает в себя интерпретатор, компилятор в байткод и оптимизирующий компилятор в машинный код, сравнимый по эффективности с Java и лишь немного уступающий по быстродействию C и C++.
                  Ответить
                  • > и лишь немного уступающий по быстродействию C и C++.

                    цитата_Лироя_про_треды.txt
                    Ответить
                  • >лишь немного уступающий по быстродействию C
                    ну-ну
                    Ответить
          • Что забавно - шарповое сообщество трещит о том, какую хуевую фичу ввели
            Ответить
            • То есть когда вводили var, ни у кого не трещало?
              Ответить
              • Ну var (auto) всё-таки более очевидное, имхо, т.к. там хотя бы правая часть у выражения остаётся и в большинстве случаев более-менее понятно, о чём идёт речь.

                А вот вывод типов слева-направо уже сложнее читать без IDE т.к. может получиться говно в духе this.x = new (42, 100500). Хотя если не абузить, то вполне норм.
                Ответить
                • > говно в духе this.x = new (42, 100500)
                  Ну нормально.

                  Вообще это удобно для всяких аргументов, названных йажистами:
                  XmlReader.Create(reader, new XmlReaderOptions() { IgnoreWhitespace = true });
                  Ответить
                  • Охуенно удобно, прям как non-explicit конструкторы с одним аргументом в крестах...

                    Лучше бы именованные аргументы завезли, а не это костылище.
                    Ответить
                    • У меня в этом примере глаз за другое зацепился. Джва разных способа инициализации
                      >List<int> ys = new(capacity: 10_000);
                      >List<int> zs = new() { Capacity = 20_000 };

                      Почему-то разный регистр у Capacity. Я понимаю что в одном случае поле, а в другом аргумент конь-структора. Но инкапсуляция тут хромает.

                      > именованные аргументы завезли
                      А разве это не они?

                      >new(capacity: 10_000);
                      Ответить
                      • А без new они работают?
                        Ответить
                        • https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments

                          Вообще никогда не забуду книжку Бьярне, где он аргументированно объяснял почему не завёз в Кресты именнованные аргументы.

                          Поскольку эта фича поощряет хуёвый стиль программирования. А в методах где 1-2 аргумента она только мешает.

                          И как раз поэтому жду когда их таки завезут в С++.
                          Ответить
                          • > поощряет хуёвый стиль программирования

                            Да, у виндовых функций было бы по 40 аргументов вместо четырёх структур по десять...
                            Ответить
                            • Ага.

                              Но лучше всего зделали в Сишке.
                              typedef struct
                              {
                                  char* last;
                                  char* name;
                              } Property;
                              
                              Property a = {last:"John", name:"Doe"}; //именованные аргументы
                              Property b = {"John", "Doe"}; //конструктор с автовыводом типа
                              Ответить
                          • А как надо когда у меня 12 аргументов?
                            foo(null, null, null, null, 42, null, null, null)
                            ?
                            Ответить
                            • Билдеры-хуилдеры, структурки или ещё какое-то разделение ответственности... 12 аргументов, из которых 90% нуллы, явно попахивают.
                              Ответить
                              • А насколько это всё бесплатно, и чем структура лучше именованных параметров в данном случвае?
                                Ответить
                                • Тут скорее вопрос в том, насколько вменяема функция с 12 опциональными параметрами: может быть она просто слишком много на себя берёт и её как-то можно разбить на более простые или передать ей уже готовые сущности?
                                  Ответить
                        • >new
                          кстати, new в C# и JAVA говно и не нужно. Реально лишнее слово и семантический мусор
                          Ответить
                      • сараситу
                        Ответить
                        • ddg: q=сараситу

                          Ищем рифму к слову "сараситу". тараситу джираситу клораситу чампраситу бааситу кабаситу иаситу акаситу атакаситу йамаситу мимаситу уаситу накхаситу эаситу мангситу рангситу...
                          Ответить
                          • > ddg
                            Фу.

                            https://www.ar15.com/forums/General/DuckDuckGo-gone-WOKE/5-2491000/
                            Ответить
                            • Ничего не понял. Можно в 2х словах.

                              Там стена текста, а я жутко хочу спать.

                              Edit: А, въехал. Мультикультуралочка во все поля. ещё и резюме с ашипками. Охуенно!
                              Ответить
                              • > Можно в 2х словах.

                                Error 1020 Ray ID: 6c972f8f7b027b83 • 2022-01-06 18:59:50 UTC
                                Access denied
                                What happened?

                                This website is using a security service to protect itself from online attacks.
                                Ответить
                                • У меня такая ошибка при попытке просмотра «Медиума». Только изредка он мне показывает страницу.
                                  Ответить
                                  • А ты не отакуй paywall "Мудиума".
                                    Ответить
                                    • То, что я раз в неделю (а то и реже) на него попадаю по чьей-то ссылке –— это ужас какая атака.

                                      У них там хостинг на «Целероне» Тараса?
                                      Ответить
                                      • Я просто игнорирую любые ссылки на эту помойку. Даже если они открываются, они будут грузить мегабайты каких-то свитков, при том что маркап на этом сайте настолько примитивен, что код там вставляют скриншотами из текстового редактора.
                                        Человек с IQ выше легального возраста согласия такой платформой пользоваться не будет, ergo смотреть там нечего.
                                        Ответить
                                      • > раз в неделю
                                        Ну ты бы наверно чаще попадал, если бы не требовали денег за просмотр
                                        Ответить
                                    • Именно поэтому я против современных сайтов.

                                      Вконец испоганили интернеты. А ведь было время, был контент, был стиль:
                                      http://alina6665.narod.ru/poems.htm
                                      Ответить
                                      • Я вижу в алине не MO4ETO COTOHbI, а немного странный порт IRC :sad:
                                        Ответить
                                      • Посмотрел рисунки. Это, случаем, не файка Electric Retard'а?
                                        Ответить
                              • Ну там чувака с приличным опытом говноделства под мобилки послали и он закосил под хуевую гомонигру без гринки и ту позвали на собес. А как вишенка на торте - оказалось что HR у них такая же гомонигра.

                                PS: ох лол, они как минимум с 2018 спонсируют

                                https://www.youtube.com/watch?v=-wePMUqnBn0
                                Ответить
                                • > agenda is to destroy christian civilization

                                  какие же они там ебнутые, а
                                  я бы застрелился, если бы в какой-то момент обнаружил, что несу такую хуету
                                  Ответить
                                  • А ты бы какую цивилизацию разрушил?
                                    Ответить
                                    • У которой больше всего прав чело... Ах вот оно что блядь!
                                      Ответить
                      • > Джва разных способа инициализации

                        Это два разных конструктора

                        > List<int> ys = new(capacity: 10_000);

                        Вызов конструктора с аргументом

                        > List<int> zs = new() { Capacity = 20_000 };

                        Вызов конструктора и выполнение блока инициализации после

                        https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/how-to-initialize-objects-by-using-an-object-initializer
                        Ответить
              • там часто и вовсе бывает сложно донести почему использовать его везде это плохо

                но в var options = new Dictionary<string, object>() { {"петухов", "пятнадцать, пожалуйста"} }, где тип очевиден, он конечно незаменим
                Ответить
                • var options = new Dictionary<string, object>() { {"петухов", "пятнадцать, пожалуйста"} };
                  Dictionary<string, object> options = new () { {"петухов", "пятнадцать, пожалуйста"} };


                  Так var не нужен. С этой фичей получается компактнее.
                  Ответить
                  • Как это не нужен?!
                    var options = new () { {"петухов", "пятнадцать, пожалуйста"} };
                    Ответить

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