1. Куча / Говнокод #12214

    +130

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    perft :: Int -> Position -> Int
    perft depth pos 
    	| depth <= 0 = 1
    	| otherwise  = sum . map (perft $ depth - 1) $ legalPositions where
    		legalPositions = filter isLegalPosition nextpositions
    		nextpositions = map (\move -> makeMove move pos) $ (moves pos)

    Запостил: Fai, 28 Ноября 2012

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

    • Никто не знает, почему на говнокоде табы шириной в 8 пробелов?
      Ответить
      • показать все, что скрыто[КО]Потому что так сделал Страйкер.[/КО]
        Это говнокод, детка.
        Ответить
      • А сколько тебе нужно?
        Ответить
        • Круче всего было бы введение настроек форматирования с полем ширина табуляции (в пробелах).

          И при отправке говнокода, табы бы конвертировались в нужное число пробелов.
          Ответить
          • Лучше самому всегда использовать пробелы для форматирования кода. Особенно для Haskell.
            Ответить
            • а почему для хаскель? никаких проблем с хаскелем и табами не замечал.
              Ответить
              • Классическая проблема с табами - у кого-то в редакторе таб настроен на 8, у кого-то на 4, у кого-то вообще в перемешку - полутабы в виде пробелов, а полные, на 8 символов, в виде табов...

                В разношерстной команде работать с табами ужасно - для своих проектов одни настройки, для участия в других - приходится менять. Мне вот приходилось переключать редактор на табы, чтобы коммитить в код Fai.

                А хаскель, как и питон, привередлив к смешиванию пробелов и табов. И может тупо выдать синтаксическую ошибку.
                Ответить
                • Используй только табы без смешения и никаких проблем не будет
                  Ответить
                  • Я использую пробелы без смешения. Они всегда отображаются именно так, как я их написал. А экономить байты на табах в исходнике считаю нецелесообразным.
                    Ответить
                    • Мне нравится, что в зависимости от ситуации, могу выставить длину таба в нужное число пробелов, в том числе и в то число, в котором видит код автор. Только вот мне не нужно видение кода, как у автора, а мне нужно так, как мне удобно. Единственное требование к коду - автор кода все строки обязан начинать с табов безоговорочно, не вставляя пробелы после табов перед кодом. Ну а иначе автор кода просто не может в командную работу.
                      Ответить
                      • Зачем создавать сложности на пустом месте? Гораздо проще, если во всех редакторах, на консоли и в вебе твой код отображается одинаково независимо от настроек.
                        Жаль, что многие редакторы до сих пор используют по умолчанию табы.
                        Ответить
                        • > и в вебе
                          Так мне еще и // <br> в конце каждой строки писать?
                          Ответить
                        • С табами удобнее - не надо несколько раз жать. Конечно, для командной работы это может иметь значение, но вообще задумываться о том, что когда-нибудь кто-нибудь будет смотреть мой код, еще и поставив нестандартные настройки... в большинстве случаев имхо перестраховка.

                          Идеальный вариант - только если редактор может прозрачно обрабатывать пробелы, как будто это табы. Главное. чтобы не только при вставке, но и при перемещении курсора.
                          Ответить
                          • У меня как раз так. Но мне кажется, что чего-то не хватает.
                            Ответить
                          • > не надо несколько раз жать
                            на что жать? мой emacs сразу ставит правильный отступ.

                            > когда-нибудь кто-нибудь будет смотреть мой код
                            я, например, очень часто изучаю код, выложенный на гитхабе. Да и собственные сорцы часто изучаю в gitweb.
                            Ответить
                          • > Идеальный вариант - только если редактор может прозрачно обрабатывать пробелы, как будто это табы.
                            Все редакторы так умеют. Ну кроме ноутпэда разве что.

                            > С табами удобнее - не надо несколько раз жать.
                            Я жму таб, втыкаются 4 пробела. ЧЯНТД? vim, notepad++, mcedit, qtcreator, eclipse, везде с этим норм.

                            P.S. Да, бекспейс в большинстве редакторов делает отмену indent'а, поэтому курсор и влево прыгает на 4/8/сколько нужно пробелов.
                            Ответить
                            • >Да, бекспейс в большинстве редакторов делает отмену indent'а
                              VS2008 что-то такого не делает, если в тексте пробелы... В общем, если буду пользоваться чем-нибудь другим, настрою на пробелы.
                              Ответить
                              • > VS2008 что-то такого не делает, если в тексте пробелы
                                В клипсе тоже стирает по одному пробелу. Это жопа, но там работает shift-tab, в визуалке, емнип, тоже.
                                В креаторе в настройках ставится поведение бекспейса - отмена отступа.
                                В mcedit по дефолту пашет, если переключиться на пробелы.
                                В vim работает, на сколько помню на это влияет shiftwidth.
                                Ответить
                              • IDE для слабаков.

                                vim+gcc+gprof+gdb (+tmux)
                                Ответить
                                • valgrind еще. Отличный детектор НЁХ.
                                  Ответить
                                • UPD: И да, ты забыл про make или его аналоги. Без них неудобно собирать.
                                  Ответить
                                  • > забыл про make или его аналоги
                                    >> +tmux

                                    Мне, кстати, понравился gyp
                                    Ответить
                                    • Дык tmux это многооконный терминал? Как он заменит мейк?

                                      > gyp
                                      Почитаю, на первый взгляд синтаксис выглядит неплохо.
                                      Ответить
                                      • > Дык tmux это многооконный терминал?
                                        Да, проклятый недосып... Попутал с tup, упомянутым Fai в другом треде
                                        http://govnokod.ru/12071#comment159448
                                        Ответить
                                      • Документации, правда, маловато (по сравнению с cmake). Ещё немного напрягает привязка к chromium (содержит хаки, специфичные для структуры проекта chromium), из-за чего без параметра --depth=. выдаёт таинственные сообщения об ошибках.
                                        Но спецификация проекта gyp мне нравится гораздо больше, чем мутноватый императивный язык cmake.
                                        Ответить
                                  • >UPD: И да, ты забыл про make или его аналоги.
                                    cmake же
                                    Ответить
                                  • Как можно забыть про make? Make - душа собирательства и компиляторства.

                                    И кстати, есть tup, который круче в сотню раз. И Роман его уже упомянул, сославшись на мое раннее упоминание.
                                    Ответить
                              • M-^ - удаляет выравнивание (но делает черз чур много, удаляет так же и обрыв строки, подбирая строчку вслед за предыдущей, но есть бонус: можно использовать в любом месте строки, не обязательно чтобы каретка была перед кодом).
                                M-/ - удаляет пробелы, все что есть, и справа и слева, но курсор должен быть внутри этих пробелов.
                                TAB выравнивает в соответствии с настройками режима редактирования (т.е. может и добавить и убрать пробелов, смотря какой исходный текст был). Работает в любом месте строки, не обязательно перед кодом.
                                M-C-q - как TAB, только для отдельного выражения.
                                M-q C-q - специфицчно для SLIME, форматирует описание функции.
                                M-x TAB - добавляет единицу табуляции в произвольном месте.
                                C-j - перевод каретки с выравниаванием.
                                M-C-j - перевод каретки с выравниванием комментариев (добавит разделитель комментариев после перехода на новую строку).
                                M-C-\ - форматирование выделенного участка кода.

                                M-m - переход к концу отступа (началу кода), не меняет размер отступа, но удобно в комбинации с M-/ или M-BACKSPACE.

                                Большинство символов, которые могут повлиять на расстановку пробелов (т.н. электрические символы) тоже могут добавить или убрать пробелы.

                                Ну и для тех, кому показалось мало:
                                (defun delete-all-indentation (begin end)
                                  (interactive "r")
                                  (let ((region
                                         (split-string
                                          (buffer-substring-no-properties begin end) "\n")))
                                    (kill-region begin end)
                                    (insert
                                     (mapconcat
                                      #'identity
                                      (mapcar
                                       #'(lambda (x)
                                           (let ((a 0) (b (length x)) c)
                                             (catch 't
                                               (while (< a b)
                                                 (setq c (aref x a))
                                                 (unless (find c '(?\ ?\t))
                                                   (throw 't (subseq x a)))
                                                 (incf a)) "")))
                                       region) "\n"))))
                                
                                (global-set-key (kbd "M-C-^") 'delete-all-indentation)
                                Ответить
                                • Мне ещё показалась полезной вот эта статья
                                  https://sites.google.com/site/steveyegge2/effective-emacs
                                  Ответить
                                  • Про бекспейс очень там правильно написано, прямо тут же взял и переделал. Как-то в голову не приходило, и особенно потому, что у меня бекспейс квадратный (маленький), раз из 5 попадаю в инсерт вместо него. Про Алт+Х - не знаю... мне Алт+Х удобнее Контрол+Х.
                                    Ответить
                                  • Заодно обнаружил интерсную штуку, про которую раньше не знал:
                                    C-M-k дальше, переходим к следующему выражению, которе нужно подобрать, C-M-w C-M-k и оно объединяется в буффере с предудущим скопированным.
                                    Ответить
                • > у кого-то в редакторе таб настроен на 8, у кого-то на 4

                  Так это же хорошо. Кому-то больше нравится видеть код с большими отступами, кому-то - с маленькими и в таком случае у всех будет отображаться таб любимого размера.

                  > Мне вот приходилось переключать редактор на табы, чтобы коммитить в код Fai.

                  Уже исправил.
                  Ответить
                  • > Кому-то больше нравится видеть код с большими отступами
                    А мне вот нравится видеть код так, как его видит автор. Особенно если приходится его править. Ведь нарушение стиля изначального автора - не есть гуд.
                    Ответить
                    • Хм. Тоже аргумент. Ну я в любом случае, уже перешел на пробелы.
                      Ответить
                • Тарасоформатирование спасёт отца русской демократии.
                  Осталось подождать, когда все редакторы смогут его поддерживать.
                  Ответить
                  • > Тарасоформатирование
                    Джва пробела?
                    Ответить
                    • Не. Примерно такая херь:
                      (
                      	3==Tuple.triple ( 1,2 ,null	)	.size ()
                      ,	2==Tuple.pair   ( 1,2		)	.size ()
                      ,	3==Tuple.triple ( null,null,null)	.size ()
                      ,	2==Tuple.pair	( null,null	)	.size ()
                      )

                      Прим: запятые - мои.
                      Ответить
                    • Кстати современные редакторы уже умеют объявления. Вот, например я себе настроил:
                      int[]	myArray		= { 1, 2, 3, 4, 5, 6 };
                      int	theInt		= 1;
                      String	someString	= "Hello";
                      double	aDouble		= 3.0;

                      Но знаки препинания (запятые, точки с запятой) по-прежнему не по-тарасовски.
                      Ответить
                      • Знаки препинания наверное и не надо выносить в линию.
                        Ответить
                        • Надо-надо. Что за антитарасовская ересь?
                          Форматироваться должно всё, чтобы сразу видеть проебанную запятую, например.
                          Ответить
                          • Ну просто вынесенные вбок запятые это пиздец как некрасиво, а выровненные типы и идентификаторы - красиво.
                            Ответить
                      • M-x align
                        Ответить
                        • Столлман детектед.
                          Ответить
                        • Кстати, можно и не через добавление пробелов, а через свойства текста, задать ширину символа в зависимости от контекста, но только очень много мороки, что-то типа
                          (put-text-property start (1+ start) 'display how-many-spaces)
                          . Но это нужно энтузиазм Тараса, чтобы всерьез занятся написанием такой штуки.
                          Ответить
            • Уже перенастроил sublime text для генерации четырех пробелов при нажании таба.
              Ответить
              • А два таба генерят 8 пробелов или один таб?
                Ответить
                • Сейчас проверю. 8 пробелов.

                  Попытался забить символ '\t' на shift+tab, а он гад все-равно пробелами вставляет.
                  Ответить
    • показать все, что скрытоОП - хуй!
      Ответить
    • показать все, что скрыто:-P
      Ответить
    • показать все, что скрытоПривет тупые питушки.
      Ответить

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