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

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

ура! меня показывают в прямом эфире!
Большинство иде имеют мегакнопку отформатировать код.
пусть хоть голосовую команду, главное — не забывать этой мегакнопкой пользоваться
а где обоснование всех этих лучей поноса?
может я конечно непроходимо туп, но меня как то не напрягали никогда ни табы ни лишние пробелы
Future reading, две ссылки, по каждой можно первую статью в выдаче почитать.
Гуглить все умеют. Придётся попотеть и таки-объяснить свою позицию.

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

Чем хорош таб для меня — мне нравится отступ в два пробела, а коллеге в четыре, но мы оба используем табы и не спорим друг с другом. Чем плохи табы в этой ситуации?
Автоформатирование зло! Особенно для больших проектов с контролем версий. Почему?
У каждого свои предпочтения — в том числе и по IDE. Заставить разные IDE форматировать одинаково практически не реально. В итоге любое малейшее изменение в коде (с последующей переформатировкой) может превратиться в головную боль при разборе с помощью контроля версий «что же все-таки было изменено?».

Касательно табов в начале — согласен и действительно не вижу с этим проблем. По-моему, большинство IDE уже научилось нормально с ними работать.
НЛО прилетело и опубликовало эту надпись здесь
Форматирование в IDE часто не только «раскрытие» табов, но так же и сортировка include'ов, import'ов, приведение стиля кода к единому стилю и т.д. и т.п. Код логически остается тотже однако на бинарном уровне отличий уже очень много.
НЛО прилетело и опубликовало эту надпись здесь
делаем из мухи слона, разве не понятно?
Хороший редактор это не тот, который показывает хвостовые пробелы, а тот, который их удаляет автоматически при перезаписи файла и для которого во внутреннем представлении хвостовых пробелов не существует, как и табуляций.
Что касается табуляций, то существует единственная правильная их интерпретация — как выравнивание на следующую позицию, номер которой кратен восьми символам. Редактор вообще не должен интерпретировать или показывать табуляции во время работы. Он должен добавлять (или не добавлять) их автоматически при записи файла. Так как единственное их назначение – это сокращение объема файла при хранении.
Все вышедшие из дремучего прошлого unix-а форматы файлов, в которых символ табуляции является синтаксически значимым элементом по значению отличающимся от пробелов – сосут & must die!
согласен по всем пунктам.
по данным РосГосСтата табы допустимы только в 3.553 процентов случаев.
Про пробелы в конце строки согласен, но пробелы вместо табов в отступах — это нехорошо.
ну вот, опять.
в каждой команде свои правила
да у нас тут не о демократии разговор, а о том, как правильно. двум правдам не бывать.
табы и пробелы это такой пунктик, где каждая команда выбирает кому как нравится. то что вы считаете правильными только пробелы — правильным они от этого не становятся.
А используемые средства (framework, например) разве вам не навязывают использование или не использование табов?
Пробел имеет фиксированную ширину, и два пробела бывает маловато, чтобы наглядно представить отступы. Ширина же табов в редакторе легко меняется.
Отбивать больше, чем двумя пробелами это уже жесть.
С notepad++ можно выделить блок и отбить его весь табом, при нажатии пробела он просто стирается, может в других редакторах по-другому.
В общем с табами легче работать — это моё аргументированное мнение.
notepad++ добавляет отступ, но будет ли это сделано табами или пробелами и каким именно их количеством — зависит от настроек.
Поддержу. Думаю, что табы имеют право на жизнь.
Табы очень даже имеют право на жизнь. Не все vim'ом едины!
Мне например для навигации по коду очень удобно пользоваться Ctrl+стрелки.
адски плюсую. в толковом редакторе/IDE размер табов можно подкрутить так чтобы было удобно читающему.
размер отступа в 4-ре пробела всегда остается 4-мя пробелами, в два — двумя. не айс. обычно молчаливо рассылаю лучи поноса авторам исходников использующим пробелы для форматирования.
Использую только табы. Кто не поставил нормальный редактор и кодит в блокноте — виноват сам.
Основное достоинство табов — можно выставить такой размер отступа, какой мне нравится. Я люблю 4, а кто-то любит 8 — нахера мне потом эту лестницу разбирать?
Если бы ширина табов не имела значения, никто не пытался бы никогда ее регламентировать.

@obj.some_method(:param1 => "ajklsdljksdlaksjdslkjas",
:param2 => 42,
:param3 => {
:foo => :bar
})

такой код разъедется на 8 табах
парсер лох, съел мои пробелы в коде. хотя, я думаю, мысль ясна…
Делай перенос строки после открывающейся скобки и выравнивай табами все аргументы. Какие проблемы?
далеко не всякое форматирование кода нечувствительно к ширине отступа, я вот о чем.
Таб используется как уровень отступа. Дальнейшее выравнивание текста — только пробелами. В данном примере, конечно же никаких табов. А вот здесь:

{
	@obj.some_method(:param1 => "ajklsdljksdlaksjdslkjas",
	                 :param2 => 42,
	                 :param3 => {
	                 :foo => :bar
	})
}


Попробуйте выделить текст, чтобы понять где табы где пробелы. И ни что не разъедется при изменении ширины таба.
Целью данного коммента троллинг, очевидно, не являлся. Если кто-нибудь считает что этот стиль имеет недостатки, пусть выскажет их. Вдруг его действительно ни при каких обстоятельствах нельзя использовать?
пользую вот такой pretxncommit хук в mercurial

#!/usr/bin/env python

from __future__ import with_statement
import sys, os
from mercurial import hg, ui

def get_changed_files():
    repo = hg.repository(ui.ui(), '.')
    def collect_files(changeset):
        files = changeset.files()
        for child in changeset.children():
            files += collect_files(child)
        return files
    node = repo.changectx(os.environ['HG_NODE'])
    return list(set(collect_files(node)))

indent_settings = (
    ('.html',   2),
    ('.css',    2),
    ('.js',     2),
    ('.py',     4),
)

if __name__ == '__main__':
    auto_fix = len(sys.argv) == 2 and sys.argv[1== '--fix'
    fail = False
    for file in get_changed_files():
        for ext, tabwidth in indent_settings:
            if file.endswith(ext):
                break
        else:
            continue
        with open(fileas fp:
            data = fp.read()
        if '\t' in data:
            fail = True
            if auto_fix:
                print 'fixing %s' % file
                with open(file'w'as fp:
                    fp.write(data.expandtabs(tabwidth))
            else:
                print 'tabs found in %s' % file
    if fail:
        sys.exit(1)
БОЛЬШЕ МАСЛА В ОГОНЬ!
Вообще, вопросы выбора символа табуляции или набора пробелов для организаци отступа лучше смотреть в стандартах оформления кода соответствующего языка. Стандарты тоже не дураки писали.
Когда пишу на PHP использую только пробелы, потому что по стандартам PHP:

— Отступ для каждого нового уровня — 4 пробела.
— Используйте не табуляцию, а пробелы.
Обоснование:
— Когда люди используют разные значения табуляции, код бывает невозможно прочитать или распечатать, поэтому пробелы предпочтительнее;

Но это не значит что везде нужно лепить пробелы. Смотрите стандарты оформления для вашего языка программирования. Там, как правило, этот вопрос поднимается.
НЛО прилетело и опубликовало эту надпись здесь
pear.php.net/manual/en/standards.indenting.php

«Use an indent of 4 spaces, with no tabs. This helps to avoid problems with diffs, patches, SVN history and annotations.»

Все основополагающие стандарты оформления кода: pear.php.net/manual/en/standards.php

Код на PHP может соответсвовать этим стандартам с незначительными отклонениями для некоторых проектов, но ключевые моменты стандарта должны соблюдаться. Так можно обратить внимание на стандарты написания кода для Drupal: drupal.org/coding-standards, где предлагается использовать не 4 пробела, в 2 вместо табуляции, но, вцелом, тоже «document is based on the PEAR Coding standards.»
НЛО прилетело и опубликовало эту надпись здесь
Zend Framework — 4 пробела
Symfony — 2 пробела
и там, и там категорическое отрицание табов
НЛО прилетело и опубликовало эту надпись здесь
У меня IDE стандартизирует табы и удаляет trailing whitespace. Удобно, один раз настроил — и спокоен.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории