LINUX.ORG.RU

Использовать пробелы для отступов

 , ,


1

1

Ищу хотя бы одну конструктивную причину для сабжа. Именно в плане отступов (indentation), а не выравнивания (alignment).

Навеяло гугловым cpplint.py, который панически засирает вывод предупреждениями о табах на каждую (!) строчку. Что такого ужасного?

Сам пользуюсь табуляцией, но довольно много людей (и проектов) используют пробелы. Вот и заинтересовало - может быть, они действительно чем-то удобнее, только я не знаю? Холивар не нужен, нужна причина. Гугль не нашёл ничего, кроме кидания какашек в сторону табов.

ЗЫ. Про «не смешивать в одном проекте» знаю.

ЗЫЫ. Про whitespace знаю.

UPD: Заодно ищется причина необходимости (незаменимости) табов, если такие есть. Навскидку только Makefile приходит в голову.

UPD: как минимум одна причина найдена:

Dendy

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

★★★

Последнее исправление: schizoid (всего исправлений: 2)

Ответ на: комментарий от lazyklimm

different people могут пройти лесом, должен быть фиксированный codestyle

Фиксированный кодстайл - это не такой, который удобен конкретно тебе, а такой, который соблюдается в проекте целиком.

тем более, никто не мешает автоматизировать переформатирование при коммите

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

schizoid ★★★
() автор топика
Ответ на: комментарий от schizoid

Нужно уметь вовремя остановиться

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

orm-i-auga ★★★★★
()
Ответ на: комментарий от geekless

Это ка краз плюс.

Не всегда. Ограничение на длину строки остается 80 пробелов вне зависимости от ширины табуляции. Человек писал с табом в 4 пробела, на 79 символе перенес строку. Ты любишь таб шириной в 8 пробелов, у тебя эта строка уже вылазит за пределы.

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

Ограничение на длину строки остается 80 пробелов вне зависимости от ширины табуляции

Как у вас там живётся в начале 90-х?

geekless ★★
()
Ответ на: комментарий от schizoid

Фиксированный кодстайл - это не такой, который удобен конкретно тебе, а такой, который соблюдается в проекте целиком.

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

ничего, кроме ртути или гита

вроде бы в перфорсе есть триггеры

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

умножений сущностей и писанины без необходимости

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

schizoid ★★★
() автор топика
Ответ на: комментарий от lazyklimm

Using spaces for indentation means that the code will look the same on all systems, even if the tabstop option is changed.

это самое главное же

Для кого или чего? Лично я хочу иметь возможность настраивать, как выглядит текст.

different people могут пройти лесом, должен быть фиксированный codestyle

Желающие фиксированной индентации могут идти лесом, даже в рамках фиксированного кодстайла должна быть возможность настройки.

tailgunner ★★★★★
()
Ответ на: комментарий от geekless

можно и так:

runAnotherFunction(arg1,
		   getSomeResult(),
		   expression && other_expression);

в любом случае, лучше чем в предложенном варианте

lazyklimm ★★★★★
()
Ответ на: комментарий от geekless

Можно комфортно смотреть diff'ы. А idea еще при слиянии показывает три версии файла рядом: исходная, новая и результирующая, которую ты можешь редактировать.

Плюс у меня ide выглядит как танковая щель: со всех сторон панели, деревья и логи, а для окна редактирования как раз 80 символов и остается.

vurdalak ★★★★★
()
Ответ на: комментарий от geekless

Ограничение на длину строки остается 80 пробелов вне зависимости от ширины табуляции

Как у вас там живётся в начале 90-х?

Нормально живется. И не только нам.

tailgunner ★★★★★
()
Ответ на: комментарий от schizoid

подпинывать пробелами код при каждом его изменении

Зачем? я тупо жму клавишу TAB, и код выравнивается как нужно.

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

никто не мешает автоматизировать переформатирование при коммите

Я не думал, что всё настолько запущено.

tailgunner ★★★★★
()
Ответ на: комментарий от lazyklimm

можно и так:

А нужно — вот так:

runAnotherFunction(arg1,
    getSomeResult(),
    expression && other_expression);

в любом случае, лучше чем в предложенном варианте

False.

geekless ★★
()
Ответ на: комментарий от lazyklimm

Зачем? я тупо жму клавишу TAB, и код выравнивается как нужно.

Каждый раз при изменении названия функции придётся это делать.

А потом эти строки коммитятся, при том, что сам код не изменился.

Да, это не умножение сущностей.

schizoid ★★★
() автор топика
Ответ на: комментарий от vurdalak

Можно комфортно смотреть diff'ы

diff-ы я смотрю в виде diff-ов.

Плюс у меня ide выглядит как танковая щель: со всех сторон панели, деревья и логи

Ну ты же знаешь, что на это можно ответить: ССЗБ.

geekless ★★
()
Ответ на: комментарий от geekless

ССЗБ

Был бы ССЗБ, если бы мне это доставляло проблемы. А так все устраивает, ибо правила большинства ЯП требуют ограничивать длину строки в 80 символов, и несогласные с оными мне не попадаются.

diff-ы я смотрю в виде diff-ов.

Что не в HEX-редакторе? Так же трушнее.

vurdalak ★★★★★
()
Ответ на: комментарий от schizoid

Каждый раз при изменении названия функции придётся это делать.

electric chars и M-x indent-* практически полностью избавляют от необходимости это делать.

И, кстати, в случае форматирования табами ты тоже от этого не защищён.

А потом эти строки коммитятся, при том, что сам код не изменился.

то есть ты всё-таки даже единственный аргумент переносишь?

lazyklimm ★★★★★
()
Ответ на: комментарий от geekless

А нужно — вот так:

мотать-колотить! Семён Семёныч, это же вообще никуда не годится

lazyklimm ★★★★★
()

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

proofit404
()

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

Norgat ★★★★★
()
Ответ на: комментарий от geekless

Fix.

runAnotherFunction(arg1
    , getSomeResult()
    , expression && other_expression
    );

Так комментировать строки проще и быстрее (достаточно поставить // и всё).

Norgat ★★★★★
()

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

Плюсы табов по моему скромному мнению:
- символ отступа должен быть неразрывен, пробелы нарушают это правило;
- настраиваемая ширина, каждый может использовать визуально такой отступ, который ему удобен.

Минусы:
- когда компилятор говорит, мол у тебя ошибка в такой-то колонке, начинается путаница, имелась в виду визуальное или реальное количество символов; проблема легко решается на уровне редакторов кода;
- отсутствие стандартного символа отступа, вместо которого изпользуется табуляция, вместо этого приходится догадываться что имелось в виду в данном конкретном исходнике и постоянно подстраивать размер при открытии случайных файлов.

Минусы, которыми оперируют неосиляторы:
- едет форматирование: как можно заметить в данном треде достаточно людей, не понимающих разницу между отступом и выравниванием, для них любые 4 (варианты: 2, 8) подряд идущих пробела потенциально можно заменить на табуляцию, чтобы потом жаловаться;
- с пробелами везде одинаково выглядит: это явный минус, совместимость между пользователями должна определяться форматом, а не тем, какие инструмены используются для визуализации; на следующем этапе адепты пробелов расскажут какой вам выбрать шрифт, редактор и операционную систему;
- большой порог вхождения: чтобы пользоваться табами нужно подтянуть культуру их использования во всей команде, что часто бывает сложно, особенно если в проекте учавствуют люди со всего мира, но вполне выполнимо при наличии вменяемого ревью кода.

Dendy ★★★★★
()
Ответ на: комментарий от geekless

А нужно — вот так:

runAnotherFunction(arg1,
    getSomeResult(),
    expression && other_expression);

расстрелять.

tailgunner ★★★★★
()
Ответ на: комментарий от lazyklimm

то есть ты всё-таки даже единственный аргумент переносишь?

Переносы - зло. Ты не читаешь сообщения? Я писал об этом выше.

schizoid ★★★
() автор топика
Ответ на: комментарий от Norgat

Поэтому использование табуляций, для форматирования кода, может привести к непонятным, на первый взгляд проблемам.

Например? Ни разу не сталкивался.

schizoid ★★★
() автор топика
Ответ на: комментарий от Norgat

runAnotherFunction(arg1
, getSomeResult()
, expression && other_expression
);

Так комментировать строки проще и быстрее (достаточно поставить // и всё)

А закомментируй arg1

tailgunner ★★★★★
()
Ответ на: комментарий от Dendy

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

Хороший ответ, спасибо. То, что нужно было.

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

Не очень понятно. Подстраивать размер табов? Но зачем?

schizoid ★★★
() автор топика
Ответ на: комментарий от lazyklimm

без переносов строки будут коммититься, хотя сам код не изменился :)

Ты куда-то не в ту степь ушёл. Возвращайся к нам и попробуй ещё раз сформулировать претензию.

schizoid ★★★
() автор топика
Ответ на: комментарий от Dendy

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

судя по предложению выше отбивать отступы клавишей пробела - с пониманием культуры отступа space-ами тоже не всё хорошо

с пробелами везде одинаково выглядит: это явный минус, совместимость между пользователями должна определяться форматом

да, давайте в XML сорцы хранить

едет форматирование: как можно заметить в данном треде достаточно людей, не понимающих разницу между отступом и выравниванием

дык, в отступах едет форматирование

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

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

lazyklimm ★★★★★
()

С табами файлы исходников меньше
Пробелы неудобно использовать при удалении отступа в 4 символа, потому что нужно 4 раза бэкспейс клац-клац.

nerdogeek
()
Ответ на: комментарий от lazyklimm

ты даже не представляешь насколько

Да мне уже страшно :/

tailgunner ★★★★★
()
Ответ на: комментарий от nerdogeek

С табами файлы исходников меньше

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

как там в 70х с ed-ом и килобайтными накопителями?

lazyklimm ★★★★★
()
Ответ на: комментарий от schizoid

Код:

x = 1
if x == 1:
^tprint "x is 1\n"
........print "y is unset\n"

^t - табуляция, точки - пробелы

Напечатает:

x is not 1

y is unset

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

Norgat ★★★★★
()
Ответ на: комментарий от lazyklimm

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

Спасибо, капитан. Что именно ты понимаешь под «контекстами» при работе с кодом?

schizoid ★★★
() автор топика
Ответ на: комментарий от tailgunner

закоменчу //arg1 и удалю запятую.

Тут профит в том, что в конец сигнатуры аргументы добавляются чаще, чем в начало (субъективно конечно, но у меня именно так), поэтому логичней оптимизировать удобство добавления\удаления аргуметов в конец функции, чем в начало.

Norgat ★★★★★
()
Ответ на: комментарий от Norgat

Смешивать табы и пробелы - смертельный грех, к теме не относится и в ОПе была про это ремарка.

schizoid ★★★
() автор топика
Ответ на: комментарий от vurdalak

Не всегда. Ограничение на длину строки остается 80 пробелов вне зависимости от ширины табуляции. Человек писал с табом в 4 пробела, на 79 символе перенес строку. Ты любишь таб шириной в 8 пробелов, у тебя эта строка уже вылазит за пределы.

Хороший аргумент против табов. Спасает то, что строгим соблюдением ширины мало кто занимается, выпадающие по 1-2 букве за границу часто в порядке вещей.

Dendy ★★★★★
()
Ответ на: комментарий от Norgat

закоменчу //arg1 и удалю запятую.

То есть затронешь 2 строки. Ну и стоило ли уродовать текст?

Тут профит в том, что в конец сигнатуры аргументы добавляются чаще

Совсем недавно речь шла о том, что можно закомментировать одну строку.

(субъективно конечно

Куда добавишь, туда и добавится.

P.S.

foo(
  bar
  ,baz
  ,blarg
  );
tailgunner ★★★★★
()
Ответ на: комментарий от Dendy

Можете хоть один пример привести?

где-то выше нить про выравнивание перенесённых на другую строку аргументов (в том числе)

lazyklimm ★★★★★
()
Ответ на: комментарий от Dendy

Очень часто в IDE выставлен автоперенос по границе, у меня так и делается. Поэтому мне чаще попадается недобор символов, чем перебор.

// Использую табы, потому что в джаве они стандарт. Но и ширина таба тоже стандарт, 4 пробела, так что проблем не испытываю.

vurdalak ★★★★★
()
Ответ на: комментарий от Dendy

Спасает то, что строгим соблюдением ширины мало кто занимается, выпадающие по 1-2 букве за границу часто в порядке вещей.

учитывая разницу в 4 символа (8 vs 4) частенько могут быть случаи (особенно если уровней индентации достаточно много), что 1-2 буквами не обойдётся

lazyklimm ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.