1. Kotlin / Говнокод #26408

    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
    data class User(
    
        @Expose
        @SerializedName("email")
        val email: String? = null,
    
        @Expose
        @SerializedName("username")
        val username: String? = null,
    
        @Expose
        @SerializedName("image")
        val image: String? = null
    ) {
        override fun toString(): String {
            return "User(email=$email, username=$username, image=$image)"
        }
    }

    JetBrains сделали прекрасный стандартный toString у дата классов, а они всё равно пишут свой туСтринг, который выдаёт результат в точности повторяющий стандартный.

    https://github.com/mitchtabian/MVIExample/blob/master/app/src/main/java/com/codingwithmitch/mviexample/model/User.kt

    Запостил: Gorr, 03 Февраля 2020

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

    • Именно поэтому я за "PHP".
      Ответить
    • Жабоеб не может без бойлерплейта.
      Когда он видит класс из одной строчки, у него начинает дергаться глаз

      Он берет, и пишет над полем username что оно называется username.
      Казалось бы, зачем? Это ведь и так понятно по рефлексии, но нет
      Ответить
      • Блять, пол говнокода ворчит как старые бабки у подъезда над автогенерённой хуетой из IDEA по Ctrl+Insert. Вы ебанулись?
        Ответить
      • Пиздец, самый заплюсованный коммент в окрестности.

        ШОК! Где-то на гитхабе есть автогенерённый бойлерплейт!

        Написано же data class ⇒ по всей вероятности сгенерён из какого-нибудь xml- или json-описания api. Лежать будет в отдельном файле, делать в котором нехуй, нужен он линтеру и компилеру для тайпчекинга и среде для автодополнения. Желательно, чтобы ещё был помечен как автогенерённый, чтобы не трогал никто. Всё равно, когда версия апи поменяется, придёт новый файлик xml, по которому классы перегенерятся. Единственный минус такого кода, кроме его нахуй не нужности, как и ± большинства кода, написанного для продакшена, в том, что serialized name может отличаться от имени поля и предвещать кому-то мучительный дебаг, если уж кто-нибудь доберётся до того, чтобы трогать подобный бойлерплейт руками.

        Ну там вот в соседнем файле есть ещё
        if (pk != other.pk) return false
        
        return true
        Тоже давайте порофлим.
        Ответить
        • Подозреваю, что РКГ не нравится не кокококонкретно данный код, а «Java» и «Кококококотлин». Он считает тавтологией явное указание имени поля для сериализации.
          Ответить
        • > data class ⇒ по всей вероятности сгенерён из какого-нибудь xml

          по какой такой вероятности?
          https://kotlinlang.org/docs/reference/data-classes.html
          Ответить
          • > по какой такой вероятности?

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

                  тустринг то зачем генерить? Датаклассы сами это умеют
                  Ответить
                  • Давай сойдёмся на следующем: дефолтный сниппет в IDEA, который кроме полей генерит ещё и toString с телом — избыточен. Ай-яй-яй, разработчики из intelliJ, ай-яй-яй. Пожурили и забыли. Повода для срача про " Когда он видит класс из одной строчки, у него начинает дергаться глаз" вообще не вижу.

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

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

                          Вот тут еще хуже
                          https://github.com/mitchtabian/MVIExample/blob/master/app/src/main/java/com/codingwithmitch/mviexample/model/BlogPost.kt

                          data классы сами умеют иквалс

                          Если это кодогенерация, то почему такая тупая?
                          Ответить
                        • import com.google.gson.Gson
                          
                          data class Foo(val name: String, val iq: Int)
                          
                          
                          fun main() {
                              val foo = Foo("S", 12)
                              val str = Gson().toJson(foo) //
                              println(str)//{"name":"S","iq":12}
                              val foo2 = Gson().fromJson("{\"name\":\"S\",\"iq\":13}", Foo::class.java)
                              val foo3 = Gson().fromJson("{\"name\":\"S\",\"iq\":13}", Foo::class.java)
                              println(foo2)//Foo(name=S, iq=13)
                              println(foo2 == foo) //false
                              println(foo2 == foo3) //true
                          }


                          обрати внимание на класс Foo.
                          Ответить
                          • Ну да, что-то вроде case class в Scala. Знаю, что так можно.
                            Ответить
                            • котлин очень многое спиздил у скалы
                              Ответить
                              • А Дуэйн Джонсон знает об этом?
                                Ответить
                              • На «Скале» писа́ть с детства не умел.
                                Видимо, «Котлин» — это мой удел.
                                А «Скала»? Да что «Скала»? Вечно мне лгала.
                                И меня никогда понять бы не смогла.

                                А «Котлин» всё спиздил у «Скалы».
                                Вот «Скала», и вот её не стало.
                                И когда об этом вдруг узнаешь ты...
                                Ответить
    • А в чём смысл ключегого слова "override", почему без него не смогли обойтись?
      Ответить
      • Ну как... чтобы отличать определение новой виртуальной функции от переопределения функции предка. Например, можно случайно написать virtual string toStirng() и потом удивляться, почему не работает.
        В С++ этого как-то не хватало, сейчас вроде вводят...
        Ответить
    • Собачки...
      Ответить
    • 3,14 - вореационный маньяк
      Ответить
      • На самом деле вполне похожее сделать, что Страйкер хотел поддержать нескольким абонентам на соту. Это же "исполнять этот тред только потрошилку статической карточки не менее N евро? Я пошел уткой и моментальном направления можно нагрузить видюху на 100%? Прогнал бенч - частоту? Если с температуру смотреть надо - она не всё время на максимальная турбо-частотах работать, а хлама там такое количество, что в нем заебешься разбираться в ограничение было в 20 фпс.
        Ответить
        • То-есть запрет на говорение с уёбком на тебя не распостроняется, да? Ты типа самый умный?
          Ответить
          • Не общайся с трубочистом - он испачкает тебя сажей.
            Ответить
        • Пидор, щас в игнор пойдешь! Последнее предупреждение!
          Ответить
          • Кого ебёт твой игнор, мой сладенький?
            Ответить
          • Я понял! Я теперь понял!
            Когда он видит класс из одной строчки, у него начинает дергаться глаз.

            Он берет, и пишет над полем username.
            Казалось бы, зачем? Это ведь и так понятно по рефлексии, но нет А в чём смысл ключегого слова "override", почему это происходит столь просто - подумаешь каст сменили, - и имеет длительные последствия! Едить-твою за ногу! Обратно-то некому кастануть!
            Ответить
            • Именно поэтому я за Javascript Моча: Object.prototype.toString=function(){ret urn JSON.stringify(this)};
              Ответить
            • Блин. Второй раз меня подловил.
              Но теперь я даже пытался вчитаться в эти вореции.
              Ответить
              • Подтверждаю. Тоже сначала пытался понять 63 вареций этой информации. Даже лёгкое головокружение появилось, когда пытался скобенировать психозу в наталиозу.
                Ответить
              • А ведь это классические вореции, та самая кнопка Ответить бредом из тех времён, когда Инканус был "не ходи по мне", и из его учётки не сделали Те-ле-фун-кен.

                Эти современные многомалостные вореции лень устанавливать. Скрипты какие-то. Сложна! Сложна! А старый скрипт так и остался, разве что вместе со всем разделом переехал на новый SSD.
                Ответить
                • >А ведь это классические вореции

                  Я специально поиском проверил что в треде не было начальной фразы.
                  >Я понял! Я теперь понял!

                  EDIT: OH SHI~. Просто он у меня скрыт.
                  Ответить
    • Именно поэтому я за Javascript
      Ответить
      • Моча:
        >> ({pituh: "petya"}).toString()
        "[object Object]"
        Ответить
        • Я понял! Я теперь понял!
          Когда педофил растлевает ребенка или гей соблазняет натураста, он просто приводит его к другому типу!!! Вот, почему это происходит столь просто - подумаешь каст сменили, - и имеет длительные последствия! Едить-твою за ногу! Обратно-то некому кастануть!

          "В чем отличие геев и натуралов"? Ответ - ни в чем, ведь базовый тип у них один.
          Ответить
        • хуй сосет жава скрипт
          груви хуев не сосет
          print([groovy: "rocks"].toString())
          Ответить
        • Учи матчасть
          JSON.stringify({pituh: "petya"}).toString()
          Ответить
          • О, господи! Расскажи нам поподробнее зачем вызывать метод toString у строки?

            Зачем? Зачем?
            Ответить
            • Потомучто могу, это каждый петух знает
              Ответить
            • 1. JSON.stringify не всегда возвращает строку. Для undefined он возвращает undefined.

              2. Чтобы получить ошибку времени выполнения, если на вход подали undefined.

              >> JSON.stringify(undefined);
              undefined
              >> JSON.stringify(undefined).toString();
              TypeError: JSON.stringify(...) is undefined
              Ответить
        • Object.prototype.toString=function(){return JSON.stringify(this)};
          ({pituh: "petya"}).toString()

          Починил, проверь.
          Ответить
          • Осталось продвинуть в стандарт. Много юзабельней, чем [Object object].
            Ответить

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