Для пытливых разработчиков до сих пор остается актуальным вопрос использования табуляции и пробелов для форматирования кода. Могут ли они быть взаимозаменяемы: например, 2 пробела на табуляцию или 4? Но единого стандарта нет, поэтому иногда между разработчиками возникает непонимание. Кроме того, различные IDE и их компиляторы обрабатывают табуляцию также по-своему.

Решением вопроса обычно становится соглашение о правилах форматирования в рамках проекта или языка программирования в целом.

Команда разработчиков из Google исследовала проекты в репозитории Github. Они проанализировали код, написанный на 14 языках программирования. Целью исследования было выявить соотношение табуляций и пробелов — то есть, наиболее популярный способ форматирования текста для каждого из языков.

Реализация


Для анализа использовалась уже существующая таблица [bigquery-public-data:github_repos.sample_files], в которую записаны наименования репозиториев Github.

Напомним, что около двух месяцев назад весь открытый код Github стал доступен в форме таблиц BigQuery.

Однако для анализа были выбраны не все репозитории, а только верхние 400 тысяч репозиториев с наибольшим числом звёзд, которые они получили за период с января по май 2016 года.



Из этой таблицы были выделены файлы, содержащие код на 14 самых популярных языках программирования. Для этого в качестве параметров sql-запроса были указаны расширения соответствующих файлов – .java, .h, .js, .c, .php, .html, .cs, .json, .py, .cpp, .xml, .rb, .cc, .go.

SELECT a.id id, size, content, binary, copies, sample_repo_name , sample_path
FROM (
  SELECT id, FIRST(path) sample_path, FIRST(repo_name) sample_repo_name 
  FROM [bigquery-public-data:github_repos.sample_files] 
  WHERE REGEXP_EXTRACT(path, r'\.([^\.]*)$') IN ('java','h','js','c','php','html','cs','json','py','cpp','xml','rb','cc','go')
  GROUP BY id
) a
JOIN [bigquery-public-data:github_repos.contents] b
ON a.id = b.id

864.6s elapsed, 1.60 TB processed

Запрос выполнялся довольно долго. И это неудивительно, так как было необходимо выполнить операцию объединения (join) таблицы из 190 миллионов строк с таблицей в 70 миллионов строк. Всего было обработано 1,6 ТБ данных. Результаты запроса доступны по этому адресу.

В таблице [contents] записаны файлы без своих дубликатов. Ниже указано общее количество уникальных файлов и их суммарный размер. Дубликаты файлов не учитывались в ходе анализа.



После этого оставалось только сформировать и запустить на выполнение финальный запрос.

SELECT ext, tabs, spaces, countext, LOG((spaces+1)/(tabs+1)) lratio
FROM (
  SELECT REGEXP_EXTRACT(sample_path, r'\.([^\.]*)$') ext, 
         SUM(best='tab') tabs, SUM(best='space') spaces, 
         COUNT(*) countext
  FROM (
    SELECT sample_path, sample_repo_name, IF(SUM(line=' ')>SUM(line='\t'), 'space', 'tab') WITHIN RECORD best,
           COUNT(line) WITHIN RECORD c
    FROM (
      SELECT LEFT(SPLIT(content, '\n'), 1) line, sample_path, sample_repo_name 
      FROM [fh-bigquery:github_extracts.contents_top_repos_top_langs]
      HAVING REGEXP_MATCH(line, r'[ \t]')
    )
    HAVING c>10 # at least 10 lines that start with space or tab
  )
  GROUP BY ext
)
ORDER BY countext DESC
LIMIT 100

16.0s elapsed, 133 GB processed

Анализ каждой из строк 133 Гб кода занял 16 секунд. Добиться такой скорости помог все тот же BigQuery.


Чаще всего табуляция встречается в языке С, а пробелы — в Java.

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

Некоторое время назад эта проблема была обыграна в сериале «Кремниевая долина». Парень и девушка не сошлись в вопросе форматирования. В результате старый холивар не только привел к недопониманию в профессиональном плане, но и создал проблемы в их личных отношениях.

Табы или пробелы?

Проголосовало 2397 человек. Воздержалось 343 человека.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться с друзьями
-->

Комментарии (242)


  1. DrPass
    01.09.2016 09:27
    +46

    Я всегда делаю отступы табами, но перед этим включаю в IDE опцию «заменять табы на пробелы».


    1. Antelle
      01.09.2016 09:32
      +63

      Нескромный вопрос: вы думали, что остальные нажимают пробел 2 или 4 раза?


      1. DrPass
        01.09.2016 09:38
        +61

        Более того, я не раз видел ЭТО.


        1. CarambaPirat
          01.09.2016 12:25
          -7

          Я один из тех, кто иногда клацает несколько раз пробел. Иногда мне это кажется проще, чем выровнять табом.


          1. taliban
            03.09.2016 14:00

            Вас не смущает что все нажимают один раз таб, и вместо таба подставляется 2/4 пробела? А вы клацаете 2/4 раза пробел.


            1. CarambaPirat
              03.09.2016 19:43

              Абсолютно не смущает. Я написал — иногда клацаю пробелы. И это иногда не такая уж редкая ситуация, как может показаться.
              Использую почти всегда IDE. тектовые файлы только для скриптов.
              В проектах стараюсь использовать только пробелы. Отбивку делаю естественно клавишей TAB. Разные языки, проекты и редакторы имеют разное количество пробелов в оступе между блоками и я не собираюсь следить за этим. ТАБ делает за меня эту работу.
              Тем не менее в большинстве редакторов попробуйте кодить с копипастой. Если вы всегда попадаете в нужную разметку — вы бог. Если у вас IDE сама выравнивает — божественная IDE. У меня же всё низменно и просто. Либо я не попадаю в разметку и мой текст куда-то убежал, либо IDE косячит разметку, которую я хочу видеть. Речь идёт в частности о вторых, третьих параметрах, когда идет вызов одинаковой/ых функций, заполнении текстур и т.д.
              И вот тогда я использую божественный пробел, который приводит мою разметку к удобному, читаемому виду, а не пытаюсь угадать где же мне поставить пару табов и потом еще пару backspace-ов.

              А с точки зрения структурирования вообще — я сторонних пробелов. Именно из-за ужасно неопределённого поведения ТАБов. Бывало что текст начинался с половины страницы.
              Хорошие IDE сами конвертнут тебе табы в пробелы, переформатируют перед открытием и сохранением и т.д.
              И тем не менее пробелами можно добить 3 нужных раза, можно добить на глазок, когда не сразу видно сколько там табов и т.п.


      1. MonkAlex
        01.09.2016 10:22
        -26

        Нажимаю пробел два раза и не вижу проблемы.
        Пробел — под большим пальцем, кликнуть два раза — не проблема.
        Таб — не интуитивен и не глядя сложно попасть, особенно без привычки.


        1. MonkAlex
          01.09.2016 11:22

          Взяли и заминусовали, но никто так и не пояснил, как это редкоиспользуемая клавиша может быть удобнее частоиспользуемой.

          Я же не пишу, что НАДО использовать пробелы или что НЕЛЬЗЯ использовать таб. Я просто не понимаю, зачем использовать таб, когда быстрее отбить пару пробелов.


          1. creker
            01.09.2016 11:27
            +7

            Проблема в том, что из-за некоторых личностей пробелы отбивать приходится чаще раза 4, поэтому табы куда удобнее. Пару тройку вложенностей пробелами отбивать по 4 раза — увольте. А еще удобнее использовать нормальный редактор.


            1. MonkAlex
              01.09.2016 11:37
              +1

              Как раз таки не люблю подгонять привычки под редактор.
              Это примерно так же вредно, как пытаться кнопкой «Break» поменять раскладку введенного текста, привыкнув к пунто-свитчеру. (Мне так комп вырубают, попадая на power, отличная работа.)

              Лучше я буду руками вбивать текст одинаково, чтобы работала мышечная память, а не пытаться каждый раз сообразить, а в том ли я редакторе, где таб развернётся в пробелы.

              ПС: не всегда же приходится писать в IDE, а ещё — не всегда в своей IDE, где всё настроено под вас.


              1. faiwer
                01.09.2016 12:29
                +3

                А востребована ли у вас кнопка power? Может её того? В студенческие годы я умудрялся несколько раз подряд перегружать университетский ПК, нажимая её вместо PrintScreen. Несколько досаждало.


                1. MonkAlex
                  01.09.2016 12:55
                  -1

                  Сам не промахиваюсь, так что кнопку «чинить» так или иначе — лень.


                1. sentyaev
                  02.09.2016 02:58
                  +1

                  У не помню была ли у меня кнопка power, но помню что вырывал с клавиатур кнопку sleep.


                  1. taliban
                    03.09.2016 14:06
                    +2

                    У меня для вас плохие новости:
                    http://image.prntscr.com/image/2dbfeba36ee94d89a31d556e39140fa8.png


                    1. sentyaev
                      03.09.2016 15:20

                      Видимо я был слишком ленив, чтобы разобраться в настройках)))


              1. mmman
                01.09.2016 17:02
                +5

                А что это за кейс, когда приходится регулярно работать в разных чужих IDE? У нас вот по опыту наоборот разработчики годами работают в любимой IDE и синхронизируют конфиг с домашней версией. Это повышает производительность, для того оно и придумано.


                1. MonkAlex
                  01.09.2016 20:05

                  Парное программирование, подойти помочь новичку, найти на машине другого разработчика кусок кода и поправить багу.
                  Кейсов хватает. Я не ношу с собой нетбук, чтобы править как мне удобно, я просто привык к тем форматам, которые работают не зависимо от того, кто за ПК.


                  1. mmman
                    01.09.2016 21:57

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


              1. andriyan0v
                05.09.2016 14:38

                Это как хоткей ctrl+alt+L в IDEA, который на убунте блокирует комп.


          1. faiwer
            01.09.2016 12:26
            +3

            Tab отлично лежит под мизинцем левой руки. К тому же те самые пробелы, которые вы отбиваете space-ом, большинство отбивает всё тем же Tab-ом. Хотя по правде говоря для меня и Ё отбивать не составляет труда. Мизинец не так уж и короток.


            1. skyline405
              05.09.2016 14:37

              Солидарен. Для меня удобнее использовать Tab, а нажимаю его безымянным пальцем.

              Пользоваться Tab'ом или отбивать все пробелами, дело привычки каждого, но порой (опять же лично мне) не совсем удобно работать с кодом отбитым пробелами.


              1. MaximAL
                06.09.2016 13:26

                Владимир Шахиджанян („Соло на клавиатуре“) сейчас негодует. Мизинцем же надо!


                1. Pinsky
                  06.09.2016 15:05

                  а за то, что я контрол нажимаю ладонью, а не пальцем вообще?)


                  1. MaximAL
                    06.09.2016 15:09
                    +2

                    Вы очень опасный человек.


          1. MacIn
            01.09.2016 17:42
            +6

            Да не быстрее. Один отступ — ладно, а лесенку на 4-5 отступов тоже дятлом стучать? Табуляция применяется нередко, например при переключении приложений, при переходе по вкладкам IDE и в браузере, при сдвиге влево/вправо блока кода, а не строки.


            1. MonkAlex
              01.09.2016 20:06

              А такие лесенки я никогда не был вынужден писать, вот уж извините. Не знаю, зачем это может потребоваться.


              1. MacIn
                01.09.2016 22:16

                Тело метода — раз, два вложенных цила и 1 if — еще 3. Это примитивная маленькая функция.


                1. kloppspb
                  02.09.2016 00:41

                  Вот здесь, например, в первом же пункте объясняется «малоотступовый» подход: https://habrahabr.ru/post/206802/

                  Впрочем, с Java я дел особо не имею, может там так и правильней. А вот в C и Perl 4 уровня — обычное дело. Впрочем, сам я расстановкий их и не занимаюсь, ибо есть 1) при нажатии на Enter в 90% случаев IDE сама проставит нужный уровень и 2) после написания блока кода автопилотом жмётся кнопка, на которой висят «perltidy -pbp» и один раз настроенный astyle для C/C++/Java :)


        1. spxnezzar
          01.09.2016 17:01
          +5

          Если вы только кодите, то беспорно для вас Таб очень непопулярная клавиша. Я, же, «тракторист» старой закалки и еще в 90-х получил привычку безошибочно бить мизинцем в таб, при смене панелей в разных нортон/волков- командерах, а позже, с появлением табкомплитишина в линуксе я постоянно добиваю пути и команды именно табом.
          Имхо, влияет на использование таба или пробела разница поколений и точка в хода в индустрию.


          1. MonkAlex
            01.09.2016 20:07

            В командерах \ фаре табом пользуюсь. в IDE — как то не надо. Возможно и удобный вариант, надо проверять. Или не проверять, чтобы не ломать привычки.


      1. AndreyRubankov
        01.09.2016 10:49
        +2

        Эти люди не хотят по-другому, они не используют все преимущества, которые им предоставляют всевозможные тулы. Есть исключения (нету редактора), но это редкость.

        зы: я уже и забыл, когда сам делал отступы в коде.


      1. Pentoxide
        01.09.2016 10:56

        Я так делаю, 2 пробела =)
        Меня оправдывает то, что я не кодер, а админ, кода мало и пишу я его в основном через ssh в vim или mcedit.


      1. webkumo
        01.09.2016 13:32
        +4

        Скромный вопрос: а в современных IDE всё ещё приходится выравнивать код вручную?
        Что-то я привык к автоматическому выравниваю…


        1. AndreyRubankov
          01.09.2016 14:20
          +1

          Выравнивать умеют и блокноты, и даже редакторы в браузерах.


    1. RomanArzumanyan
      01.09.2016 10:31
      +1

      Интересно, почему *.c и *.h считали отдельно.


      1. kray74
        01.09.2016 12:26

        *.h не только в C, но и в C++ используется.


      1. arandomic
        01.09.2016 12:26

        *.h не известно куда добавить — к *.c или *.cpp


        1. RomanArzumanyan
          01.09.2016 12:37

          Если анализировались проекты целиком, то можно, в принципе, отследить. Просто получаются в некотором роде взаимоисключающие параграфы — в *.c лидируют с хорошим отрывом табы, а в *.h пробелы.


          1. Tujh
            01.09.2016 13:23

            Есть много проектов, где выйдет мешанина. Например сам проект на С++, но использует legasy «С» библиотеки, ну например OpenSSL и аналоги.


          1. tmk826
            02.09.2016 09:26

            Статистика С «испачкана» ядром линукса, где используются табы.


            1. RomanArzumanyan
              02.09.2016 14:17
              +1

              Я бы сказал, напротив — ядро линукса один из важнейших проектов на С, который помимо прочего показывает, что табы ещё живы.


              1. tmk826
                02.09.2016 15:49

                Но это один проект. А статистика велась по фийлам. Ну и конечно-же — табы живы!

                Самое страшное это проекты где есть и табы, и пробелы!


    1. GavriKos
      01.09.2016 12:03
      +2

      ИМХО в современных IDE делать отступы вручную — надо КРАЙНЕ редко. Code Format делает все сам прелестно.


  1. Akdmeh
    01.09.2016 09:41
    +1

    Я из «пробельщиков», но задумался вот над чем: так весь вопрос только в том, что табы в разных IDE занимают разное пространство?
    И из-за этого были написаны десятки статей на хабре?


    1. Ivan22
      01.09.2016 10:16
      +7

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


      1. taliban
        03.09.2016 14:15

        Одинаковое для кого? Для вас? А если я люблю отступ в 8 пробелов, зачем меня ограничивать потому что вам нравится 4? Все табы настраиваются везде, каждый кто будет смотреть увидит код так как он любит, а не так как любит автор кода. Пробелы — эгоизм.


  1. kefirfromperm
    01.09.2016 09:43
    +18

    Я думал что холиво давно закрыт и все используют пробелы.


    1. silvansky
      01.09.2016 10:53
      +47

      А я думал, что похоливарили и перешли на табы. ;)


    1. Per_Ardua
      01.09.2016 11:06
      +3

      Я думал что холиво давно закрыт и все используют табы.


    1. dipsy
      01.09.2016 12:25
      +2

      Большинство не может ошибаться, я тоже за пробелы, ставьте везде пробелы, больше пробелов!
      Хотя сам конечно же использую табы, и шрифт не моноширинный ещё, ну чтобы работу себе усложнить, не делайте так никогда.


    1. vmspike
      01.09.2016 19:52
      +1

      Как было верно замечено в статье, для разных языков и проектов удобнее либо то, либо другое.

      Например, если брать bash, который с некоторым натягом таки можно считать языком программирования, то для него наиболее естественно использовать табы, ибо только ими можно делать отступы для here-docs.
      В питоне отступы в виде четырёх пробелов прописаны в PEP, поэтому табовые бунтари в меньшинстве.
      У go, похоже, самое сплочённое сообщество в смысле статьи.


  1. pengyou
    01.09.2016 10:05
    +11

    Интересный пример того, как набор сомнительных доводов и агрессивная автозамена табов на пробелы привела к победе одной из сторон. То есть это такой вообще не научный способ решения проблемы методом «ой всё» от разработчиков основных инструментов. А теперь вместо одного символа на очередной уровень отступа там этих символов несколько.

    Похожая беда с автозаменой переводов строк. И с финальным переводом строки. Просто диктатура людей на местах, чем управляем, тем и давим несогласных — борьба мемов влияет на реальность, чисто по Докинзу.


    1. DrPass
      01.09.2016 11:04
      +12

      Надо дальше развивать эту мысль, лишние символы требуют больше места на дисках, т.е. требуется больше дисков, а значит, и больше электроэнергии. Плюс, производство дисков, плюс их утилизация, плюс добыча и сжигание углеводородов. Сделать расчёт, обоснование, отправить это в Гринпис, и начать всемирную войну с пробелами.


      1. jaxel
        05.09.2016 14:37

        Можно развивать ещё дальше. Требуется больше дисков, больше электроэнергии, утилизация, добыча и сжигание углеводородов. Да это же всемирный заговор корпораций!


    1. MacIn
      01.09.2016 17:45
      +1

      А теперь вместо одного символа на очередной уровень отступа там этих символов несколько.

      Я понимаю, когда при диске в 5 мегабайт писали архиваторы, чтобы сжимать пустое место и ключевые слова в исходниках. Но сегодня считать доводом «тут 2-4-8 символов, а не 1»?


      1. pengyou
        01.09.2016 18:12
        -1

        Это один из многих аспектов осмысленности действий погромиста. Отступ ставится кнопкой Tab, превращается в пробелы, которые приходится удалять по одному, ходить по ним курсором, а если копипастишь и зацепил выделением лишний пробел, сразу всё ломается. Куча лишних действий. Для чего? Для кого?


        1. MacIn
          01.09.2016 18:58
          +3

          которые приходится удалять по одному, ходить по ним курсором, а если копипастишь и зацепил выделением лишний пробел

          Да нет, все от IDE зависит. У меня клавиши «влево»-«вправо» по отступам переходят, при том, что они — пробелы. Удаляется все опять же комбинацией клавиш «убрать отступ», встроенной в IDE. При копировании, выделении, сразу целиком отступ копируется.


    1. snuk182
      01.09.2016 18:43
      +5

      Очень субъективное наблюдение об обоих сторонах конфликта.
      1. Если человеку удобно нажимать на Таб, но гайдлайны проекта не позволяют табы-символы, человек ставит настройку «заменить таб на пробелы» — все счастливы и довольны. «Человек-таб» понимает ситуацию и принимает ее с компромиссом в виде настройки.
      2. Если человек принципиально пользуется пробелом, но гайдлайны требуют табы (да, такое бывает) — человек будет брюзжать, дуться и топать, требуя смены гайдлайнов, ни о каком компромиссе или настройках речь даже не идет (повторюсь, все очень субъективно, может мне просто не повезло, и понимающие ситуацию «люди-пробелы» мне просто не попадались). Косвенно это глобальное явление подтверждается тем, что чаще всего опции в IDE «превращать пробелы в табы» просто не бывает — «люди-пробелы» в принципе не рассматривают возможность инакомыслия.


      1. cold147
        01.09.2016 19:44

        заменить таб на пробелы» — все счастливы и довольны

        Не совсем, проблема в том что "человек-таб" хочет отступы в 2 пробела, но по гайдлайам должень использовать 4.


      1. pengyou
        01.09.2016 20:50

        Очень напомнило вот этот лонгрид https://ru.insider.pro/opinion/2016-08-16/kak-rabotaet-diktatura-menshinstva/


    1. TheShock
      02.09.2016 03:54
      +5

      набор сомнительных доводов и агрессивная автозамена табов на пробелы привела к победе одной из сторон.


      Ага. А еще такие ложные статьи с ошибочной статистикой, как эта.

      Никакой победы нету. Статья имеет ошибку в алгоритме и отсюда ложные выводы.
      «at least 10 lines, that start with space» — нельзя считать по одному пробелу. В пример Гибернейт из Джавы.

      https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/Filter.java
      /*
       * Hibernate, Relational Persistence for Idiomatic Java
       *
       * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
       * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
       */
      package org.hibernate;
      import java.util.Collection;
      
      import org.hibernate.engine.spi.FilterDefinition;
      
      /**
       * Type definition of Filter.  Filter defines the user's view into enabled dynamic filters,
       * allowing them to set filter parameter values.
       *
       * @author Steve Ebersole
       */
      public interface Filter {
      
      	/**
      	 * Get the name of this filter.
      	 *
      	 * @return This filter's name.
      	 */
      	public String getName();
      
      


      А ведь вся джава начинается с таких заголовков. И они ложно засчитывают пункт в сторону пробела, хотя реально в файле используется табуляция.


  1. OPCSenator
    01.09.2016 10:07
    +7

    Я думал что холиво давно закрыт и все используют табы.


    1. shishmakov
      01.09.2016 12:26
      +2

      А я думал, что это тема обсуждения интересна только в Python.


  1. Ivan22
    01.09.2016 10:17
    +17

    Адепты языка GO явно что-то знают!


    1. TreyLav
      01.09.2016 12:19
      +3

      Не хочу выступать К.О., но это потому что у них с этим строго.


    1. justmara
      01.09.2016 12:20

      это гугл знает за них


      зы: не успел :(


    1. AndreyRubankov
      01.09.2016 17:52

      У них в синтаксисе короткие слова, которые с табами в 4 символа хорошо сочетаются (ну и форматер стандартный, но как видно по гитхабу, не все его используют).

      func f() {
          var a = 5,
              b = 5;
      }
      


      1. lifemob
        05.09.2016 14:37

        По-хорошему, в документации к gofmt табы по 8 символов, но не всем и не всегда бывает так удобно.


    1. ihouser
      05.09.2016 14:37

      Теперь и я знаю зачем мне нужен GO


  1. shytikov
    01.09.2016 10:17
    +4

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


  1. impwx
    01.09.2016 10:18
    +12

    Нужно было еще посчитать количество файлов, где используются и табы, и пробелы вместе.


    1. Einherjar
      01.09.2016 10:51
      +6

      А заодно вычислить авторов такого кода и принудительно переселить куда-нибудь на марс.


      1. snuk182
        01.09.2016 18:48

        Обычно решаемо прикруткой конвертера отступов к системе контроля версий. Заодно дисциплинирует не приносить код откуда попало.


    1. poxu
      01.09.2016 11:02
      +3

      Отступы табами, всё, кроме отступов пробелами.


    1. faiwer
      01.09.2016 11:09

      И не забыть вычесть из этого числа smart-tabs


    1. quantum
      01.09.2016 13:06
      +2

      Вообще-то с табами обязательно нужно использовать пробелы. Например в некоторых конструкциях люди, использующие табы часто делают так:
      [tb]var a=1,
      [tb][tb]b=2;


      При настроенном табе в 2 или 8 символов (а это ведь один из основных доводов) получается такая каша:
      ..var a=1,
      ....b=2;

      или
      ........var a=1,
      ................b=2;
      .

      Поэтому нужно использовать пробелы с табами:
      [tb]var a=1,
      [tb]....b=2;


      Если использовать только пробелы, то проблем тоже не будет


      1. impwx
        01.09.2016 13:35

        Посимвольное выравнивание с табами плохо совместимо.


      1. AndreyRubankov
        01.09.2016 14:27

        > При настроенном табе в 2 или 8 символов (а это ведь один из основных доводов) получается такая каша

        Смотря какой тул использовать. Если использовать качественный — то все будет нормально выравниваться, если в простом блокноте работать — да, будет не удобно.


        1. faiwer
          01.09.2016 14:36

          Вне зависимости от редактора так делать не стоит. Вот вам пример.



          1. AndreyRubankov
            01.09.2016 17:46

            Возможно мы друг друга не поняли. Я подразумевал настройку замены пробелами при нажатии на клавишу табуляции. При нажатии на клавишу вставляется на 1 символ табуляции, а 2-4-8 пробелов, в зависимости от того, где сейчас стоит каретка (Таб по своей семантике может занимать место в N знаков).

            Но в указанном примере есть проблема: в настройках стоит 8 знаков на 1 таб, если было бы 4 — было бы красивее.
            Обычно табы в 4 символа хорошо сочетаются с языками в которых короткие ключевые слова: def, var, let, val; потому их там и любят применять.

            зы: я предпочитаю пробелы.


      1. faiwer
        01.09.2016 14:34
        +2

        Насколько я понимаю, это как раз и есть smartTabs. Табы для indent-а, а пробелы для aligment-а. Наверное, это единственная заморочка с табами, что мне попадалась (в сравнении с пробелами). Использование tab-ов для выравнивания гарантировано превращает код в кашу за пределами вашего редактора.


        1. sticks
          05.09.2016 14:37

          Единственная проблема Smart Tabs в том, что поперву к этому надо привыкать. Я на период привыкания выставлял размер таба в 3 или в 5 пробелов, чтобы не было соблазна форматировать текст табами.

          В остальном же Smart Tabs — отличный способ позволить людям использовать свой любимый indent, просто выставив ширину таба в настройках редактора.


      1. VaalKIA
        01.09.2016 17:26

        При настроенном табе в 2 или 8 символов (а это ведь один из основных доводов)

        Вообще-то, табуляция изначально не в символах, а в частях листа, грубо говоря, это условные колонки, на которые он поделен, так что в электронном виде у него вообще должна быть переменная длинна, особенно не в моноширинных шрифтах.
        Какой вообще смысл приравнивать таб к пробелам — или вы привязываетесь к началу какой-то колонки (типа красной строки) или — нет. Если — нет, то что, большое значение имеют с какой кнопки запускать скрипт, который проставит удобное количество пробелов?


  1. pfemidi
    01.09.2016 10:19
    +1

    Пробелы, только пробелы!


  1. shytikov
    01.09.2016 10:21

    Кстати, вот интересно, а в каком-таком рейтинге C# не входит в список 14 самых популярных языков программирования?


    1. Antelle
      01.09.2016 10:22
      +2

      Так cs же есть, там не языки а расширения файлов


      1. shytikov
        01.09.2016 10:35
        +2

        Виноват. Точно! Спасибо огромное за подсказку!


    1. lyekka
      01.09.2016 12:25

      В C# расширение файлов cs и оно присутствует в рейтинге.


    1. s_suhanov
      01.09.2016 18:22
      -2

      Тот же вопрос по swift-у. :(


  1. MeGaPk
    01.09.2016 10:21
    +1

    использую то что, иде предлагает.
    А с GoLang ситуация ясна, в го заставляют юзать gofmt.


  1. Tujh
    01.09.2016 10:24
    +1

    Не знаком с языком, но почему в Go практически только табы, синтаксис?


    1. creker
      01.09.2016 11:15
      +9

      Встроенная утилита gofmt является одним и единственным на всех форматированием кода. Программы просто не компилируются, если не соблюдать ее правила. Для указания отступов там используются только табы. Для выравнивания используют только пробелы. Т.е., по сути, то, как это должно было быть с самого начала у всех и с чем никаких проблем никогда не будет при отображении. А все проблемы пошли от того, что кому-то вздумалось выравнивание делать табами, от чего и съезжает в разных просмотрщиках все.


      1. Googolplex
        01.09.2016 12:50
        +2

        Программы просто не компилируются, если не соблюдать ее правила.

        Вообще конечно компилируются, просто подавляющее большинство разработчиков запускает gofmt после сохранения/перед коммитом.


        1. creker
          01.09.2016 13:15
          +1

          На табы и пробелы он конечно не ругается, а вот неправильно расположенные { } вываливаются в ошибку компиляции. Если честно, не пойму, почему не сделали еще более жесткую проверку тех же отступов.


          1. Googolplex
            01.09.2016 14:18
            +1

            неправильно расположенные { } вываливаются в ошибку компиляции

            Это не из-за того что это стилевая ошибка, просто лексер языка устроен так чтобы автоматически "вставлять" точки с запятой в нужных местах. Механизм этой автоматической расстановки точек с запятой описан в спецификации, и из него следует, что ifы и прочие стейтменты должны содержать открывающую скобку на той же строке, иначе точка с запятой вставится не туда, куда нужно. То, что это принуждает использовать конкретный стиль, является следствием, а не причиной и не основной мотивацией.


            1. creker
              01.09.2016 16:57

              Про это я забыл, но тут не совсем очевидная последовательность событий. Изначально этого правила вставки не было, но gofmt был с самого начала — единый стиль для всех был одной из самых первых фич языка. Было ли с самого начала желание показывать ошибку при неправильном форматировании кода или же это пришло с этим правилом уже вопрос. Эта вставка точек с запятой пришла, судя по по посту Роба Пайка, когда они решили сделать их необязательными, но наткнулись на некоторые проблемы с реализацией этого.


      1. rekby
        01.09.2016 12:59

        Программы просто не компилируются, если не соблюдать ее правила.


        Большинство правил форматирования можно спокойно нарушать и программа при этом нормально компилируется.
        Но в больших проектах часто делаются автопроверки на соответствие кода стилю и туда не пропускаются коммиты, не соответствющие правилам gofmt — чтобы код выглядел одинакого.

        В личных проектах тоже запускаю gofmt, просто потому что это удобно.


      1. ertaquo
        01.09.2016 13:55

        На самом деле там два парсера — один в gofmt, другой непосредственно в компиляторе. Компилятору пофиг на табы и пробелы. А gofmt создает синтаксическое дерево и по нему заново строит код по сути.


    1. dezconnect
      01.09.2016 11:20
      -1

      Скорее хипстерские редакторы ;)


  1. APXEOLOG
    01.09.2016 10:25

    Если я не ошибаюсь для java и в eclipse, и в intellij пробелы по умолчанию используются для отступов. Причем разницу заметить сложно, так что если принципиальной разницы нет, то они так и останутся. Думаю это вполне может потянуть на один из факторов


    1. Gugic
      01.09.2016 10:33

      Для ruby, python, php, js продукты от intelliJ также являются очень популярными и настройки по умолчанию там так же с пробелами.


      1. chupasaurus
        01.09.2016 10:57
        +2

        В python есть PEP-8


  1. vershov
    01.09.2016 10:26
    -3

    Вместо того, чтобы думать про чистоту кода на уровне дизайна, люди заморачиваются с какого конца разбивать яйцо… Гламурненько!


    1. DrPass
      01.09.2016 10:56
      +5

      Чистота кода начинается как раз с его оформления, дизайн — это уже следующий этап.


      1. vershov
        01.09.2016 11:05
        -1

        Оформление должно преследовать только одну цель — улучшение читаемости кода. Если ты видишь отступ, то очень странно задумываться что там «внутри»: пробелы или табуляция.


        1. DrPass
          01.09.2016 11:15
          +6

          > Если ты видишь отступ, то очень странно задумываться что там «внутри»: пробелы или табуляция.
          А если ты видишь отступ на 8 символов, и у тебя часть кода оказывается за пределами экрана? Потому что там табуляция, а в твоем редакторе её размер 8 колонок?
          А если того хуже, ты видишь часть кода смещённой влево, часть вправо, и это потому, что его писали в разное время разные разработчики, один ставил два пробела, а другой делал отступы табом. И в итоге код первого отображается «как есть», а код второго едет по настройкам табуляции текущего редактора.
          Поэтому задумываться над этим как раз приходится. А читаемость кода, она как раз первичнее любого дизайна. Потому что нечитаемый код не может априори иметь хороший дизайн и подлежать нормальному сопровождению.


          1. vershov
            01.09.2016 11:28
            -2

            А если ты видишь отступ на 8 символов, и у тебя часть кода оказывается за пределами экрана? Потому что там табуляция, а в твоем редакторе её размер 8 колонок?

            Любой редактор способен установить табуляцию на конкретное число символов.

            один ставил два пробела, а другой делал отступы табом.

            Если отступы во всем коде имеют одинаковое число пробелов, то см. пункт выше. Если нет (один разработчик ставит 2 пробела, второй 4 а третий 8) то это совершенно другая проблема.

            Потому что нечитаемый код не может априори иметь хороший дизайн

            В качестве опровержения: Берем отлично форматированный код с прекрасным дизайном, пропускаем через обфускатор. Получаем полностью нечитаемый код. Что, дизайн тоже «испортился»?


            1. DrPass
              01.09.2016 11:38
              +4

              > Любой редактор способен установить табуляцию на конкретное число символов.
              > Если отступы во всем коде имеют одинаковое число пробелов,
              Вы готовы менять настройки редактора под капризы каждого исходника? Мне кажется, это за гранью продуктивной работы.

              > Берем отлично форматированный код с прекрасным дизайном, пропускаем через обфускатор.
              > Получаем полностью нечитаемый код. Что, дизайн тоже «испортился»?
              Нет, но код на выходе обфускатора уже не имеет отношения к предмету спора. Он не предназначен для разработчиков, и это просто заготовка для дальнейшей машинной обработки. С тем же успехом вы можете в качестве «опровержения» привести обычную компиляцию в бинарник. При этом тоже дизайн не меняется, а всего лишь преобразуются человекочитаемые конструкции в машинные коды.


          1. Delphinum
            01.09.2016 12:38

            Потому что там табуляция, а в твоем редакторе её размер 8 колонок?

            Поставить в редакторе длину табуляции в 2 или 4 колонки, не? Я выиграл миллион?

            А если автор кода использовал 8 пробелов для отступа, что мне делать в редакторе чтоб оно не уезжало?


            1. Regis
              03.09.2016 20:26

              Поставить в редакторе длину табуляции в 2 или 4 колонки, не? Я выиграл миллион?
              ответ
              Вы готовы менять настройки редактора под капризы каждого исходника? Мне кажется, это за гранью продуктивной работы.


        1. Ivan22
          01.09.2016 11:16
          -1

          А если не видишь отступ, потому, что автор намудрил с табами или пробелами? Тут-то после 20-го кодревью ТимЛид с окровавленными глазами и хлопает кулаком постолу со словами «хватит это терперть, слушать всем сюда! С этого дня переходим все на форматирование пробелами/табами (нужное подчеркнуть) „


          1. vershov
            01.09.2016 11:33
            +1

            Достаточно один раз спокойно сказать: «у нас отступы N символов». Если форматирование поехало — заворачивать сразу на ревью. И не надо делать окрававленные глаза и стукать кулачками по столу — это как минимум смешно.


  1. Areso
    01.09.2016 10:31
    +1

    В IDE использую то, что предлагает IDE (так понимаю, чаще всего это 2 или 4 пробела — разные установки по умолчанию)
    В текстовых редакторах использую исключительно табы, если это не правки в чужой проект.


    1. AndreyRubankov
      01.09.2016 10:56

      В IDE тоже желательно использовать настройки проекта или хотя бы придерживаться тех отступов, которые у тебя в текущем файле, я бы даже сказал, в текущей функции / методе. Не редко бывают проекты, где часть кода с пробелами, а часть с табами. Более того, иногда в одной строке могут быть как пробелы, так и табы :(


  1. Varkus
    01.09.2016 11:10
    -2

    Space, only space!
    «Нам нужно больше пробелов, больше!»


  1. VoidEx
    01.09.2016 11:23

    Чаще всё-таки в go (там настолько часто, что почти одни только табы), а вот больше — в C (но частота так себе, почти пополам). Если под чаще понимать вероятность попасть в цель, ткнув наугад.


  1. Riod
    01.09.2016 11:44
    +2

    Ну а где проверка насколько уменьшится объем кода при замене пробелов на табы?


  1. heleo
    01.09.2016 11:47

    Привык к пробелам хотя могу и табы, в IDE использую таб переводимый в пробелы. А холивара по поводу символов конца и такой же статистики строки случаем нету?))


  1. kopch
    01.09.2016 11:47

    В том же Саблиме — табы легко на пробелы заменяются, а наоборот часто не очень. Потому предпочитаю табы.


  1. baka_cirno
    01.09.2016 11:48
    +11

    Я давно не могу понять, почему пробелы популярнее табов, и почему они вообще используются для отступов. Это для меня величайшая загадка. Табы — специальные символы для отступов от края, они для этого и придуманы еще со времен печатных машинок. В редакторах их визуальную длину можно регулировать. Когда нажимаешь backspace, удаляется весь таб целиком; если использовать пробелы, то в этой ситуации тебе надо жать два или четыре раза. Короче, я не понимаю людей.


    1. MonkAlex
      01.09.2016 11:51

      А что за кейс с удалением одного таба? Я обычно строчку целиком удаляю, т.е. ctrl+backspace.


      1. baka_cirno
        01.09.2016 12:13

        В Python часто при рефакторинге натыкаюсь на лишние отступы. Конечно, можно и Ctrl+[ нажать, многие редакторы эту комбинацию поддерживают, но если уже курсор упал на начало кода в этой строке, то можна и backspace ткнуть. Это мелочь, просто табы ведут себя логично, а пробелы мне кажутся какими-то костылями.


    1. Einherjar
      01.09.2016 11:56
      +2

      Выше же писали уже — с пробелами код всегда и сразу железобетонно одинаково выглядит в любом редакторе. Даже если на чужом компе открываешь файл каким-н блокнотом посмотреть, а там у человека таб шириной 8 пробелов и все размажется по экрану, что тоже лезть в настройки менять, а потом обратно?


      1. baka_cirno
        01.09.2016 12:09
        +1

        Так это же как раз недостаток. Если в проекте используются табы, любой участник может открыть файл и настроить визуальные отступы так, как ему нравится — хоть в два символа, хоть в десять. И это никак не затронет сам код. Если же используются пробелы, программист, нравится ему это или нет, вынужден подстраиваться под принятые гайдлайны, и ничего он с этим не поделает.
        Пример с блокнотом, откровенно говоря, является редким случаем и мало относится к разработке как таковой. Это, скорее, из будней админа, который скрипт на сервере поправляет.


        1. Einherjar
          01.09.2016 12:12
          +1

          программист, нравится ему это или нет, вынужден подстраиваться под принятые гайдлайны, и ничего он с этим не поделает.

          Естественно. Программист должен, нет, обязан даже подстраиваться под проект. Не нравится — пусть идет в другой проект или делает свой. А если кому то из програмистов скобочки приспичит так писать
          if (a) {
          }
          

          вместо расово-верных используемых в проекте
          if(a)
          {
          }
          

          то что тогда?


          1. baka_cirno
            01.09.2016 12:15
            +2

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


            1. Einherjar
              01.09.2016 12:30
              -4

              Вот вам форматирование табами. Не совсем отступы от края, но привычка используется для этого та же. В IDE это выглядит ровно. Или такое как раз пробелами набивать бешено давя на клавишу?

              #define AAAAAAA		1
              #define B			2
              



              1. baka_cirno
                01.09.2016 12:34
                +4

                Как раз такие отступы я, во-первых, не поощряю, а во-вторых, если уж они вам сильно нужны, то естественно их следует выполнять в виде пробелов. Таб — отступ от края. Пробел — отступ между символами.


                1. quantum
                  01.09.2016 13:11

                  Так большинство этого не понимает. + такая ситуация: https://habrahabr.ru/post/308974/#comment_9783072, тут не между символами


          1. Delphinum
            01.09.2016 12:44

            Программист должен, нет, обязан даже подстраиваться под проект

            Ужас какой, про инструменты автоматического форматирования кода при коммите вы наверно не слышали? Скажите пожалуйста, в какой фирме вы работаете, я ее в черный список сразу закину.


          1. hdfan2
            01.09.2016 13:30
            +2

            Вы тут нам холивары не путайте! Расстановка скобок — совсем другой холивар, ещё, пожалуй, холиваристей этого.


        1. MonkAlex
          01.09.2016 12:20
          -1

          А потом, я такой с настройкой конвертирования табов в пробелы кликаю «переформатировать» и что происходит? Табов в коде больше нет и вернуть их нельзя фактически.

          Всем спасибо, табы на выход.


          1. baka_cirno
            01.09.2016 12:27

            Не понял, зачем вам это делать и как в этом виноваты табы? Зачем вообще что-то переформатировать, если вам специально придумали символ для отступов?


            1. MonkAlex
              01.09.2016 12:57

              VS как минимум дает хоткей ctrl+K + ctrl+D, который всю страницу форматирует согласно моим настройкам. И если у меня стоит автозамена табов на пробелы — это он тоже сделает. В итоге, если я хотел выровнять всего лишь одну добавленную мной строчку, то и табы я чьи то случайно удалил.


              1. Delphinum
                01.09.2016 12:59

                то и табы я чьи то случайно удалил

                И правильно сделали. Это ваша локальная копия, делайте с ней что хотите.


                1. MonkAlex
                  01.09.2016 13:10

                  Эм, так я потом это же и зачекиню. Особенно если студия же игнорит пробелы при чекине.


                  1. Delphinum
                    01.09.2016 13:11

                    Так настройте автоформатирование при коммите и будет вам счастье.


                    1. MonkAlex
                      01.09.2016 13:13

                      Существует способ вернуть табы из пробелов?
                      Я не понимаю, как вернуть теперь файл, кроме полной отмены и внесения исключительно моих изменений.


                      1. Delphinum
                        01.09.2016 13:19

                        Существует способ вернуть табы из пробелов?

                        Так я же говорю, есть инструменты автоматического форматирования, они выполнены в виде настраиваемых консольных утилит. Вешаете их на хук git при коммите и они вам из ваших пробелов сделают табы и наоборот (смотря как настроите). И не мучайте больше себя и коллег.


              1. baka_cirno
                01.09.2016 14:27
                +2

                Вот поэтому я и ратую за табы. Если принять их за единый стандарт, то все эти инструменты для форматирования утратят свою актуальность. Не нужно прописывать в гайдлайнах длину отступа, не нужно париться о том, что у тебя редактор что-то конвертировал не так. Ставишь таб — и все у тебя хорошо. И этот таб — он и в Африке будет табом. А как ты его у себя в редакторе отобразишь — это твое дело.


                1. MonkAlex
                  01.09.2016 20:10

                  Такое ощущение, что мы пишем разный код. В разных IDE, с разными сниппетами и разными гайдлайнами. Потому что когда я делаю новую строку при незакрытой кавычке, VS спокойно может не тот отступ проставить. Потом я исправлю кавычку, а чтобы руками не пробивать правильный отступ — использую хоткей на переформатирование. Таб не таб — никакой разницы.


      1. DenimTornado
        01.09.2016 12:26

        Почему у человека там шириной 8 пробелов???


        1. Delphinum
          01.09.2016 12:45

          Ну так когда нет аргументов всегда в ход идут «преувеличения».


        1. Einherjar
          01.09.2016 13:01
          +1

          Например кроме виндового блокнота нет ничего. Там даже поменять нельзя. Xml-файл имеющий в ide ширину таба в 2 некисло разъезжается.


      1. Delphinum
        01.09.2016 12:42

        тоже лезть в настройки менять, а потом обратно?

        А зачем обратно? Нормально настроить ширину табов и забыть о них не? А если вы используете 8 пробелов для отбивки, как мне посмотреть ваш код? Что в редакторе надо для этого настроить?


    1. csbubbles
      01.09.2016 12:31

      +1

      Лучший комментарий касаемо всего этого безумия «tabs vs. spaces», что я видел до сих пор.

      Спасибо!


    1. Delphinum
      01.09.2016 12:41

      Я давно не могу понять, почему пробелы популярнее табов

      Этого никто не знает, поверьте. Просто люд привык. Я сам когда то использовал пробелы для отступа, а потом спросил себя — а нах*ра? — после начал использовать табы.


  1. snakeye
    01.09.2016 11:48
    +2

    Уже и не сосчитать, сколько раз я видел этот холивар. Разницы что именно использовать нет вообще никакой, главное чтобы все в команде использовали один способ.


  1. sahr
    01.09.2016 12:16
    -22

    Дошик или нормальная еда?
    (дошик — пробелы )
    image


  1. Nagg
    01.09.2016 12:20
    +4

    Вебгуй гитхаба давольно паршиво отображает код на табах — эквивалетно 8 пробелам.


    1. herr_kaizer
      02.09.2016 08:18

      Оно же настраивается, нет?


    1. G-M-A-X
      02.09.2016 19:46

      Это все браузеры вроде так (на всех сайтах) :(


    1. ForceUser
      05.09.2016 14:37

      Добавляете файл .editorconfig и применяете свои настройки indent_style и indent_size
      Спецификация — EditorConfig.org
      github поддерживает это нативно


  1. pudovMaxim
    01.09.2016 12:25

    Не понимаю холивар между церквями табуиров и спайсериан. По-моему это такой же бред как опускание крышки унитаза.

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


    1. MaximAL
      01.09.2016 14:04
      +6

      Ну а самое важное не написали. Крышку-то опускаете?


      1. Nagg
        01.09.2016 16:26

        И есть ли корреляция между крышкой и табами? 27 лет, табы, крышку не опускаю.


  1. bfDeveloper
    01.09.2016 12:25

    Эта статистика показывает только одно — абсолютно всё равно, пробелы или табы. Можно юзать и то, и то, и никто от этого не умрёт. Кодстайлы в первую очередь должны быть одинаковыми у всех в проекте и лишь во вторую очередь учитывать мелкие плюсы и минусы пробелов/табов, переноса открывающей фигурной скобки, ширины отступа и тд.


  1. AGook
    01.09.2016 12:26

    А в какую категорию попал код где используется смешанный отступ? Я видел (и работал с) кодом где 1 отступ — 4 пробела, все группы из 8 пробелов заменяются на таб. Таким образом 3 уровня отступа — 1 таб и 4 пробела.


    1. baka_cirno
      01.09.2016 12:31
      +9

      Так, наверное, выглядит ад.


    1. Trolzen
      05.09.2016 14:37

      Похоже, этот код набирали в Midnight Commander'е.


  1. woodhead
    01.09.2016 12:26

    В Delphi/Lazarus/Pascal два пробела, в C/C++ — таб.


  1. Interreto
    01.09.2016 12:26
    +4

    Проблема «табы vs пробелы» это локальная проблема общих настроек IDE у команды, а не глобальная. Связанная она с репозиторием кода, очень сложно мержить и ревьювить код когда там весь диф «красный» из-за разных настроек отступов у колег по цеху. Поэтому холивар, считаю, бестолковый на уровне религии и астрологии.


    1. MaximAL
      01.09.2016 14:02

      Клянусь, на данный момент я не знаю ни одной системы контроля версий, которая не умеет в диффах игнорировать различия в пустых символах.


      Это, конечно, не оправдание для смешения разных стилей стилей в одном проекте или (того хуже) файле. Если такая ситуация при слияниях встречается у коллег по одному цеху — в цехе явно проблемы.


      1. Interreto
        01.09.2016 15:00

        Я просто оставлю это здесь…
        image


        1. MaximAL
          01.09.2016 15:35
          +1

          Я не написал, что обязательно игнорируют разницу в белых символах, я написал, что умеют игнорировать.


  1. csbubbles
    01.09.2016 12:26

    различные IDE и их компиляторы обрабатывают табуляцию также по-своему


    Можете пояснить? Какие IDE и какие компиляторы как по-своему обрабатывают табуляцию?
    Табуляция – это просто 1 символ. По-моему, любой современный текстовый редактор сейчас позволяет настроить как его показывать (какой длины он должен быть).
    Что вы имеете в виду?


    1. JerleShannara
      01.09.2016 16:16

      Это конечно не IDE, но в Makefile оно так и есть


      1. csbubbles
        01.09.2016 16:20

        Так и есть – в смысле, там есть разница пробел используется или tab?


        1. Tujh
          01.09.2016 16:24

          Да.


          1. csbubbles
            01.09.2016 16:30

            Ну, окей, но это все равно пример натянутый несколько. Речь шла о языках программирования и IDE, и, я так понимаю, наиболее популярных. Java, C++, Ruby, etc., IDEA, NetBeans, Visual Studio, Vim, etc. – для них нет разницы, пробелы используются или tab. Как и для компиляторов/интерпретаторов тех языков. Просто фраза в статье довольно некорректно звучит, по-моему.


  1. cmdx
    01.09.2016 12:26
    +1

    «Людям не нужны лучшие стандарты, людям нужны стандартные стандарты»


  1. dnovikoff
    01.09.2016 12:33
    +2

    «Табы занимают меньше места» — это какое-то типичное мнение любителей пробелов о тех, кто предпочитает табы.
    Я предпочитаю табы, но размер — это простите последнее о чем я вообще могу подумать в качестве аргумента «за». Более того — я предпочту не использовать этот аргумент, т.к. он — глупый.


  1. Pinsky
    01.09.2016 12:46
    +1

    Табы и шрифты с лигатурами.


  1. maximw
    01.09.2016 12:52
    +1

    Я за табы, но использую пробелы, потому что стандарты кодирования.


  1. Delphinum
    01.09.2016 12:57
    +1

    Когда то давно активно использовал пробелы для всех целей форматирования, но затем задумался — а почему? — в результате получил вот такой ответ:

    Пробелы для всех целей форматирования (отступ и выравнивание) используется только теми людьми, которые считают свою стиль форматирования наиболее кошерным и совершенно не приемлют других форматов. Даже нет, не форматов, а других мнений и предпочтений! Подумайте сами, мне нравится использовать для отступов в исходном коде 2 столбца, а для отступов в «стене» XML 4, а то и 6 столбцов (в зависимости от «заполненности стены» символами), но мне присылают файлик, в котором 2 пробела под XML и 4 под исходные коды. Мне это не привычно, не удобно, но моему коллеге на меня плевать, он считает свой формат самым правильным и ему совершенно не важно, что существуют инструменты, позволяющие хранить тексты в репозитории в неком стандартном виде (автоматическое форматирование при коммите), а писать и просматривать локально в том виде, в котором вы привыкли.

    Вот такие выводы были мной сделаны. Подрезюмирую: используйте то что вам нравится (в том числе и стиль скобок, переносов и т.д.). Это позволит вам с помощью соответствующих инструментов хранить тексты в стандартном виде, а получать в удобном для вас формате. Никогда не требуйте от ваших коллег придерживаться на письме определенного стиля. Стиль, это их дело и вы не в праве его оспаривать.

    P.S. Сам использую табуляцию для отбивки и пробелы для выравнивания.
    P.P.S. Терпеть не могу, когда требуют соблюдения PSR-1 и PSR-2 на письме. Эти стандарты разработаны для корректной настройки инструментов автоматического форматирования (если кто не в курсе).


  1. saboteur_kiev
    01.09.2016 13:00
    +2

    «Чаще всего табуляция встречается в языке С, а пробелы — в Java. „

    Откуда такой вывод? Я в таблице явно вижу, что чаще всего табуляция встречается в Go, практически 99%.
    Просто самих проектов на Си пока что в выборке больше, чем на Go.


  1. dmitry_dvm
    01.09.2016 13:30

    Форматирую в студии по Ctrl+K+D и даже не знаю что там получается в итоге — табы или пробелы. До лампочки вообще.


  1. MaximAL
    01.09.2016 13:35
    +25

    Закрыл для себя этот вопрос давным-давно.


    Спор „пробелы против табов“ имел под собой хоть какие-то логические основания, когда IDE не умели с ними работать: надо было нажимать много раз пробел или бекспейс (при использовании пробелов), выравнивание ломалось при смене размера таба (при использовании табов).
    Сейчас IDE умеют работать с табами, а люди до сих пор не научились.


    Главный плюс табуляции — семантичность. Это символ, специально созданный для отступов.
    Когда вам нужно поставить ссылку, вы же пишете <a href="…">, а не <span onclick="…"?
    Наверняка, каждого более-менее технически подкованного человека бесит, когда в ворде отступ параграфа сделан не отступом параграфа, а пробелами (скачайте пару первых попавшихся рефератов). Но при этом такая же ситуация у себя в коде людей не бесит :-)
    Разный стиль параграфов


    Все остальные аргументы теряют свою важность перед смыслом: размер файла, можно конфигурировать ширину, выглядит одинаково — вы серьёзно?


    Самый разумный и естественный метод отступов — это смарт-табуляция: табы для отступов, пробелы для выравнивания:
    Иллюстрация смарт-табуляции


    Если среда разработки не понимает смарт-табуляцию и не может автоматически понять, где вставить табуляцию, а где пробел, то грош ей цена, такой среде.
    Вот скриншот из настроек джетбрейновской Идеи:
    Настройка табуляции в стилях кодирования


    https://github.com/maximal/tab
    https://www.emacswiki.org/emacs/SmartTabs


    1. TimsTims
      01.09.2016 17:20
      +4

      Самый мощный комментарий, хоть и плюсов маловато. Реквестирую запостить в виде отдельной статьи, чтобы /раз-и-навсегда/ закрыть этот холивар!


      1. MaximAL
        01.09.2016 17:24
        +1

        Спасибо на добром слове. „Раз и навсегда“ не получится, думаю :-)
        По поводу статьи чёрт его знает, репозиторием в Гитхабе, думаю, лучше.


        1. TimsTims
          02.09.2016 23:55
          +1

          Ваш пост уже собрал +22, статейку небольшую всё-же надо. Очень коротко и по теме, хабр это любит.


      1. TheShock
        03.09.2016 20:53
        +2

        Реквестирую запостить в виде отдельной статьи

        https://habrahabr.ru/post/118208/ 2011 год)


    1. SKolotienko
      01.09.2016 19:00
      +3

      После этого комментария топик можно закрывать. А содержимое комментария — в пост.


    1. MacIn
      01.09.2016 22:26

      Но при этом такая же ситуация у себя в коде людей не бесит :-)

      Это некорректный аргумент: код моноширинный и форматирование пробелами не едет при добавлении/удалении отступа.

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

      Смысл, если можно везде использовать пробел, без переключений? И для отступа, и для выравнивания? Вы предлагаете более сложную систему, которая функционально полностью эквивалентна «пробельной» — зачем?
      «тут внутри строки я нажимал Tab среда сама поставила пробелы — в чем разница с ситуацией, когда пробелы будут везде?

      Все остальные аргументы теряют свою важность перед смыслом

      Исходный смысл табуляции — разметка таблиц при печати, он утерян уже очень давно.


      1. Lertmind
        01.09.2016 23:20
        -2

        Полностью согласен, удивлён количеству плюсов у MaximAL. Дополню парой мыслей.

        * Про «смысл» полная чушь, многие вещи используют по назначению изначально не рассчитанному.
        * Про «смарт-табуляцию». Сначала издалека. Два единственных плюса табов это размер исходного текста и изменение ширины в зависимости от настроек у конечного пользователя.
        Первый плюс ничтожен, так как занимает место только у разработчиков, на конечных пользователей это не влияет. По сравнению с несжатым видео, которое приходиться хранить — капля в море и смех под бородой.
        Второй плюс сходит на нет при использовании смарт-табуляции, потому что если будут заменены табы другими размерами, допустим с 4 до 2, то пробелы для выравнивания всё испортят. Этот плюс не важен, если у вас «среда, которой не грош цена», заменяющая серию пробелов на табуляцию с последующим изменением размера отступов.


        1. creker
          01.09.2016 23:34
          +3

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

          Пробелы не решают проблемы их различного количества у проектов. У кого-то два, у кого-то четыре. Вместо того, чтобы использовать правильное решение вообще всех проблем, мы получаем ситуацию, где надо постоянно менять настройки IDE, либо пытаться сделали уникальные для проектов настройки, чтобы можно было и 4, и 2 пробела использовать. Почему-то считается, что это объективно менее функциональное и более проблемное решение является более правильным.


        1. MaximAL
          02.09.2016 09:22

          Первый плюс ничтожен

          Вы, наверное, не поняли исходный посыл текста. Там так и написано, что эти плюсы — ничто по сравнению с семантичностью (смыслом).


          Второй плюс сходит на нет при использовании смарт-табуляции, потому что если будут заменены табы другими размерами, допустим с 4 до 2, то пробелы для выравнивания всё испортят

          Смысл смарт-табуляции, как раз в том, что при изменении ширины таба выравнивание не портится.


      1. MaximAL
        02.09.2016 09:18
        +1

        Вы предлагаете более сложную систему, которая функционально полностью эквивалентна «пробельной» — зачем?

        Ну разумеется, что она функционально не эквивалентна, а лучше: каждый разработчик может подстроить себе удобный вид для кода используя конфигурируемую ширину. У меня много коллег, например, сначала любили 4, а потом полюбили 2.


      1. VoidEx
        02.09.2016 11:13

        Почему обязательно моноширинный? У меня не моноширинный, например, никакая IDE не принуждает.
        Меня каждый раз минусуют, потому сошлюсь на то, что вроде у Страуструпа тоже :)


        1. VoidEx
          02.09.2016 11:20

          In code examples, a proportional-width font is used for identifiers. For example:…
          At first glance, this presentation style will seem ‘‘unnatural’’ to programmers accustomed to seeing code in constant-width fonts. However, proportional-width fonts are generally regarded as better than constant-width fonts for presentation of text. Using a proportional-width font also allows me to present code with fewer illogical line breaks. Furthermore, my experiments show that most people find the new style more readable after a short while.

          http://www.stroustrup.com/3rd_notes.pdf


    1. VoidEx
      03.09.2016 03:00

      Нагуглил ещё elastic tabstops, но это концепт, как я понял.


      1. MaximAL
        03.09.2016 16:39

        Ну, по сути, это идеальное решение, так, как оно должно работать.
        Пока что имеем то, что имеем.


  1. OnYourLips
    01.09.2016 14:26
    -4

    Пользуюсь тем способом, который описан в code style.
    Например, если язык PHP, то однозначно пробелы (по общепринятому стандарту).

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


  1. PaulMaly
    01.09.2016 14:35
    +3

    Холиварить не буду, но лично у меня логика такая: форматирование строк — табы, форматирование внутри строк — пробелы. Имхо довольно логично, но как говориться на вкус и цвет… еще люблю большие отступы и не готов клацать 4 раза на пробел.


    1. MaximAL
      01.09.2016 15:57

      4 раза на пробел (или на бекспейс при удалении отступов) в средах разработки клацать уже давно не нужно, редакторы разворачивают нажатие на клавишу табуляции в нужное количество пробелов сами (если вы выбрали стиль кодирования с пробелами, конечно).
      То, что вы описали вначале, называется смарт-табуляцией, да.


      1. PaulMaly
        01.09.2016 16:28

        4 раза на пробел (или на бекспейс при удалении отступов) в средах разработки клацать уже давно не нужно


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


  1. dmitry_ch
    01.09.2016 18:07
    +2

    Как получить «отличную статью»:
    1. По ссылке с зарубежных ИТ-сайтов найти ссылку на интересную запись в блоге
    2. Перевести ее по возможности легким слогом
    3. Добавить пару картинок, можно ролик с youtube
    — профит!

    P.S. Тег «перевод» ставить не нужно, к чему оно? ))


  1. MiXei4
    01.09.2016 18:52
    +4

    Внезапно:


  1. yurec_bond
    01.09.2016 19:30
    +2

    Я ненавижу пробелы по одной простой причине — их неудобно удалять.

    Большинство современных IDE вставляют N пробелов когда нажимаешь клаыишу tab (если в настройках выбраны пробелы).
    То есть в сторону добавления индентации проблема решена.
    Но когда нужно уменьшить индентацию приходится удалять N пробелов — это идиотизм.

    P.S. Людей которые индентируют код нажимая клавишу пробел я вообще не понимаю.


    1. mmman
      01.09.2016 22:07
      +2

      Во многих IDE уменьшение отступа делается горячей клавишей, в частности, через Shift+Tab, ничего руками удалять не надо.


    1. MaximAL
      02.09.2016 09:28
      +1

      В Идее (если для отступов выбраны стрёмные пробелы, конечно) при одиночном нажатии бекспейса попадаешь на уровень ниже.


      В общем, я считаю, что проблема „нажимать много раз пробел или бекспейс“ вообще не стоит. Это всё должно решаться средой, если не решается — среда отстой.


      1. Googolplex
        02.09.2016 13:06

        Более того, в новых версиях идеи (c 14-й, если не ошибаюсь) бэкспейс в начале строки, когда ничего кроме отступов нет, не только удалит все отступы, но и вернёт курсор на предыдущую строку, что весьма удобно.


        1. MaximAL
          02.09.2016 13:09

          Ну это, вроде как, настраивается. Проверить поведение бекспейса можно добавив „лишних“ отступов. В конец предыдущей строки курсор попадает, только если он находится на текущем или меньшем уровне вложенности. Если на большем, то редактор просто убирает один уровень вложенности.


          Короче, аргумент про „много раз бекспейс“ — не аргумент.


          1. Googolplex
            02.09.2016 13:12

            В конец предыдущей строки курсор попадает, только если он находится на текущем или меньшем уровне вложенности. Если на большем, то редактор просто убирает один уровень вложенности.

            Только что проверил — да, правда, так и есть. Удаляет до того уровня вложенности, который положен на этом месте согласно форматированию. К таким вещам привыкаешь и перестаёшь в итоге их замечать)


            аргумент про „много раз бекспейс“ — не аргумент

            Да, здесь я полностью согласен)


            1. MaximAL
              02.09.2016 14:39

              В этом и смысл великолепного продукта, коим несомненно является джетбрейновская Идея.
              Сделать логичное поведение полностью прозрачным, чтобы пользователь даже не задумывался о нём.
              И таких мелочей в нормальных IDE тысячи.


    1. Buckstabue
      05.09.2016 14:37

      Когда надо уменьшить идентацию, можно юзать комбинацию shift + tab, или вообще отформатировать весь код сразу через ctrl + shift + f


  1. Flex25
    01.09.2016 19:31

    Рискну предположить, что большая популярность табов в Java в определенной степени связана с документом «Java Code Conventions» от Oracle. Там сказано следующее: «Four spaces should be used as the unit of indentation. The exact construction of the indentation (spaces vs. tabs) is unspecified. Tabs must be set exactly every 8 spaces (not 4).»

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


    1. PaulMaly
      01.09.2016 23:21

      > Чаще всего табуляция встречается в языке С, а пробелы — в Java.
      > Рискну предположить, что большая популярность табов в Java

      Совсем запутали))))


      1. Flex25
        05.09.2016 19:12

        Я опечатался. Конечно же, Java Code Conventions популяризирует именно пробелы, а не табы.


  1. funnybanana
    02.09.2016 06:19

    Либо на хабре много сиплюсплюшников, либо выборка оказалась не совсем корректной, т.к голоса сместились в сторону табов…

    php (Sublime) — как это здорово выделить несколько строк кода нажать tab и он весь сместится…
    с пробелами такое не прокатит…
    VB.NET — (Visual Studio) — там IDE сама табы расставляет…
    Java (IntelliJ idea) тоже табы…

    в общем-то тут скорее не от языка зависит а от редактора где код набирается…

    исключение
    мне как-то приходилось код редактировать на вокзале, через коммуникатор который был подключен по SSH к серверу (редактор nano) — это был единственный случай когда пользовался пробелами вместо табов


    1. webkumo
      02.09.2016 09:21
      +1

      > Java (IntelliJ idea) тоже табы…

      Простите что?
      Во-первых «проекто-зависимо»,
      во-вторых по умолчанию — пробелы… или на лету подхватывается проектный стиль.

      PS а с современными IDE кому-то вообще реально важно что там — пробелы или табы?!


      1. cold147
        02.09.2016 13:05

        а с современными IDE кому-то вообще реально важно что там — пробелы или табы?!

        Да, потому что пробелы создают проблемы которых IDE не решает польностью, например настраиват ширину отступа нельзя, а также нельзя продвинут стрелкой на один отступ


        1. webkumo
          02.09.2016 16:51
          +1

          Не знаю о каких проблемах речь:
          — уже существующий код обычно соответствует код-стайлу проекта. Если вам нужны какие-либо персональные изменения — это возможно сделать без нарушения оных
          — «нельзя продвинут стрелкой на один отступ» — не понимаю юзкейса, можете пояснить?


          1. cold147
            02.09.2016 18:50

            1. По код-стайлу 4 пробела для отступа, но я хочу 2. Как мне настраиват IDE?


            2. Ставим курсор на середину вложенного блока и нажимаем стрелка вправо условно два раза, с табамы все работает предсказуемо, с пробеламы придется добавить отступы, далее если нажимат ентер то все ок, иначе остается лишние отступы в конце строки. Но согласен это редкий кейс, главное же проблема с шириной отступа.


            1. webkumo
              02.09.2016 19:51

              1. К счастью (для меня) у меня нет такой потребности, поэтому я не очень в курсе. Но как минимум для гита существуют хуки, которыми можно у себя сделать переформат на пуле и на коммите. В остальных случаях посоветовать не могу — меня 4 дефолтовых устраивают везде кроме xml.

              2. Немного не понимаю ваш текст, но попытаемся разобраться: «Ставим курсор на середину вложенного блока и нажимаем стрелка вправо условно два раза» — т.е. ставим курсор куда-нибудь в начало строки, либо посреди отступов, правильно? Если я хочу сразу упасть к началу строки кода я нажимаю home (спасибо Idea!) и оказываюсь там. Возможно ваша IDE умеет так же, либо имеет что-то похожее (как минимум ctrl-вправо должно уметь), попробуйте.
              «с табамы все работает предсказуемо, с пробеламы придется добавить отступы» — если мы просто навигируемся, то зачем что-то добавлять, если форматируем код — проще доверить это IDE… не понимаю…
              «далее если нажимат ентер то все ок, иначе остается лишние отступы в конце строки» — тоже не очень понятно, поясните, пожалуйста.


              1. cold147
                02.09.2016 23:06

                1. Я вот полюбил 2, но использую 4 потому что кодстайл, а с хуками потом в changelog(в Intellij idea) не покажется ли все файлы измененными?


                2. если мы просто навигируемся, то зачем что-то добавлять

                  Да незачем, не ищите юзкейсов, мое возражение вызвано тем что такое поведение нелогично.
                  Сосредаточтесь на первую проблему.



                1. kloppspb
                  02.09.2016 23:34

                  Нелогично — бороться с проблемой, для которой воспроизведения нужно выдумывать или несуществующие юзкейсы, или юзкейсы, появление которых обусловлено либо использованием кривых инструментов, либо неумением пользоваться нормальными :)


            1. kloppspb
              02.09.2016 20:34

              1. Элементарно:

              1a. Открыл исходник, нажал кнопочку «переформатировать как мне надо», работаем.

              1b. Коммит — pre-commit хук возвращает всё в старый стиль. Если по каким-то причинам работа не с гитом, то перед отдачей исходника наружу нажимаем вторую кнопочку, которая форматирует взад.

              Если ваша IDE не позволяет пункт 1a — выкиньте её. Пункт 1b (впрочем, как и 1a) может быть решён засчёт вызова внешней утилиты в разными настройками, это умеют не то что IDE — просто редакторы.

              Насчёт 2 я вообще ничего не понял.


              1. creker
                02.09.2016 20:57

                Удивительно, сколько костылей надо подставить, чтобы это решение работало. А всего лишь то надо перейти на табы+пробелы


                1. webkumo
                  02.09.2016 21:55

                  И какая разница в какую сторону костылировать, если разработчик захотел не так, как в сырцах?


                1. kloppspb
                  02.09.2016 22:45

                  Мне лично глубоко фиолетовы все эти разговоры про табы и пробелы. За 20 с лишним лет кодинга я столько разных стилей повидал и редакторов, что ко всему привык. И описываемые здесь якобы проблемы со скачками и стрелками вызывают только недоумение.

                  А что касается «сколько костылей» — уверяю, это всего лишь крохотная часть того, что входит в процесс «настрой рабочую среду как тебе удобно». И этим в любом случае приходится заниматься. Как пример — только базовых стилей форматирования для C-подобных языков существует больше десятка, в реальности же погремушек в каждой избушке на порядок больше. И есть ещё немало всего, что лучше один раз сделать, чтобы жилось комфортней. В любом случае куда эффективней один раз наладить преобразование туда-сюда, чем плеваться на несовершенство мира и грезить о пострижении всех под одну гребёнку :)


                  1. cold147
                    02.09.2016 23:11

                    Ведь никто не говорил что это жизнено важно, просто это топик про табы и пробелы :)


                    Зачем хуки если смарт табулация решает все проблемы без кастылов?


                    1. kloppspb
                      02.09.2016 23:25

                      Вот когда всё человечество перейдёт на единый стандарт, тогда она и решит проблемы. То есть никогда :)

                      А зачем нужны хуки я уже объяснил, пробелы-табы тут сбоку. И если в любом случае для комфортной работы нужно совершить пару десятков одноразовых действий, то плюс-минус одно погоды не сделает. Зато это куда реальней, и делается быстро, прямо сейчас. IMHO, есть разница между «нереально» и «никогда» :-)


    1. MaximAL
      02.09.2016 09:32

      php (Sublime) — как это здорово выделить несколько строк кода нажать tab и он весь сместится…
      с пробелами такое не прокатит…

      Не понимаю, как можно на полном серьёзе разрабатывать в текстовом редакторе, но вступлюсь тут.
      Текстовый редактор обязан при выделении нескольких строк и нажатии [Таба] уметь увеличивать отступ у всех строк независимо от того, табы там выбраны для отступов, или пробелы.


      1. VoidEx
        02.09.2016 11:27

        Sublime именно так и делает. Shift-Tab — уменьшает отступ.


    1. MetaDriver
      05.09.2016 14:38

      php (Sublime) — как это здорово выделить несколько строк кода нажать tab и он весь сместится…
      с пробелами такое не прокатит…

      *.* (PhpStorm и прочие «идейные IDE») — очень даже прокатит, и с табами, и таки с пробелами. А по shift-tab подвинет взад.


  1. claygod
    02.09.2016 09:26
    +4

    Очень удивлён, что никто до этого момента не вспомнил Лилипутию, которая воевала с Блефуску из-за спора о том, с какой стороны разбивать яйца. И не известно, чем дело кончилось… Думаю в тему будут несколько цитат из Свифта (это не язык программирования ;) ):

    Всеми разделяется убеждение, что варёные яйца при употреблении их в пищу испокон веков разбивались с тупого конца; но дед нынешнего императора, будучи ребёнком, порезал себе палец за завтраком, разбивая яйцо означенным древним способом. Тогда император, отец ребёнка, обнародовал указ, предписывающий всем его подданным под страхом строгого наказания разбивать яйца с острого конца.
    Насчитывают до одиннадцати тысяч фанатиков, которые в течение этого времени пошли на казнь, лишь бы не разбивать яйца с острого конца. Были напечатаны сотни огромных томов, посвящённых этой полемике, но книги Тупоконечников давно запрещены, и вся партия лишена законом права занимать государственные должности.
    Между тем это просто насильственное толкование текста, подлинные слова которого гласят: «Все истинно верующие да разбивают яйца с того конца, с какого удобнее.»


  1. denonlink
    02.09.2016 16:59

    image
    Это не важно, когда твой заказчик плачет…


  1. G-M-A-X
    02.09.2016 20:11

    В таблице [contents] записаны файлы без своих дубликатов. Ниже указано общее количество уникальных файлов и их суммарный размер. Дубликаты файлов не учитывались в ходе анализа.

    А по запросу кажется, что дубликаты учитываются. Или что такое copies?

    Анализ каждой из строк 133 Гб кода занял 16 секунд. Добиться такой скорости помог все тот же BigQuery.

    Это чудо!
    Или это повторный запрос/запрос из кеша и все данные лежали в оперативке? :)

    П.С.
    Для себя использую табы, по текущей работе — пробелы.


  1. Regis
    03.09.2016 20:46
    -1

  1. maaGames
    04.09.2016 06:46
    +1

    Не силён в скриптах. Считались табы-пробелы только в начале строки или вообще все табы-пробелы?


  1. toxi_roman
    05.09.2016 14:37

    В своих проектах я использую табы в качестве отступов. Пробелы уже если есть необходимость. В других «кодерах» использую то, что уже было, пробелы/табы, чтобы было одинаково хотя бы в том участке кода, с которым я работаю.
    Еще есть некоторые такие обработчики, которые принимают только пробелы в качестве отступов, а табы не распознают.


  1. maolo
    05.09.2016 14:37

    Вы будете смеяться, но меня все-таки заставили перейти на пробелы не горячие холивары,
    а подсветка символов в IDE (я предпочитаю их включать):

    image

    С табами, к которым я очень привык за годы работы, просто стало сложно читать код в темной теме WebStorm'а — много ненужной визуальной информации.

    А теперь и не обращаю внимания, последние 3-4 года сижу на пробелах, и все нормально — дело привычки.

    Что касается съэкономленного табами места — раньше я тоже такой смешной был, и не знал, что перед минификацией все равны! :)

    Сейчас меня пытаются убедить перейти на 2 пробела вместо 4, аргументируя тем, что это мэйнстрим на github'е.
    Но пока держусь), по-моему, читабельность кода существенно снижается на 2 против 4, но, возможно, что и ошибаюсь.


    1. maaGames
      05.09.2016 14:53

      Можно поинтересоваться, зачем подсвечивать пробелы? Вижу, что переводы строк не обозначены, значит, непечатаемые символы всё-же скрыты.


    1. TheShock
      05.09.2016 21:21

      Хе, а как на меня подсветка символов в ИДЕ — одно из важных преимуществ табов. Ты всегда видишь глубину, а от пробелами видно хуже. У меня тоже темная тема, но менее контрастная и тоже всегда включаю именно чтобы видеть табы.


  1. Farxial
    05.09.2016 14:37

    Пока исходники не хранят в байт-коде, использую табы.


  1. NetNazgul
    05.09.2016 14:38

    Следующий шаг — исследовать соотношение кода

    if (true) {
    }
    

    и
    if (true)
    {
    }
    


    1. maaGames
      05.09.2016 14:51

      Не кошерно. Нужно так:
      (cond)? (true): (void)();

      (void)() в качестве заглушки для отсутствующей ветки else


    1. toxi_roman
      05.09.2016 17:08

      Я так и пишу в коде:

      if (true)
      {
      }
      

      Так легче найти блок (звернуть/развернуть) в редакторе.

      А если условие короткое, то пишу в одну строку:
      if (true){}else{}
      


      1. NetNazgul
        05.09.2016 17:18

        Речь не про тестовые блоки, а про перенос ключевого слова/скобки блока на новую строку


      1. webkumo
        05.09.2016 19:26

        > Так легче найти блок (звернуть/развернуть) в редакторе.

        Нормальный редактор умеет оба способа. А визуально — дело привычки. А вот пространство на экране — не резиновое… точнее плохо-резиновое

        > А если условие короткое, то пишу в одну строку:

        А вот за такое — убивать надо. Даже привычный взгляд будет спотыкаться, что уж говорить о тех, кто привык к «вертикальному» чтению…


    1. Farxial
      05.09.2016 22:38

      Потом — наличие пробелов перед круглыми скобками (кроме привидения типов C/Java). *занял очередь*