Комментарии 243
Использую почти всегда IDE. тектовые файлы только для скриптов.
В проектах стараюсь использовать только пробелы. Отбивку делаю естественно клавишей TAB. Разные языки, проекты и редакторы имеют разное количество пробелов в оступе между блоками и я не собираюсь следить за этим. ТАБ делает за меня эту работу.
Тем не менее в большинстве редакторов попробуйте кодить с копипастой. Если вы всегда попадаете в нужную разметку — вы бог. Если у вас IDE сама выравнивает — божественная IDE. У меня же всё низменно и просто. Либо я не попадаю в разметку и мой текст куда-то убежал, либо IDE косячит разметку, которую я хочу видеть. Речь идёт в частности о вторых, третьих параметрах, когда идет вызов одинаковой/ых функций, заполнении текстур и т.д.
И вот тогда я использую божественный пробел, который приводит мою разметку к удобному, читаемому виду, а не пытаюсь угадать где же мне поставить пару табов и потом еще пару backspace-ов.
А с точки зрения структурирования вообще — я сторонних пробелов. Именно из-за ужасно неопределённого поведения ТАБов. Бывало что текст начинался с половины страницы.
Хорошие IDE сами конвертнут тебе табы в пробелы, переформатируют перед открытием и сохранением и т.д.
И тем не менее пробелами можно добить 3 нужных раза, можно добить на глазок, когда не сразу видно сколько там табов и т.п.
Пробел — под большим пальцем, кликнуть два раза — не проблема.
Таб — не интуитивен и не глядя сложно попасть, особенно без привычки.
Я же не пишу, что НАДО использовать пробелы или что НЕЛЬЗЯ использовать таб. Я просто не понимаю, зачем использовать таб, когда быстрее отбить пару пробелов.
Это примерно так же вредно, как пытаться кнопкой «Break» поменять раскладку введенного текста, привыкнув к пунто-свитчеру. (Мне так комп вырубают, попадая на power, отличная работа.)
Лучше я буду руками вбивать текст одинаково, чтобы работала мышечная память, а не пытаться каждый раз сообразить, а в том ли я редакторе, где таб развернётся в пробелы.
ПС: не всегда же приходится писать в IDE, а ещё — не всегда в своей IDE, где всё настроено под вас.
А востребована ли у вас кнопка power
? Может её того? В студенческие годы я умудрялся несколько раз подряд перегружать университетский ПК, нажимая её вместо PrintScreen. Несколько досаждало.
Кейсов хватает. Я не ношу с собой нетбук, чтобы править как мне удобно, я просто привык к тем форматам, которые работают не зависимо от того, кто за ПК.
Tab отлично лежит под мизинцем левой руки. К тому же те самые пробелы, которые вы отбиваете space-ом, большинство отбивает всё тем же Tab-ом. Хотя по правде говоря для меня и Ё отбивать не составляет труда. Мизинец не так уж и короток.
Имхо, влияет на использование таба или пробела разница поколений и точка в хода в индустрию.
зы: я уже и забыл, когда сам делал отступы в коде.
Меня оправдывает то, что я не кодер, а админ, кода мало и пишу я его в основном через ssh в vim или mcedit.
Что-то я привык к автоматическому выравниваю…
И из-за этого были написаны десятки статей на хабре?
А я думал, что похоливарили и перешли на табы. ;)
Хотя сам конечно же использую табы, и шрифт не моноширинный ещё, ну чтобы работу себе усложнить, не делайте так никогда.
Например, если брать bash, который с некоторым натягом таки можно считать языком программирования, то для него наиболее естественно использовать табы, ибо только ими можно делать отступы для here-docs.
В питоне отступы в виде четырёх пробелов прописаны в PEP, поэтому табовые бунтари в меньшинстве.
У go, похоже, самое сплочённое сообщество в смысле статьи.
Похожая беда с автозаменой переводов строк. И с финальным переводом строки. Просто диктатура людей на местах, чем управляем, тем и давим несогласных — борьба мемов влияет на реальность, чисто по Докинзу.
А теперь вместо одного символа на очередной уровень отступа там этих символов несколько.
Я понимаю, когда при диске в 5 мегабайт писали архиваторы, чтобы сжимать пустое место и ключевые слова в исходниках. Но сегодня считать доводом «тут 2-4-8 символов, а не 1»?
которые приходится удалять по одному, ходить по ним курсором, а если копипастишь и зацепил выделением лишний пробел
Да нет, все от IDE зависит. У меня клавиши «влево»-«вправо» по отступам переходят, при том, что они — пробелы. Удаляется все опять же комбинацией клавиш «убрать отступ», встроенной в IDE. При копировании, выделении, сразу целиком отступ копируется.
1. Если человеку удобно нажимать на Таб, но гайдлайны проекта не позволяют табы-символы, человек ставит настройку «заменить таб на пробелы» — все счастливы и довольны. «Человек-таб» понимает ситуацию и принимает ее с компромиссом в виде настройки.
2. Если человек принципиально пользуется пробелом, но гайдлайны требуют табы (да, такое бывает) — человек будет брюзжать, дуться и топать, требуя смены гайдлайнов, ни о каком компромиссе или настройках речь даже не идет (повторюсь, все очень субъективно, может мне просто не повезло, и понимающие ситуацию «люди-пробелы» мне просто не попадались). Косвенно это глобальное явление подтверждается тем, что чаще всего опции в IDE «превращать пробелы в табы» просто не бывает — «люди-пробелы» в принципе не рассматривают возможность инакомыслия.
набор сомнительных доводов и агрессивная автозамена табов на пробелы привела к победе одной из сторон.
Ага. А еще такие ложные статьи с ошибочной статистикой, как эта.
Никакой победы нету. Статья имеет ошибку в алгоритме и отсюда ложные выводы.
«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();
А ведь вся джава начинается с таких заголовков. И они ложно засчитывают пункт в сторону пробела, хотя реально в файле используется табуляция.
func f() {
var a = 5,
b = 5;
}
Из-за этого и появляются проекты вроде EditorConfig. Кстати, не могу понять, почему он не упомянут в статье, как возможное, и, наверное, наилучшее на данный момент средство удаления разногласий в этом вопросе.
Отступы табами, всё, кроме отступов пробелами.
И не забыть вычесть из этого числа smart-tabs
[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;
Если использовать только пробелы, то проблем тоже не будет
Смотря какой тул использовать. Если использовать качественный — то все будет нормально выравниваться, если в простом блокноте работать — да, будет не удобно.
Но в указанном примере есть проблема: в настройках стоит 8 знаков на 1 таб, если было бы 4 — было бы красивее.
Обычно табы в 4 символа хорошо сочетаются с языками в которых короткие ключевые слова: def, var, let, val; потому их там и любят применять.
зы: я предпочитаю пробелы.
Насколько я понимаю, это как раз и есть smartTabs
. Табы для indent-а, а пробелы для aligment-а. Наверное, это единственная заморочка с табами, что мне попадалась (в сравнении с пробелами). Использование tab-ов для выравнивания гарантировано превращает код в кашу за пределами вашего редактора.
В остальном же Smart Tabs — отличный способ позволить людям использовать свой любимый indent, просто выставив ширину таба в настройках редактора.
При настроенном табе в 2 или 8 символов (а это ведь один из основных доводов)
Вообще-то, табуляция изначально не в символах, а в частях листа, грубо говоря, это условные колонки, на которые он поделен, так что в электронном виде у него вообще должна быть переменная длинна, особенно не в моноширинных шрифтах.
Какой вообще смысл приравнивать таб к пробелам — или вы привязываетесь к началу какой-то колонки (типа красной строки) или — нет. Если — нет, то что, большое значение имеют с какой кнопки запускать скрипт, который проставит удобное количество пробелов?
Кстати, вот интересно, а в каком-таком рейтинге C#
не входит в список 14 самых популярных языков программирования?
А с GoLang ситуация ясна, в го заставляют юзать gofmt.
Программы просто не компилируются, если не соблюдать ее правила.
Вообще конечно компилируются, просто подавляющее большинство разработчиков запускает gofmt после сохранения/перед коммитом.
неправильно расположенные { } вываливаются в ошибку компиляции
Это не из-за того что это стилевая ошибка, просто лексер языка устроен так чтобы автоматически "вставлять" точки с запятой в нужных местах. Механизм этой автоматической расстановки точек с запятой описан в спецификации, и из него следует, что if
ы и прочие стейтменты должны содержать открывающую скобку на той же строке, иначе точка с запятой вставится не туда, куда нужно. То, что это принуждает использовать конкретный стиль, является следствием, а не причиной и не основной мотивацией.
Программы просто не компилируются, если не соблюдать ее правила.
Большинство правил форматирования можно спокойно нарушать и программа при этом нормально компилируется.
Но в больших проектах часто делаются автопроверки на соответствие кода стилю и туда не пропускаются коммиты, не соответствющие правилам gofmt — чтобы код выглядел одинакого.
В личных проектах тоже запускаю gofmt, просто потому что это удобно.
А если ты видишь отступ на 8 символов, и у тебя часть кода оказывается за пределами экрана? Потому что там табуляция, а в твоем редакторе её размер 8 колонок?
А если того хуже, ты видишь часть кода смещённой влево, часть вправо, и это потому, что его писали в разное время разные разработчики, один ставил два пробела, а другой делал отступы табом. И в итоге код первого отображается «как есть», а код второго едет по настройкам табуляции текущего редактора.
Поэтому задумываться над этим как раз приходится. А читаемость кода, она как раз первичнее любого дизайна. Потому что нечитаемый код не может априори иметь хороший дизайн и подлежать нормальному сопровождению.
А если ты видишь отступ на 8 символов, и у тебя часть кода оказывается за пределами экрана? Потому что там табуляция, а в твоем редакторе её размер 8 колонок?
Любой редактор способен установить табуляцию на конкретное число символов.
один ставил два пробела, а другой делал отступы табом.
Если отступы во всем коде имеют одинаковое число пробелов, то см. пункт выше. Если нет (один разработчик ставит 2 пробела, второй 4 а третий 8) то это совершенно другая проблема.
Потому что нечитаемый код не может априори иметь хороший дизайн
В качестве опровержения: Берем отлично форматированный код с прекрасным дизайном, пропускаем через обфускатор. Получаем полностью нечитаемый код. Что, дизайн тоже «испортился»?
> Если отступы во всем коде имеют одинаковое число пробелов,
Вы готовы менять настройки редактора под капризы каждого исходника? Мне кажется, это за гранью продуктивной работы.
> Берем отлично форматированный код с прекрасным дизайном, пропускаем через обфускатор.
> Получаем полностью нечитаемый код. Что, дизайн тоже «испортился»?
Нет, но код на выходе обфускатора уже не имеет отношения к предмету спора. Он не предназначен для разработчиков, и это просто заготовка для дальнейшей машинной обработки. С тем же успехом вы можете в качестве «опровержения» привести обычную компиляцию в бинарник. При этом тоже дизайн не меняется, а всего лишь преобразуются человекочитаемые конструкции в машинные коды.
Потому что там табуляция, а в твоем редакторе её размер 8 колонок?
Поставить в редакторе длину табуляции в 2 или 4 колонки, не? Я выиграл миллион?
А если автор кода использовал 8 пробелов для отступа, что мне делать в редакторе чтоб оно не уезжало?
В текстовых редакторах использую исключительно табы, если это не правки в чужой проект.
«Нам нужно больше пробелов, больше!»
Пример с блокнотом, откровенно говоря, является редким случаем и мало относится к разработке как таковой. Это, скорее, из будней админа, который скрипт на сервере поправляет.
программист, нравится ему это или нет, вынужден подстраиваться под принятые гайдлайны, и ничего он с этим не поделает.
Естественно. Программист должен, нет, обязан даже подстраиваться под проект. Не нравится — пусть идет в другой проект или делает свой. А если кому то из програмистов скобочки приспичит так писать
if (a) {
}
вместо расово-верных используемых в проекте
if(a)
{
}
то что тогда?
#define AAAAAAA 1
#define B 2
Программист должен, нет, обязан даже подстраиваться под проект
Ужас какой, про инструменты автоматического форматирования кода при коммите вы наверно не слышали? Скажите пожалуйста, в какой фирме вы работаете, я ее в черный список сразу закину.
Всем спасибо, табы на выход.
то и табы я чьи то случайно удалил
И правильно сделали. Это ваша локальная копия, делайте с ней что хотите.
Я не понимаю, как вернуть теперь файл, кроме полной отмены и внесения исключительно моих изменений.
Существует способ вернуть табы из пробелов?
Так я же говорю, есть инструменты автоматического форматирования, они выполнены в виде настраиваемых консольных утилит. Вешаете их на хук git при коммите и они вам из ваших пробелов сделают табы и наоборот (смотря как настроите). И не мучайте больше себя и коллег.
тоже лезть в настройки менять, а потом обратно?
А зачем обратно? Нормально настроить ширину табов и забыть о них не? А если вы используете 8 пробелов для отбивки, как мне посмотреть ваш код? Что в редакторе надо для этого настроить?
Лучший комментарий касаемо всего этого безумия «tabs vs. spaces», что я видел до сих пор.
Спасибо!
Я давно не могу понять, почему пробелы популярнее табов
Этого никто не знает, поверьте. Просто люд привык. Я сам когда то использовал пробелы для отступа, а потом спросил себя — а нах*ра? — после начал использовать табы.
(дошик — пробелы )

Вебгуй гитхаба давольно паршиво отображает код на табах — эквивалетно 8 пробелам.
Спецификация — EditorConfig.org
github поддерживает это нативно
Может не так удобно переключаться между проектами, но в рамках одного проекта можно выбирать любой метод и просто не смешивать подходы.
Клянусь, на данный момент я не знаю ни одной системы контроля версий, которая не умеет в диффах игнорировать различия в пустых символах.
Это, конечно, не оправдание для смешения разных стилей стилей в одном проекте или (того хуже) файле. Если такая ситуация при слияниях встречается у коллег по одному цеху — в цехе явно проблемы.
различные IDE и их компиляторы обрабатывают табуляцию также по-своему
Можете пояснить? Какие IDE и какие компиляторы как по-своему обрабатывают табуляцию?
Табуляция – это просто 1 символ. По-моему, любой современный текстовый редактор сейчас позволяет настроить как его показывать (какой длины он должен быть).
Что вы имеете в виду?
Я предпочитаю табы, но размер — это простите последнее о чем я вообще могу подумать в качестве аргумента «за». Более того — я предпочту не использовать этот аргумент, т.к. он — глупый.
Пробелы для всех целей форматирования (отступ и выравнивание) используется только теми людьми, которые считают свою стиль форматирования наиболее кошерным и совершенно не приемлют других форматов. Даже нет, не форматов, а других мнений и предпочтений! Подумайте сами, мне нравится использовать для отступов в исходном коде 2 столбца, а для отступов в «стене» XML 4, а то и 6 столбцов (в зависимости от «заполненности стены» символами), но мне присылают файлик, в котором 2 пробела под XML и 4 под исходные коды. Мне это не привычно, не удобно, но моему коллеге на меня плевать, он считает свой формат самым правильным и ему совершенно не важно, что существуют инструменты, позволяющие хранить тексты в репозитории в неком стандартном виде (автоматическое форматирование при коммите), а писать и просматривать локально в том виде, в котором вы привыкли.
Вот такие выводы были мной сделаны. Подрезюмирую: используйте то что вам нравится (в том числе и стиль скобок, переносов и т.д.). Это позволит вам с помощью соответствующих инструментов хранить тексты в стандартном виде, а получать в удобном для вас формате. Никогда не требуйте от ваших коллег придерживаться на письме определенного стиля. Стиль, это их дело и вы не в праве его оспаривать.
P.S. Сам использую табуляцию для отбивки и пробелы для выравнивания.
P.P.S. Терпеть не могу, когда требуют соблюдения PSR-1 и PSR-2 на письме. Эти стандарты разработаны для корректной настройки инструментов автоматического форматирования (если кто не в курсе).
Откуда такой вывод? Я в таблице явно вижу, что чаще всего табуляция встречается в Go, практически 99%.
Просто самих проектов на Си пока что в выборке больше, чем на Go.
Закрыл для себя этот вопрос давным-давно.
Спор „пробелы против табов“ имел под собой хоть какие-то логические основания, когда IDE не умели с ними работать: надо было нажимать много раз пробел или бекспейс (при использовании пробелов), выравнивание ломалось при смене размера таба (при использовании табов).
Сейчас IDE умеют работать с табами, а люди до сих пор не научились.
Главный плюс табуляции — семантичность. Это символ, специально созданный для отступов.
Когда вам нужно поставить ссылку, вы же пишете <a href="…">
, а не <span onclick="…"
?
Наверняка, каждого более-менее технически подкованного человека бесит, когда в ворде отступ параграфа сделан не отступом параграфа, а пробелами (скачайте пару первых попавшихся рефератов). Но при этом такая же ситуация у себя в коде людей не бесит :-)
Все остальные аргументы теряют свою важность перед смыслом: размер файла, можно конфигурировать ширину, выглядит одинаково — вы серьёзно?
Самый разумный и естественный метод отступов — это смарт-табуляция: табы для отступов, пробелы для выравнивания:
Если среда разработки не понимает смарт-табуляцию и не может автоматически понять, где вставить табуляцию, а где пробел, то грош ей цена, такой среде.
Вот скриншот из настроек джетбрейновской Идеи:
https://github.com/maximal/tab
https://www.emacswiki.org/emacs/SmartTabs
Спасибо на добром слове. „Раз и навсегда“ не получится, думаю :-)
По поводу статьи чёрт его знает, репозиторием в Гитхабе, думаю, лучше.
Реквестирую запостить в виде отдельной статьи
https://habrahabr.ru/post/118208/ 2011 год)
Но при этом такая же ситуация у себя в коде людей не бесит :-)
Это некорректный аргумент: код моноширинный и форматирование пробелами не едет при добавлении/удалении отступа.
Если среда разработки не понимает смарт-табуляцию и не может автоматически понять, где вставить табуляцию, а где пробел, то грош ей цена, такой среде.
Смысл, если можно везде использовать пробел, без переключений? И для отступа, и для выравнивания? Вы предлагаете более сложную систему, которая функционально полностью эквивалентна «пробельной» — зачем?
«тут внутри строки я нажимал Tab среда сама поставила пробелы — в чем разница с ситуацией, когда пробелы будут везде?
Все остальные аргументы теряют свою важность перед смыслом
Исходный смысл табуляции — разметка таблиц при печати, он утерян уже очень давно.
* Про «смысл» полная чушь, многие вещи используют по назначению изначально не рассчитанному.
* Про «смарт-табуляцию». Сначала издалека. Два единственных плюса табов это размер исходного текста и изменение ширины в зависимости от настроек у конечного пользователя.
Первый плюс ничтожен, так как занимает место только у разработчиков, на конечных пользователей это не влияет. По сравнению с несжатым видео, которое приходиться хранить — капля в море и смех под бородой.
Второй плюс сходит на нет при использовании смарт-табуляции, потому что если будут заменены табы другими размерами, допустим с 4 до 2, то пробелы для выравнивания всё испортят. Этот плюс не важен, если у вас «среда, которой не грош цена», заменяющая серию пробелов на табуляцию с последующим изменением размера отступов.
Пробелы не решают проблемы их различного количества у проектов. У кого-то два, у кого-то четыре. Вместо того, чтобы использовать правильное решение вообще всех проблем, мы получаем ситуацию, где надо постоянно менять настройки IDE, либо пытаться сделали уникальные для проектов настройки, чтобы можно было и 4, и 2 пробела использовать. Почему-то считается, что это объективно менее функциональное и более проблемное решение является более правильным.
Первый плюс ничтожен
Вы, наверное, не поняли исходный посыл текста. Там так и написано, что эти плюсы — ничто по сравнению с семантичностью (смыслом).
Второй плюс сходит на нет при использовании смарт-табуляции, потому что если будут заменены табы другими размерами, допустим с 4 до 2, то пробелы для выравнивания всё испортят
Смысл смарт-табуляции, как раз в том, что при изменении ширины таба выравнивание не портится.
Вы предлагаете более сложную систему, которая функционально полностью эквивалентна «пробельной» — зачем?
Ну разумеется, что она функционально не эквивалентна, а лучше: каждый разработчик может подстроить себе удобный вид для кода используя конфигурируемую ширину. У меня много коллег, например, сначала любили 4, а потом полюбили 2.
Меня каждый раз минусуют, потому сошлюсь на то, что вроде у Страуструпа тоже :)
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
4 раза на пробел (или на бекспейс при удалении отступов) в средах разработки клацать уже давно не нужно, редакторы разворачивают нажатие на клавишу табуляции в нужное количество пробелов сами (если вы выбрали стиль кодирования с пробелами, конечно).
То, что вы описали вначале, называется смарт-табуляцией, да.
4 раза на пробел (или на бекспейс при удалении отступов) в средах разработки клацать уже давно не нужно
Спасибо Кэп))) Не смотря на это, многие их моих коллег именно так и делают, потому что считают что такое поведение неочевидно и лучше явно использовать клавишу пробела. Я тоже считаю, что поведение должно быть максимально явным, поэтому использую табы для выравнивания строк и пробелы внутри них.
1. По ссылке с зарубежных ИТ-сайтов найти ссылку на интересную запись в блоге
2. Перевести ее по возможности легким слогом
3. Добавить пару картинок, можно ролик с youtube
— профит!
P.S. Тег «перевод» ставить не нужно, к чему оно? ))

Большинство современных IDE вставляют N пробелов когда нажимаешь клаыишу tab (если в настройках выбраны пробелы).
То есть в сторону добавления индентации проблема решена.
Но когда нужно уменьшить индентацию приходится удалять N пробелов — это идиотизм.
P.S. Людей которые индентируют код нажимая клавишу пробел я вообще не понимаю.
В Идее (если для отступов выбраны стрёмные пробелы, конечно) при одиночном нажатии бекспейса попадаешь на уровень ниже.
В общем, я считаю, что проблема „нажимать много раз пробел или бекспейс“ вообще не стоит. Это всё должно решаться средой, если не решается — среда отстой.
Более того, в новых версиях идеи (c 14-й, если не ошибаюсь) бэкспейс в начале строки, когда ничего кроме отступов нет, не только удалит все отступы, но и вернёт курсор на предыдущую строку, что весьма удобно.
Ну это, вроде как, настраивается. Проверить поведение бекспейса можно добавив „лишних“ отступов. В конец предыдущей строки курсор попадает, только если он находится на текущем или меньшем уровне вложенности. Если на большем, то редактор просто убирает один уровень вложенности.
Короче, аргумент про „много раз бекспейс“ — не аргумент.
В конец предыдущей строки курсор попадает, только если он находится на текущем или меньшем уровне вложенности. Если на большем, то редактор просто убирает один уровень вложенности.
Только что проверил — да, правда, так и есть. Удаляет до того уровня вложенности, который положен на этом месте согласно форматированию. К таким вещам привыкаешь и перестаёшь в итоге их замечать)
аргумент про „много раз бекспейс“ — не аргумент
Да, здесь я полностью согласен)
Думаю, этому соглашению стараются следовать отдельные компании и разработчики. Мне же оно кажется крайне странным.
php (Sublime) — как это здорово выделить несколько строк кода нажать tab и он весь сместится…
с пробелами такое не прокатит…
VB.NET — (Visual Studio) — там IDE сама табы расставляет…
Java (IntelliJ idea) тоже табы…
в общем-то тут скорее не от языка зависит а от редактора где код набирается…
Простите что?
Во-первых «проекто-зависимо»,
во-вторых по умолчанию — пробелы… или на лету подхватывается проектный стиль.
PS а с современными IDE кому-то вообще реально важно что там — пробелы или табы?!
а с современными IDE кому-то вообще реально важно что там — пробелы или табы?!
Да, потому что пробелы создают проблемы которых IDE не решает польностью, например настраиват ширину отступа нельзя, а также нельзя продвинут стрелкой на один отступ
— уже существующий код обычно соответствует код-стайлу проекта. Если вам нужны какие-либо персональные изменения — это возможно сделать без нарушения оных
— «нельзя продвинут стрелкой на один отступ» — не понимаю юзкейса, можете пояснить?
По код-стайлу 4 пробела для отступа, но я хочу 2. Как мне настраиват IDE?
- Ставим курсор на середину вложенного блока и нажимаем стрелка вправо условно два раза, с табамы все работает предсказуемо, с пробеламы придется добавить отступы, далее если нажимат ентер то все ок, иначе остается лишние отступы в конце строки. Но согласен это редкий кейс, главное же проблема с шириной отступа.
2. Немного не понимаю ваш текст, но попытаемся разобраться: «Ставим курсор на середину вложенного блока и нажимаем стрелка вправо условно два раза» — т.е. ставим курсор куда-нибудь в начало строки, либо посреди отступов, правильно? Если я хочу сразу упасть к началу строки кода я нажимаю home (спасибо Idea!) и оказываюсь там. Возможно ваша IDE умеет так же, либо имеет что-то похожее (как минимум ctrl-вправо должно уметь), попробуйте.
«с табамы все работает предсказуемо, с пробеламы придется добавить отступы» — если мы просто навигируемся, то зачем что-то добавлять, если форматируем код — проще доверить это IDE… не понимаю…
«далее если нажимат ентер то все ок, иначе остается лишние отступы в конце строки» — тоже не очень понятно, поясните, пожалуйста.
Я вот полюбил 2, но использую 4 потому что кодстайл, а с хуками потом в changelog(в Intellij idea) не покажется ли все файлы измененными?
если мы просто навигируемся, то зачем что-то добавлять
Да незачем, не ищите юзкейсов, мое возражение вызвано тем что такое поведение нелогично.
Сосредаточтесь на первую проблему.
php (Sublime) — как это здорово выделить несколько строк кода нажать tab и он весь сместится…
с пробелами такое не прокатит…
Не понимаю, как можно на полном серьёзе разрабатывать в текстовом редакторе, но вступлюсь тут.
Текстовый редактор обязан при выделении нескольких строк и нажатии [Таба] уметь увеличивать отступ у всех строк независимо от того, табы там выбраны для отступов, или пробелы.
php (Sublime) — как это здорово выделить несколько строк кода нажать tab и он весь сместится…
с пробелами такое не прокатит…
*.* (PhpStorm и прочие «идейные IDE») — очень даже прокатит, и с табами, и таки с пробелами. А по shift-tab подвинет взад.
Всеми разделяется убеждение, что варёные яйца при употреблении их в пищу испокон веков разбивались с тупого конца; но дед нынешнего императора, будучи ребёнком, порезал себе палец за завтраком, разбивая яйцо означенным древним способом. Тогда император, отец ребёнка, обнародовал указ, предписывающий всем его подданным под страхом строгого наказания разбивать яйца с острого конца.
Насчитывают до одиннадцати тысяч фанатиков, которые в течение этого времени пошли на казнь, лишь бы не разбивать яйца с острого конца. Были напечатаны сотни огромных томов, посвящённых этой полемике, но книги Тупоконечников давно запрещены, и вся партия лишена законом права занимать государственные должности.
Между тем это просто насильственное толкование текста, подлинные слова которого гласят: «Все истинно верующие да разбивают яйца с того конца, с какого удобнее.»
В таблице [contents] записаны файлы без своих дубликатов. Ниже указано общее количество уникальных файлов и их суммарный размер. Дубликаты файлов не учитывались в ходе анализа.
А по запросу кажется, что дубликаты учитываются. Или что такое copies?
Анализ каждой из строк 133 Гб кода занял 16 секунд. Добиться такой скорости помог все тот же BigQuery.
Это чудо!
Или это повторный запрос/запрос из кеша и все данные лежали в оперативке? :)
П.С.
Для себя использую табы, по текущей работе — пробелы.
Еще есть некоторые такие обработчики, которые принимают только пробелы в качестве отступов, а табы не распознают.
а подсветка символов в IDE (я предпочитаю их включать):

С табами, к которым я очень привык за годы работы, просто стало сложно читать код в темной теме WebStorm'а — много ненужной визуальной информации.
А теперь и не обращаю внимания, последние 3-4 года сижу на пробелах, и все нормально — дело привычки.
Что касается съэкономленного табами места — раньше я тоже такой смешной был, и не знал, что перед минификацией все равны! :)
Сейчас меня пытаются убедить перейти на 2 пробела вместо 4, аргументируя тем, что это мэйнстрим на github'е.
Но пока держусь), по-моему, читабельность кода существенно снижается на 2 против 4, но, возможно, что и ошибаюсь.
if (true) {
}
и
if (true)
{
}
(cond)? (true): (void)();
(void)() в качестве заглушки для отсутствующей ветки else
if (true)
{
}
Так легче найти блок (звернуть/развернуть) в редакторе.
А если условие короткое, то пишу в одну строку:
if (true){}else{}
Нормальный редактор умеет оба способа. А визуально — дело привычки. А вот пространство на экране — не резиновое… точнее плохо-резиновое
> А если условие короткое, то пишу в одну строку:
А вот за такое — убивать надо. Даже привычный взгляд будет спотыкаться, что уж говорить о тех, кто привык к «вертикальному» чтению…
Табы или пробелы? Анализ 400 тысяч репозиториев GitHub, миллиарда файлов, 14 ТБ кода