Субъективный Си / Говнокод #13431 Ссылка на оригинал

0

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

Запостил: Hits Hits, (Updated )

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

    • Если user.status было равно 42, то ваш код вернет не то.

      Хотя если оно внезапно булево, то проще всего user.status ^= 1;
      Ответить
            • Ну да, у него, емнип, даже свои операции можно прикрутить.
              Ответить
                • >Скажу больше:
                  >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-опасные сишкоблядские свичи.

                    Роман прав - читайте Блоха.
                    Ответить

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

Помни, guest, за тобой могут следить!

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


    8