Как стать автором
Обновить

Комментарии 243

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

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

Я же не пишу, что НАДО использовать пробелы или что НЕЛЬЗЯ использовать таб. Я просто не понимаю, зачем использовать таб, когда быстрее отбить пару пробелов.
Проблема в том, что из-за некоторых личностей пробелы отбивать приходится чаще раза 4, поэтому табы куда удобнее. Пару тройку вложенностей пробелами отбивать по 4 раза — увольте. А еще удобнее использовать нормальный редактор.
Как раз таки не люблю подгонять привычки под редактор.
Это примерно так же вредно, как пытаться кнопкой «Break» поменять раскладку введенного текста, привыкнув к пунто-свитчеру. (Мне так комп вырубают, попадая на power, отличная работа.)

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

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

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

Сам не промахиваюсь, так что кнопку «чинить» так или иначе — лень.
НЛО прилетело и опубликовало эту надпись здесь
У меня для вас плохие новости:
http://image.prntscr.com/image/2dbfeba36ee94d89a31d556e39140fa8.png
НЛО прилетело и опубликовало эту надпись здесь
А что это за кейс, когда приходится регулярно работать в разных чужих IDE? У нас вот по опыту наоборот разработчики годами работают в любимой IDE и синхронизируют конфиг с домашней версией. Это повышает производительность, для того оно и придумано.
Парное программирование, подойти помочь новичку, найти на машине другого разработчика кусок кода и поправить багу.
Кейсов хватает. Я не ношу с собой нетбук, чтобы править как мне удобно, я просто привык к тем форматам, которые работают не зависимо от того, кто за ПК.
Думаю, это обусловлено спецификой именно вашей позиции. В общем случае регулярное написание кода за кого-то означает отсутствие желания делегировать ответственность со стороны лида и/или неспособность работать самостоятельно со стороны разработчика. В профессиональной команде оба случая по идее должны плавно сойти на нет. Отдельный случай — парное программирование, но в рамках проекта (а лучше всего пула проектов, использующих одни и те же ресурсы) все равно должны быть единые требования к написанию и оформлению кода, к которым участник команды рано или поздно привыкнет.
Это как хоткей ctrl+alt+L в IDEA, который на убунте блокирует комп.

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

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

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

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

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

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

Да не быстрее. Один отступ — ладно, а лесенку на 4-5 отступов тоже дятлом стучать? Табуляция применяется нередко, например при переключении приложений, при переходе по вкладкам IDE и в браузере, при сдвиге влево/вправо блока кода, а не строки.
А такие лесенки я никогда не был вынужден писать, вот уж извините. Не знаю, зачем это может потребоваться.
Тело метода — раз, два вложенных цила и 1 if — еще 3. Это примитивная маленькая функция.
НЛО прилетело и опубликовало эту надпись здесь
Если вы только кодите, то беспорно для вас Таб очень непопулярная клавиша. Я, же, «тракторист» старой закалки и еще в 90-х получил привычку безошибочно бить мизинцем в таб, при смене панелей в разных нортон/волков- командерах, а позже, с появлением табкомплитишина в линуксе я постоянно добиваю пути и команды именно табом.
Имхо, влияет на использование таба или пробела разница поколений и точка в хода в индустрию.
В командерах \ фаре табом пользуюсь. в IDE — как то не надо. Возможно и удобный вариант, надо проверять. Или не проверять, чтобы не ломать привычки.
Эти люди не хотят по-другому, они не используют все преимущества, которые им предоставляют всевозможные тулы. Есть исключения (нету редактора), но это редкость.

зы: я уже и забыл, когда сам делал отступы в коде.
Я так делаю, 2 пробела =)
Меня оправдывает то, что я не кодер, а админ, кода мало и пишу я его в основном через ssh в vim или mcedit.
Скромный вопрос: а в современных IDE всё ещё приходится выравнивать код вручную?
Что-то я привык к автоматическому выравниваю…
Выравнивать умеют и блокноты, и даже редакторы в браузерах.
Интересно, почему *.c и *.h считали отдельно.
*.h не только в C, но и в C++ используется.
*.h не известно куда добавить — к *.c или *.cpp
Если анализировались проекты целиком, то можно, в принципе, отследить. Просто получаются в некотором роде взаимоисключающие параграфы — в *.c лидируют с хорошим отрывом табы, а в *.h пробелы.
Есть много проектов, где выйдет мешанина. Например сам проект на С++, но использует legasy «С» библиотеки, ну например OpenSSL и аналоги.
Статистика С «испачкана» ядром линукса, где используются табы.
Я бы сказал, напротив — ядро линукса один из важнейших проектов на С, который помимо прочего показывает, что табы ещё живы.
Но это один проект. А статистика велась по фийлам. Ну и конечно-же — табы живы!

Самое страшное это проекты где есть и табы, и пробелы!
ИМХО в современных IDE делать отступы вручную — надо КРАЙНЕ редко. Code Format делает все сам прелестно.
НЛО прилетело и опубликовало эту надпись здесь
Я из «пробельщиков», но задумался вот над чем: так весь вопрос только в том, что табы в разных IDE занимают разное пространство?
И из-за этого были написаны десятки статей на хабре?
начнем с того что код еще и в блокноте смотрят, и в браузере и даже печатают! В итоге хочется таки иметь что-то одинаковое.
Одинаковое для кого? Для вас? А если я люблю отступ в 8 пробелов, зачем меня ограничивать потому что вам нравится 4? Все табы настраиваются везде, каждый кто будет смотреть увидит код так как он любит, а не так как любит автор кода. Пробелы — эгоизм.
Я думал что холиво давно закрыт и все используют пробелы.

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

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

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

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

Я понимаю, когда при диске в 5 мегабайт писали архиваторы, чтобы сжимать пустое место и ключевые слова в исходниках. Но сегодня считать доводом «тут 2-4-8 символов, а не 1»?
Это один из многих аспектов осмысленности действий погромиста. Отступ ставится кнопкой Tab, превращается в пробелы, которые приходится удалять по одному, ходить по ним курсором, а если копипастишь и зацепил выделением лишний пробел, сразу всё ломается. Куча лишних действий. Для чего? Для кого?
которые приходится удалять по одному, ходить по ним курсором, а если копипастишь и зацепил выделением лишний пробел

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

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

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


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

Никакой победы нету. Статья имеет ошибку в алгоритме и отсюда ложные выводы.
«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();



А ведь вся джава начинается с таких заголовков. И они ложно засчитывают пункт в сторону пробела, хотя реально в файле используется табуляция.
Я думал что холиво давно закрыт и все используют табы.
А я думал, что это тема обсуждения интересна только в Python.
Адепты языка GO явно что-то знают!
Не хочу выступать К.О., но это потому что у них с этим строго.
У них в синтаксисе короткие слова, которые с табами в 4 символа хорошо сочетаются (ну и форматер стандартный, но как видно по гитхабу, не все его используют).

func f() {
    var a = 5,
        b = 5;
}
По-хорошему, в документации к gofmt табы по 8 символов, но не всем и не всегда бывает так удобно.
Теперь и я знаю зачем мне нужен GO

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

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

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

Вообще-то с табами обязательно нужно использовать пробелы. Например в некоторых конструкциях люди, использующие табы часто делают так:
[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;


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

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

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


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

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

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

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

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

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

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

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

НЛО прилетело и опубликовало эту надпись здесь

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

В C# расширение файлов cs и оно присутствует в рейтинге.
Тот же вопрос по swift-у. :(
использую то что, иде предлагает.
А с GoLang ситуация ясна, в го заставляют юзать gofmt.
Не знаком с языком, но почему в Go практически только табы, синтаксис?
Встроенная утилита gofmt является одним и единственным на всех форматированием кода. Программы просто не компилируются, если не соблюдать ее правила. Для указания отступов там используются только табы. Для выравнивания используют только пробелы. Т.е., по сути, то, как это должно было быть с самого начала у всех и с чем никаких проблем никогда не будет при отображении. А все проблемы пошли от того, что кому-то вздумалось выравнивание делать табами, от чего и съезжает в разных просмотрщиках все.
Программы просто не компилируются, если не соблюдать ее правила.

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

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

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

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


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

В личных проектах тоже запускаю gofmt, просто потому что это удобно.
На самом деле там два парсера — один в gofmt, другой непосредственно в компиляторе. Компилятору пофиг на табы и пробелы. А gofmt создает синтаксическое дерево и по нему заново строит код по сути.
Скорее хипстерские редакторы ;)
Если я не ошибаюсь для java и в eclipse, и в intellij пробелы по умолчанию используются для отступов. Причем разницу заметить сложно, так что если принципиальной разницы нет, то они так и останутся. Думаю это вполне может потянуть на один из факторов

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

В python есть PEP-8
Вместо того, чтобы думать про чистоту кода на уровне дизайна, люди заморачиваются с какого конца разбивать яйцо… Гламурненько!
Чистота кода начинается как раз с его оформления, дизайн — это уже следующий этап.
Оформление должно преследовать только одну цель — улучшение читаемости кода. Если ты видишь отступ, то очень странно задумываться что там «внутри»: пробелы или табуляция.
> Если ты видишь отступ, то очень странно задумываться что там «внутри»: пробелы или табуляция.
А если ты видишь отступ на 8 символов, и у тебя часть кода оказывается за пределами экрана? Потому что там табуляция, а в твоем редакторе её размер 8 колонок?
А если того хуже, ты видишь часть кода смещённой влево, часть вправо, и это потому, что его писали в разное время разные разработчики, один ставил два пробела, а другой делал отступы табом. И в итоге код первого отображается «как есть», а код второго едет по настройкам табуляции текущего редактора.
Поэтому задумываться над этим как раз приходится. А читаемость кода, она как раз первичнее любого дизайна. Потому что нечитаемый код не может априори иметь хороший дизайн и подлежать нормальному сопровождению.
А если ты видишь отступ на 8 символов, и у тебя часть кода оказывается за пределами экрана? Потому что там табуляция, а в твоем редакторе её размер 8 колонок?

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

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

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

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

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

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

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

А если автор кода использовал 8 пробелов для отступа, что мне делать в редакторе чтоб оно не уезжало?
Поставить в редакторе длину табуляции в 2 или 4 колонки, не? Я выиграл миллион?
ответ
Вы готовы менять настройки редактора под капризы каждого исходника? Мне кажется, это за гранью продуктивной работы.
А если не видишь отступ, потому, что автор намудрил с табами или пробелами? Тут-то после 20-го кодревью ТимЛид с окровавленными глазами и хлопает кулаком постолу со словами «хватит это терперть, слушать всем сюда! С этого дня переходим все на форматирование пробелами/табами (нужное подчеркнуть) „
Достаточно один раз спокойно сказать: «у нас отступы N символов». Если форматирование поехало — заворачивать сразу на ревью. И не надо делать окрававленные глаза и стукать кулачками по столу — это как минимум смешно.
В IDE использую то, что предлагает IDE (так понимаю, чаще всего это 2 или 4 пробела — разные установки по умолчанию)
В текстовых редакторах использую исключительно табы, если это не правки в чужой проект.
В IDE тоже желательно использовать настройки проекта или хотя бы придерживаться тех отступов, которые у тебя в текущем файле, я бы даже сказал, в текущей функции / методе. Не редко бывают проекты, где часть кода с пробелами, а часть с табами. Более того, иногда в одной строке могут быть как пробелы, так и табы :(
Space, only space!
«Нам нужно больше пробелов, больше!»
Чаще всё-таки в go (там настолько часто, что почти одни только табы), а вот больше — в C (но частота так себе, почти пополам). Если под чаще понимать вероятность попасть в цель, ткнув наугад.
Ну а где проверка насколько уменьшится объем кода при замене пробелов на табы?
Привык к пробелам хотя могу и табы, в IDE использую таб переводимый в пробелы. А холивара по поводу символов конца и такой же статистики строки случаем нету?))
В том же Саблиме — табы легко на пробелы заменяются, а наоборот часто не очень. Потому предпочитаю табы.
Я давно не могу понять, почему пробелы популярнее табов, и почему они вообще используются для отступов. Это для меня величайшая загадка. Табы — специальные символы для отступов от края, они для этого и придуманы еще со времен печатных машинок. В редакторах их визуальную длину можно регулировать. Когда нажимаешь backspace, удаляется весь таб целиком; если использовать пробелы, то в этой ситуации тебе надо жать два или четыре раза. Короче, я не понимаю людей.
А что за кейс с удалением одного таба? Я обычно строчку целиком удаляю, т.е. ctrl+backspace.
В Python часто при рефакторинге натыкаюсь на лишние отступы. Конечно, можно и Ctrl+[ нажать, многие редакторы эту комбинацию поддерживают, но если уже курсор упал на начало кода в этой строке, то можна и backspace ткнуть. Это мелочь, просто табы ведут себя логично, а пробелы мне кажутся какими-то костылями.
Выше же писали уже — с пробелами код всегда и сразу железобетонно одинаково выглядит в любом редакторе. Даже если на чужом компе открываешь файл каким-н блокнотом посмотреть, а там у человека таб шириной 8 пробелов и все размажется по экрану, что тоже лезть в настройки менять, а потом обратно?
Так это же как раз недостаток. Если в проекте используются табы, любой участник может открыть файл и настроить визуальные отступы так, как ему нравится — хоть в два символа, хоть в десять. И это никак не затронет сам код. Если же используются пробелы, программист, нравится ему это или нет, вынужден подстраиваться под принятые гайдлайны, и ничего он с этим не поделает.
Пример с блокнотом, откровенно говоря, является редким случаем и мало относится к разработке как таковой. Это, скорее, из будней админа, который скрипт на сервере поправляет.
программист, нравится ему это или нет, вынужден подстраиваться под принятые гайдлайны, и ничего он с этим не поделает.

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

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

то что тогда?
Табы позволяют программисту работать в привычном стиле, не нарушая гайдлайнов. Вместо того чтобы проклинать своих коллег, которые придумали отступы в 8 пробелов, он может спокойно поменять длину таба у себя в редакторе и не париться.
Вот вам форматирование табами. Не совсем отступы от края, но привычка используется для этого та же. В IDE это выглядит ровно. Или такое как раз пробелами набивать бешено давя на клавишу?
#define AAAAAAA		1
#define B			2


Как раз такие отступы я, во-первых, не поощряю, а во-вторых, если уж они вам сильно нужны, то естественно их следует выполнять в виде пробелов. Таб — отступ от края. Пробел — отступ между символами.
Так большинство этого не понимает. + такая ситуация: https://habrahabr.ru/post/308974/#comment_9783072, тут не между символами
Программист должен, нет, обязан даже подстраиваться под проект

Ужас какой, про инструменты автоматического форматирования кода при коммите вы наверно не слышали? Скажите пожалуйста, в какой фирме вы работаете, я ее в черный список сразу закину.
Вы тут нам холивары не путайте! Расстановка скобок — совсем другой холивар, ещё, пожалуй, холиваристей этого.
А потом, я такой с настройкой конвертирования табов в пробелы кликаю «переформатировать» и что происходит? Табов в коде больше нет и вернуть их нельзя фактически.

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

И правильно сделали. Это ваша локальная копия, делайте с ней что хотите.
Эм, так я потом это же и зачекиню. Особенно если студия же игнорит пробелы при чекине.
Так настройте автоформатирование при коммите и будет вам счастье.
Существует способ вернуть табы из пробелов?
Я не понимаю, как вернуть теперь файл, кроме полной отмены и внесения исключительно моих изменений.
Существует способ вернуть табы из пробелов?

Так я же говорю, есть инструменты автоматического форматирования, они выполнены в виде настраиваемых консольных утилит. Вешаете их на хук git при коммите и они вам из ваших пробелов сделают табы и наоборот (смотря как настроите). И не мучайте больше себя и коллег.
Вот поэтому я и ратую за табы. Если принять их за единый стандарт, то все эти инструменты для форматирования утратят свою актуальность. Не нужно прописывать в гайдлайнах длину отступа, не нужно париться о том, что у тебя редактор что-то конвертировал не так. Ставишь таб — и все у тебя хорошо. И этот таб — он и в Африке будет табом. А как ты его у себя в редакторе отобразишь — это твое дело.
Такое ощущение, что мы пишем разный код. В разных IDE, с разными сниппетами и разными гайдлайнами. Потому что когда я делаю новую строку при незакрытой кавычке, VS спокойно может не тот отступ проставить. Потом я исправлю кавычку, а чтобы руками не пробивать правильный отступ — использую хоткей на переформатирование. Таб не таб — никакой разницы.
НЛО прилетело и опубликовало эту надпись здесь
Ну так когда нет аргументов всегда в ход идут «преувеличения».
Например кроме виндового блокнота нет ничего. Там даже поменять нельзя. Xml-файл имеющий в ide ширину таба в 2 некисло разъезжается.
тоже лезть в настройки менять, а потом обратно?

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

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

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

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

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

Оно же настраивается, нет?
Добавляете файл .editorconfig и применяете свои настройки indent_style и indent_size
Спецификация — EditorConfig.org
github поддерживает это нативно
Не понимаю холивар между церквями табуиров и спайсериан. По-моему это такой же бред как опускание крышки унитаза.

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

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

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

Эта статистика показывает только одно — абсолютно всё равно, пробелы или табы. Можно юзать и то, и то, и никто от этого не умрёт. Кодстайлы в первую очередь должны быть одинаковыми у всех в проекте и лишь во вторую очередь учитывать мелкие плюсы и минусы пробелов/табов, переноса открывающей фигурной скобки, ширины отступа и тд.
А в какую категорию попал код где используется смешанный отступ? Я видел (и работал с) кодом где 1 отступ — 4 пробела, все группы из 8 пробелов заменяются на таб. Таким образом 3 уровня отступа — 1 таб и 4 пробела.
Так, наверное, выглядит ад.
Похоже, этот код набирали в Midnight Commander'е.
В Delphi/Lazarus/Pascal два пробела, в C/C++ — таб.
Проблема «табы vs пробелы» это локальная проблема общих настроек IDE у команды, а не глобальная. Связанная она с репозиторием кода, очень сложно мержить и ревьювить код когда там весь диф «красный» из-за разных настроек отступов у колег по цеху. Поэтому холивар, считаю, бестолковый на уровне религии и астрологии.

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


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

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

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

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


Можете пояснить? Какие IDE и какие компиляторы как по-своему обрабатывают табуляцию?
Табуляция – это просто 1 символ. По-моему, любой современный текстовый редактор сейчас позволяет настроить как его показывать (какой длины он должен быть).
Что вы имеете в виду?
Это конечно не IDE, но в Makefile оно так и есть
Так и есть – в смысле, там есть разница пробел используется или tab?
Да.
Ну, окей, но это все равно пример натянутый несколько. Речь шла о языках программирования и IDE, и, я так понимаю, наиболее популярных. Java, C++, Ruby, etc., IDEA, NetBeans, Visual Studio, Vim, etc. – для них нет разницы, пробелы используются или tab. Как и для компиляторов/интерпретаторов тех языков. Просто фраза в статье довольно некорректно звучит, по-моему.
«Людям не нужны лучшие стандарты, людям нужны стандартные стандарты»
«Табы занимают меньше места» — это какое-то типичное мнение любителей пробелов о тех, кто предпочитает табы.
Я предпочитаю табы, но размер — это простите последнее о чем я вообще могу подумать в качестве аргумента «за». Более того — я предпочту не использовать этот аргумент, т.к. он — глупый.
Табы и шрифты с лигатурами.
Я за табы, но использую пробелы, потому что стандарты кодирования.
Когда то давно активно использовал пробелы для всех целей форматирования, но затем задумался — а почему? — в результате получил вот такой ответ:

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

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

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

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

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


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


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


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


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


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


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

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

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

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

https://habrahabr.ru/post/118208/ 2011 год)
Но при этом такая же ситуация у себя в коде людей не бесит :-)

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

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

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

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

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

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

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

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


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

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

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

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

Почему обязательно моноширинный? У меня не моноширинный, например, никакая IDE не принуждает.
Меня каждый раз минусуют, потому сошлюсь на то, что вроде у Страуструпа тоже :)
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
Нагуглил ещё elastic tabstops, но это концепт, как я понял.

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

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

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

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


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

P.S. Тег «перевод» ставить не нужно, к чему оно? ))
Я ненавижу пробелы по одной простой причине — их неудобно удалять.

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

P.S. Людей которые индентируют код нажимая клавишу пробел я вообще не понимаю.
Во многих IDE уменьшение отступа делается горячей клавишей, в частности, через Shift+Tab, ничего руками удалять не надо.

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


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

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

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


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

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

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


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

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

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

Когда надо уменьшить идентацию, можно юзать комбинацию shift + tab, или вообще отформатировать весь код сразу через ctrl + shift + f
Рискну предположить, что большая популярность табов в 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).»

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

Совсем запутали))))
Я опечатался. Конечно же, Java Code Conventions популяризирует именно пробелы, а не табы.
Либо на хабре много сиплюсплюшников, либо выборка оказалась не совсем корректной, т.к голоса сместились в сторону табов…

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

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

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

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

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

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

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


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

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


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

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


НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Удивительно, сколько костылей надо подставить, чтобы это решение работало. А всего лишь то надо перейти на табы+пробелы
И какая разница в какую сторону костылировать, если разработчик захотел не так, как в сырцах?
НЛО прилетело и опубликовало эту надпись здесь

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


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

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

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

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

*.* (PhpStorm и прочие «идейные IDE») — очень даже прокатит, и с табами, и таки с пробелами. А по shift-tab подвинет взад.
Очень удивлён, что никто до этого момента не вспомнил Лилипутию, которая воевала с Блефуску из-за спора о том, с какой стороны разбивать яйца. И не известно, чем дело кончилось… Думаю в тему будут несколько цитат из Свифта (это не язык программирования ;) ):
Всеми разделяется убеждение, что варёные яйца при употреблении их в пищу испокон веков разбивались с тупого конца; но дед нынешнего императора, будучи ребёнком, порезал себе палец за завтраком, разбивая яйцо означенным древним способом. Тогда император, отец ребёнка, обнародовал указ, предписывающий всем его подданным под страхом строгого наказания разбивать яйца с острого конца.
Насчитывают до одиннадцати тысяч фанатиков, которые в течение этого времени пошли на казнь, лишь бы не разбивать яйца с острого конца. Были напечатаны сотни огромных томов, посвящённых этой полемике, но книги Тупоконечников давно запрещены, и вся партия лишена законом права занимать государственные должности.
Между тем это просто насильственное толкование текста, подлинные слова которого гласят: «Все истинно верующие да разбивают яйца с того конца, с какого удобнее.»
НЛО прилетело и опубликовало эту надпись здесь
В таблице [contents] записаны файлы без своих дубликатов. Ниже указано общее количество уникальных файлов и их суммарный размер. Дубликаты файлов не учитывались в ходе анализа.

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

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

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

П.С.
Для себя использую табы, по текущей работе — пробелы.
Не силён в скриптах. Считались табы-пробелы только в начале строки или вообще все табы-пробелы?
В своих проектах я использую табы в качестве отступов. Пробелы уже если есть необходимость. В других «кодерах» использую то, что уже было, пробелы/табы, чтобы было одинаково хотя бы в том участке кода, с которым я работаю.
Еще есть некоторые такие обработчики, которые принимают только пробелы в качестве отступов, а табы не распознают.
Вы будете смеяться, но меня все-таки заставили перейти на пробелы не горячие холивары,
а подсветка символов в IDE (я предпочитаю их включать):

image

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

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

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

Сейчас меня пытаются убедить перейти на 2 пробела вместо 4, аргументируя тем, что это мэйнстрим на github'е.
Но пока держусь), по-моему, читабельность кода существенно снижается на 2 против 4, но, возможно, что и ошибаюсь.
Можно поинтересоваться, зачем подсвечивать пробелы? Вижу, что переводы строк не обозначены, значит, непечатаемые символы всё-же скрыты.
Хе, а как на меня подсветка символов в ИДЕ — одно из важных преимуществ табов. Ты всегда видишь глубину, а от пробелами видно хуже. У меня тоже темная тема, но менее контрастная и тоже всегда включаю именно чтобы видеть табы.
НЛО прилетело и опубликовало эту надпись здесь
Следующий шаг — исследовать соотношение кода
if (true) {
}

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

(void)() в качестве заглушки для отсутствующей ветки else
Я так и пишу в коде:
if (true)
{
}

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

А если условие короткое, то пишу в одну строку:
if (true){}else{}
Речь не про тестовые блоки, а про перенос ключевого слова/скобки блока на новую строку
> Так легче найти блок (звернуть/развернуть) в редакторе.

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

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

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

Публикации