1. Objective C / Говнокод #13431

    −115

    1. 1
    user.status = (user.status == 0)?1:0

    Запостил: Hits, 16 Июля 2013

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

    • The magic of numbers...
      Ответить
    • user.status = 1 - user.status

      (c) KO
      Ответить
      • Если user.status было равно 42, то ваш код вернет не то.

        Хотя если оно внезапно булево, то проще всего user.status ^= 1;
        Ответить
      • Полный эквивалент кода автора:
        user.status = !user.status
        Ответить
        • А в моей богомерзкой java не прокатит
          Ответить
          • В богомерзкой жабе для таких случаев есть boolean :)
            Ответить
            • Ну или Enum
              Ответить
              • Ну да, у него, емнип, даже свои операции можно прикрутить.
                Ответить
                • Скажу больше:

                  public enum MyEnum implements MyInterface {
                  }
                  Ответить
                  • >Скажу больше:
                    >public enum MyEnum implements MyInterface {
                    >}

                    А можно еще больше?
                    Перечисление в жабе - это сахар или всё же есть профиты перед
                    public static class MyEnum implements MyInterface {
                      public static final MyEnum PRIMUS = new MyEnum();
                      public static final MyEnum SECUNDUS = new MyEnum();
                      public static final MyEnum TERTIUS = new MyEnum();
                      ...
                    }

                    ?
                    Ответить
                    • Ну да, по сути енум это сахар, реализованный именно так, как вы показали. А профит в том, что там генерятся еще и несколько методов, которые неприятно было бы писать самому на каждый такой класс - valueOf(), values(), toString() и т.п..
                      Ответить
                      • ну есть еще switch, но это сомнительный профит на мой взгляд: сам switch - сахар + подозреваю, что его реализация на enum'ах аналогична switch'у на String'ах из SE 7. Профиты для программиста в общем понятны, интересуют именно профиты на уровне байт-кода(если они есть), но самому времени жалко и лениво уже :)
                        Ответить
                        • > профиты на уровне байт-кода
                          Да какие там профиты могут быть, если на сам енум генерится точно такой же .class файлик, как и на обычный класс? Вот что показал javap на скомпиленный енум:
                          public final class Test extends java.lang.Enum{
                              public static final Test FOO;
                              public static final Test BAR;
                              public static Test[] values();
                              public static Test valueOf(java.lang.String);
                              static {};
                          }
                          Так что профит только в удобстве, не более того.
                          Ответить
                        • Свич по енуму раскрылся в прикольную вещь: сгенерился дополнительный .class файлик с классом, в статик поле которого лежит массив, с помощью которого индексы енума отображаются на индексы свича.

                          А дальше банальный вызов ordinal() на аргументе свича, трансляция индекса через массив, описанный выше и инструкция lookupswitch, как и в обычном свиче по интам.
                          Ответить
                    • Ну вот, за меня все ответили. Дополнительная фигня - он ВСЕГДА Serializable :)
                      Ответить
                      • > Дополнительная фигня - он ВСЕГДА Serializable :)
                        Несериализуемый енум смотрелся бы странно ;) Какой же изврат надо сделать на енуме, чтобы захотеть запретить его сериализацию?
                        Ответить
                        • Всю бизнес-логику - и потом запостить сюда )
                          Ответить
                        • Более того, он ПРАВИЛЬНО Serializable, т.е. не позволяет сгенерить дубликатов значений енумов. Поэтому Блох и советует реализовывать синглетоны в жабе через енумы. Но лучше вообще не реализовывать синглетоны.
                          Ответить
                          • >>>Но лучше вообще не реализовывать синглетоны.

                            Истинно так
                            Ответить
                    • >Перечисление в жабе - это сахар или всё же есть профиты перед
                      Ну на первый взгляд сахар. Когда я увидел впервые - так и подумал.
                      Но разобрался глубже, и оказалась дюже полезная вещь: сахар процентов на 30-40. То есть скорее нет, чем да.
                      Там полиморфизм короче записывается, удобно реализовывать семейства чистых функций и заменять NPE-опасные сишкоблядские свичи.

                      Роман прав - читайте Блоха.
                      Ответить
            • Да и в Obj-C есть. Аж 3 штуки.
              Ответить
      • user.status = 1 - sign(user.status);
        Ответить

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