Си диез / Говнокод #27920 Ссылка на оригинал

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
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 3_dar, (Updated )

Комментарии (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;
          }
          Ну чтобы точно не ошибиться.
          Ответить
        • Не перегибай. Заебали везде писать везде auto x = [](auto y) -> auto, особенно когда тип не очевиден.
          Вообще заебись. Я предлагаю при инициализации хотя бы писать.
          Ответить
            • > auto auto(auto) {auto;}
              Потом выяснится что половину auto можно не писать, их выведет компилятор.
              () {;}
              Ответить
                • А потом окажется что не только типы, но оставшиеся куски тоже не нужно писать.

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

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

                  python3.cpp
                  
                  () {;}
                  Будет кококмпилироваться в python3. Итд.
                  Ответить
                  • В "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 включает в себя интерпретатор, компилятор в байткод и оптимизирующий компилятор в машинный код, сравнимый по эффективности с Java и лишь немного уступающий по быстродействию C и C++.
                Ответить
                • > и лишь немного уступающий по быстродействию C и C++.

                  цитата_Лироя_про_треды.txt
                  Ответить
                • >лишь немного уступающий по быстродействию C
                  ну-ну
                  Ответить
        • Что забавно - шарповое сообщество трещит о том, какую хуевую фичу ввели
          Ответить
            • Ну 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);
                    Ответить
                      • 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=сараситу

                        Ищем рифму к слову "сараситу". тараситу джираситу клораситу чампраситу бааситу кабаситу иаситу акаситу атакаситу йамаситу мимаситу уаситу накхаситу эаситу мангситу рангситу...
                        Ответить
                          • Ничего не понял. Можно в 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.
                              Ответить
                              • У меня такая ошибка при попытке просмотра «Медиума». Только изредка он мне показывает страницу.
                                Ответить
                                  • То, что я раз в неделю (а то и реже) на него попадаю по чьей-то ссылке –— это ужас какая атака.

                                    У них там хостинг на «Целероне» Тараса?
                                    Ответить
                                    • Я просто игнорирую любые ссылки на эту помойку. Даже если они открываются, они будут грузить мегабайты каких-то свитков, при том что маркап на этом сайте настолько примитивен, что код там вставляют скриншотами из текстового редактора.
                                      Человек с IQ выше легального возраста согласия такой платформой пользоваться не будет, ergo смотреть там нечего.
                                      Ответить
                                    • > раз в неделю
                                      Ну ты бы наверно чаще попадал, если бы не требовали денег за просмотр
                                      Ответить
                            • Ну там чувака с приличным опытом говноделства под мобилки послали и он закосил под хуевую гомонигру без гринки и ту позвали на собес. А как вишенка на торте - оказалось что 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 () { {"петухов", "пятнадцать, пожалуйста"} };
                  Ответить

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

Из-за тебя ушел bormand, guest!

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


    8