1. Java / Говнокод #13058

    +66

    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
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    package islands.general.playerlist;
    
    import islands.general.player.Player;
    import java.io.Externalizable;
    import java.io.IOException;
    import java.io.ObjectInput;
    import java.io.ObjectOutput;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    /**
     * Список игроков.
     *
     * @author Григорий
     */
    public class PlayerList implements Externalizable, Iterable<Player> {
    
        private static final long serialVersionUID = -8237639142683577971L;
        private static final Player[] emptyPlayerArray = new Player[0];
        private List<Player> list;
        private int maxIndex;
    
        public PlayerList() {
            this(emptyPlayerArray);
        }
    
        public PlayerList(Player... players) {
            list = new ArrayList<Player>();
            maxIndex = 0;
            for (int i = 0; i < players.length; i++) {
                Player player = players[i];
                add(player);
            }
        }
    
        /**
         * Добавить нового игрока в конец списка.
         *
         * @param player новый игрок
         * @return индекс нового игрока
         */
        public final int add(Player player) {
            list.add(maxIndex, player);
            return maxIndex++;
        }
    
        /**
         * Установить нового игрока по указанному индексу.
         *
         * @param index индекс для установки
         * @param player новый игрок
         */
        public void set(int index, Player player) {
            list.set(index, player);
        }
    
        /**
         * Возвратить количество игроков.
         *
         * @return количество игроков
         */
        public int getLength() {
            return maxIndex;
        }
    
        /**
         * Возвратить игрока по указанному индексу.
         *
         * @param index индекс игрока
         * @return игрок
         */
        public Player get(int index) {
            return list.get(index);
        }
    
        @Override
        public void writeExternal(ObjectOutput out) throws IOException {
            out.writeInt(maxIndex);
            for (int i = 0; i < maxIndex; i++) {
                list.get(i).writeExternal(out);
            }
        }
    
        @Override
        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
            maxIndex = in.readInt();
            for (int i = 0; i < maxIndex; i++) {
                Player player = new Player();
                player.readExternal(in);
                list.add(player);
            }
        }
    
        @Override
        public Iterator<Player> iterator() {
            return list.iterator();
        }
    }

    Запостил: Dougrinch, 27 Мая 2013

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

    • Поясните, в чем говно. Вижу обертку над List, которая реализует Externalizable. Предполагаю, что класс был создан именно для быстрой сериализации, хотя тут еще вопрос, насколько быстро сериализуется Player.

      И еще мне кажется, что конструктор много лишних движений делает.
      Ответить
    • 0. тут основной гк в прекрасном поле maxIndex...ну и emptyPlayerArray еще очень нравится))
      1. если честно, то для чего был создан класс уже не помню, т.к. чтение/запись есть всего в паре мест...так что можно было бы хранить непосредственно List<Player> где надо
      2. вроде, это была крайне странная попытка инкапсулировать List<Player>
      Ответить
    • зато все документировано
      Ответить
      • Честно говоря смущает, что на русском... Мне так от китайцев однажды досталось. Всё очень хорошо прокомментировано, наверное, но оценить не получилось :(
        "В Кривом побережье зеленый дуб,
        Золотой кругооборот на объеме дуба"...
        Ответить
        • Вся команда разработчиков полностью русскоговорящая (более того, русский - основной язык). В подобных ситуациях категорически против языка комментариев, отличающегося от основного. Совершенно никому ненужная работа по двойному переводу.
          Ответить
          • т.е. полностью отметается, что в будущем команда будет интернациональная, либо придется поделиться с зарубежным партнером, либо вас прикупят с потрохами и весь ваш код соответственно
            и да, все-все-все исходники в utf-8?
            Ответить
            • 1. utf-8 - да
              2. по поводу будущего у нас в команде разные мнения...лично мое в том что такое крайне маловероятно и не стоит ради этого портить текущие комментарии (естественно, я говорю не про данный гк, а про те немногие места, где комментарии действительно нужны)
              Ответить
              • ну каждый решает сам, конечно
                комменты в нашем коде изначально и строго английские, пусть корявые, но тем не менее
                как и названия переменных - нет никаких shchetchik'ов, ломающих неокрепшие мозги
                Ответить
              • Я так люблю переключать раскладку
                Я так люблю переключать раскладку
                Я так люблю переключать раскладку
                Ответить
          • комментарии на русском - вот никому не нужная работа. Хоть finded и readed и режут глаза, уж лучше так, что коверкать русский англицизмами, без которых довольно сложно изъясняться.

            Правду не спрячешь - текст, относящийся к программированию, при прочих равных короче и яснее, если он на английском. Зато русский отлично подходит для поэзии.

            Да, не все коллеги поддерживают моё мнение по этому поводу, только самые опытные.
            Наш тимлид, кстати, фанат Source Inside, который не может в utf-8 (древняя версия у него).
            Ответить
            • Палка о двух концах. Если все великолепно понимают русский язык, то комментарии на русском вполне приемлемы. Главное, чтобы они несли смысл.

              > Хоть finded и readed и режут глаза, уж лучше так, что коверкать русский англицизмами
              Т. е. лучше коверкать английский язык? :) У всех разный уровень английского. Два человека могут прочитать одну и туже фразу и абсолютно по разному ее перевести. Пример, guy - для кого-то приятель, а для кого-то ...; busket - для кого-то корзина, а для кого-то хер пойми что.

              > Да, не все коллеги поддерживают моё мнение по этому поводу, только самые опытные.
              "только самые опытные" - типа, кто пишет на родном языке лошок? ;)
              Ответить
              • зачем нужны комменты? чтобы вдохнуть смысл в код, который по какой-то причине не сумел стать самодокументируемым и очевидным
                если у кого плохой уровень английского настолько, что не может выразить обезличенной фразой из 3-5 слов, что делает его непонятный код, то 1) он не сможет прочитать и понять ничего в инете, даже в msdn с его simple english, т.е. его уровень как программиста крайне низок, 2) код, который обязан быть самодокументированным, уже представляет собой адскую кашу из nom_tsikl и nomer_polubloka (и мне, блять, доводилось такое видеть!), что будет крайне мерзко
                какой вывод можно сделать? - либо человек ошибся с профессией, либо человеку есть куда и зачем прогрессировать, знание английского хотя бы на среднем уровне еще никому не вредило

                ! но кстати, есть же 1с
                Ответить
                • Скажу честно: мой английский достаточно ху..вый (читаю при этом достаточно хорошо), но когда, я вижу комментарии коллег, которые учили немецкий - у меня волосы встают дыбом. Лучше бы они по-русски писали.

                  Про то, что надо прогрессировать - соглашусь.
                  Ответить
              • Дак у нормального образованного человека должно ж быть нормально с английским. В принципе времена "я учил немецкий в школе" практически канули в лету, а знание другого языка, кроме родного - это большое преимущество не только в коммуникации, но и в собственном мышлении. Позволяет достигать другого уровня абстракции, полезно в частности для программиста, другими категориями мыслить позволяет.
                Ответить
                • простите, сколько Вам лет?
                  Ответить
                  • К чему это?
                    Ответить
                    • "я учил немецкий в школе" - у меня еще много таких знакомых. и в институте их немецкому учили.

                      Вот и не пойму: это возрастная особенность или нет?
                      Ответить
                      • Скажу больше. Я знаю людей, которые в аспирантуре на кандидатском сдавали немецкий.
                        Ответить
                      • Нет, не похоже. Не знаю, правда, как сейчас, но ещё 10 лет назад в школах точно так же предлагали один из 3-х иностранных языков. И хотя немецкий/французский выбрали всего 3 из 37, они всё-таки есть. :) Нас ещё можно считать свежим притоком, 24-26, так что нет, немецкий в школе не означает 40+.
                        Ответить
                        • Французский всё же редкость. Не в каждом учебном заведении есть преподаватель по нему.
                          Ответить
                          • у нас в институте сделали проще - english only, no thinking required
                            если кто учил раньше немецкий, монгольский или финский, те ходили в "начинающие" группы по английскому, кто был более уверен в своих силах - в "продолжающие"

                            экзамен (он же шёл в госы, насколько я помню), также отличался сложностью для разных выбранных уровней
                            Ответить
                            • И это, я считаю, правильно. Не следует тешить людей надеждой, что немецкий чем-то поможет им в профессии. Я ничего не имею против немецкого и даже давно хочу начать его учить, но факт есть факт.
                              Ответить
                              • на самом деле знаю многих людей наших выпускников, которые в германиях/швейцариях сейчас или раньше работали, или лыжи туда готовят

                                хотя в том же церн'е да, английский основной рабочий
                                Ответить
                                • Насколько я знаю, не все программисты, переехавшие к развалинам третьего рейха, знают язык. Особенно, если в магазин ходит жена.
                                  Ответить
                            • У нас была аналогичная херня. Вроде как кто-то читерствовал и шёл в группу уровнем ниже, сославшись на немецкий.
                              Ответить
                              • да не читерство, никого не парило какой язык ты изучал - уверен что ~intermediate - записывай себя в продолжающие, не уверен - в начинающие

                                группа в ~25-30 человек (1-2 курс же еще) всё равно делится пополам
                                если большинство, например, запишут себя в начинающие, то занятия в обеих будут проводиться по программе начинающих, преподам в целом всё равно как раз в неделю проводить занятия

                                вроде бы для особо желающих факультативно кафедра английского проводила "углубленные" (читай, полезные) занятия - не помню, бесплатно или нет - но я туда почему-то не ходил, на первых 2 курсах хватало физики с матаном, чтобы ебануться
                                Ответить
          • Ну, может быть, мне сложно судить, поскольку в нашей компании из 70 человек английский хуже intermediate только у буха, которую 1с привязало к русскому... Двойным переводом страдаю только я иногда, если попадается что-то вроде того же китайского, и с очень абстрактного английского надо для коллег перевести на обычный английский (7 языков позволяют найти аналогии и догадаться о настоящем смысле)...
            Ответить
    • @author отец Григорий

      Аминь.
      Ответить

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