LINUX.ORG.RU
ФорумTalks

[холивар][отступы] tab vs spaces

 


0

0

сабж, собсна.

Я предпочитал всегда 4 пробела, но тут ради прикола решил сравнить мои исходники с исходниками линукса (там, как известно, индетация делается табом). Получилось, в ядре линукса индетация занимает 4% от размера исходников. А у меня - 15% (всего пробелы занимают 25%, но 10% из них не имеют отношения к отступам). Итого при одиноковом коде мои исходники будут на 9% больше по размеру (я вообще-то ожидал большего, ведь если подумать, даже при втором уровне отступов на каждую строчку на отступ будет уходить 8 пробелов, в отличии от 2х табов у "табового" кода).

Меня как педанта по натуре очень смущают лишние 9% кода. А вас?


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

> Зато при нажатии на Backspace пробелы в общем случае стираются уже по одному, что не есть хорошо и замечательно.

Выкинь свой тупой редактор. В нормальных редакторах (даже в не таких божественных, как vim или емакс) отступ сделанный пробелами удаляется одним бэкспейсом. Это, к слову, даже в поросшем мхом консольном IDE от борланда было.

gaa ★★
()

#include <stdio.h>
main(t,_,a)
char *a;
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a
)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_,
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \
i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}

(Цэ) ioccc

алсо функции, циклы, рекурсии, переменные, константы и прочая ересь не нужны.

matich
()
Ответ на: комментарий от isden

> а че такое "nodoka"

тема gtk написанная вроде изначально для федоры

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

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

Nodoka, дефолтный движек/тема gtk2 в федоре. Авторы не должны быть авторитетами, но корявое форматирование на картинке в полной мере показывает "преимущества" использования табов для индентации.

К.О.

a3
()
Ответ на: комментарий от KRoN73

> Можно пример, где форматирование отступами поедет при смене размера табуляции?

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

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

> в которых форматирование смешанное

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

Terrens
()
Ответ на: комментарий от KRoN73

>>Потом кто-нибудь другой откроет ваш код с табами и в некоторых местах выравнивание поплывёт так, что лучше бы его там не было вообще.

>Можно пример, где форматирование отступами поедет при смене размера табуляции? 

int function(double a, int x,
             int y, int z)
{
    if (a > x ||
        y == z) {
        return (x + y -
                z * z);
    }
    //...
}

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

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

/************************************************************/
// ...
int function(
    double a,        // ...
    int x,           // ...
    int y,           // ...
    int z )          // ...
{
    if( a > x || y == z )
        return x + y - z * z;

    //...
}

когда надо перенести на вторую строку - табами добиваем отступ до if(, потом 4 пробела

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

> Вот вам целых три примера как не надо оформлять код

Мы же холиварим про табы/пробелы, а не про весь кодинг стайл, так?

const86 ★★★★★
()

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

Terrens
()

отступы не нужны

//да я вкурсах, z01 тоже не нужен;-)

z01
()
Ответ на: комментарий от const86

> Мы же холиварим про табы/пробелы, а не про весь кодинг стайл, так?

в данном случае вы привели пример, основанный на специально кривом "кодинг стайле", если так не писать - то и проблемы с табами не будет, про случай с переносом длинных условий( выражений ) - я уже написал

lester ★★★★
()

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

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

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

А если бы бабушка была дедушкой...

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

> в данном случае вы привели пример, основанный на специально кривом "кодинг стайле"

Вообще-то то был линуксовый стиль (почти, отличия несущественны). Кривой он или нет, но юзается он весьма много, и не только непосредственно в линуксе. Проблема как раз с переносами и как раз в случаях, когда выражения длинные, чем длиннее, тем хуже. Например, если в выражении три уровня вложенности скобок и перенос попадёт внутрь второго или третьего. И я говорю не про какие-то далёкие от жизни теоретические проблемы, мне попадались такие исходники, по которым видно, что написаны они под "4-символьный таб".

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

>impirtant — это ты что-то нехорошее хотел сказать, я чувствую ☺

Да, ты правильно всё понял :)

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

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

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

[..][..]int x = a + b + ( c * d ) +
[..][..]........z * ( k + l ) * ....

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

>Постоянно натыкаюсь на исходники, в которых форматирование смешанное

Так в этом не форматирование виновато.

>Теперь подумай, что произойдет с форматированием, если у аффтара 8 символов в табе, а у тебя 4?

Таких аффторов - в биореактор.

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

Логическая разметка рулит.

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

>Вот вам целых три примера.

Не вижу проблемы. Сам часто использую нечто подобное.

Если только ты в примере табы ещё и пробелами не добивал.

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

>>Тем, кому нужны отступы, подсветка — ламерье тупое. Я начинал программистом ещё во времена ассемблера, там были лишь одни профи. Программы сносные можно было писать лишь после защиты диссертации. А сейчас? Развелось псевдо-прогеров, ужас. Но с этой быдлятиной тупорылой приходиться, все же, работать. Как мартышка завопит про отступы в моем коде (я выполняю самые отечественные участки) - сразу увольняю без выходного пособия. Может дойдет, может после этого учиться начнет. Либо из сферы уйдет. Таким только в макдональдсе парашу в туалете убирать.

плохой танцор. отступы ему мешают. А можно хоть мааасенький линк на портфолио? ну так... чисто поржать?

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

>опять же я уже писал - нужно просто совместить табы и пробелы

Ни в коем случае.

>[..][..]int x = a + b + ( c * d ) +
>[..][..]........z * ( k + l ) * ....

[..][..]int x = a + b + ( c * d )
[..][..][..]+ z * ( k + l ) * ....

KRoN73 ★★★★★
()

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

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

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

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

>чисто визуально

Дело привычки. Кому-то нравится воспринимать блок после "=" на одном уровне, мне нравится воспринимать логический отступ. Кстати, о том, что автор того кода не очень заботится об эргономике говорит, скажем, +, повисший в конце строки. В результате в начале новой строки непонятно, что делается с очередным операндом.

>мой пример будет выглядеть корректно, а ваш "поплывет"

Немного (и не принципиально) поплывёт визуально, но останется неизменным логически. А вот каша из табов и пробелов - чревата рано или поздно всегда.

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

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

обычно выражение читается с начала, а не с конца( если оно настолько огромное, что сразу не охватывается взглядом ), вобщем дело вкуса

> Немного (и не принципиально) поплывёт визуально, но останется неизменным логически. А вот каша из табов и пробелов - чревата рано или поздно всегда.


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

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

> При должной дисциплине и розеток можно не делать, оставляя лишь оголённые токоведущие шины ;)

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

lester ★★★★
()

Пробелы:
+ (уже говорил, но для целостной картины повторюсь) n пробелов всегда остануться n пробелами. Весь геморрой с редакторами/вьюверами отпадает автоматически.
+ очевидно, смешивать табы и пробелы нехорошо, иначе достоточо открыть код редактором с другим размером таба, как все превратится в кашу. Есть 2 выхода: использовать только табы или только пробелы. Предположим вы выбрали 1ый вариант. Затем вы по привычке будете выравнивать (не индентить, а выравнивать например комментарии и т.п.) тоже табами, или сделайте отступ нестандартного размера пробелами => табы с пробелами смешаются, а смешивать табы и пробелы нехорошо... (Можно конечно постоянно следить за этим и время от времени делать конвертацию, типа :retab в виме, но зачем вам еще одно проблема, если пользуясь пробелыми, этой проблемы не будет).
+ пробелами можно добится любого отступа (кратного 1 :), а размер отступа табами будет всегда кратен его размеру (напр. 8). Как ни крутись, но придется юзать пробелы (либо делать отступ полностью пробелами, либо табы + несколько пробелов), а смешивать табы и пробелы нехорошо...
+ для некоторых языков я юзаю другой размер отступа (например 2 для руби, т.к. там может быть большой уровень вложенности из-за особенности синтаксиса, типа:
---
class A
  def foo(bar)
    bar.method1 { |a|
      a.method2 { |b|
        b.method3 { |c|
           ...
        }
      }
    }
  end
end
---
Если использовать стандартный таб в 8 пробелов, то код "уедет" далеко вправо. Конечно можно изменить его размер (:set ts=2), но это для "себя". А другому может неохота что-то там менять в настройках, он просто хочет например нажать f3 в mc и быстренько позырить на код...
Если юзать пробелы, то мы освободим других людей от настройки редактора.

табы:
+ код полегчает примерно на 9% (т.е. выигрыш примерно 100кб на каждый мб кода) в сравнении с тем же кодом, использующий 4 пробела.
+ код легче программно обрабатывать, 1 таб = 1 отступ. 2 таба = 2 отступа...
+ не будет проблемы с make'ом. (хотя в нормальных редакторах типа вима или емакса это не проблема, они "знают" как обращаться с makefile'ами даже если отступы делаются пробелами и заменят их на табы там где нужно).

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

> [..][..]int x = a + b + ( c * d ) > [..][..][..]+ z * ( k + l ) * ....

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

Напрашивается вывод: если заранее не предусмотрели явно, что табы могут быть разной ширины, то нужно исходить из того, что 1 таб = 8 пробелов. Хочется 4, 2 или 3 - юзаем пробелы.

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

> Напрашивается вывод: если заранее не предусмотрели явно, что табы могут быть разной ширины, то нужно исходить из того, что 1 таб = 8 пробелов. Хочется 4, 2 или 3 - юзаем пробелы.

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

п.с. проекты, юзающие (посмотрел на те, что были под рукой):
- табы: linux, git, ...
- пробелы: весь GNUшный код, nasm, yasm, ruby, upx, mplayer, nmap, lua, nc, ...
(Либо пробелы выигрывают, либо у меня под рукой были только "пробельные" сорцы.)

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

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

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

Не мудрить с шириной таба у себя - не подкладывать свинью читающему. Использовать только пробелы - не давать читающему подложить свинью самому себе :)

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

> От отступов разжижается мозг и снижается квалификация. Поверьте моему опыту насчитывающему не один десяток лет. Я за свои слова отвечаю и всегда могу их обосновать. И лялих такой убогий именно из-за отступов в коде. Его пишут макаки.

Толсто. В сgецифиации на код MS указано "строго четыре проблела."

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

>> От отступов разжижается мозг и снижается квалификация. Поверьте моему опыту насчитывающему не один десяток лет. Я за свои слова отвечаю и всегда могу их обосновать. И лялих такой убогий именно из-за отступов в коде. Его пишут макаки.

> Толсто. В сgецифиации на код MS указано "строго четыре проблела."

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

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

>Эта система складывалась и шлифовалась тысячелетиями

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

Наиболее полное использование возможностей существующих на сегодняшний день машино-человеческих интерфейсов (*двухмерные* экраны и сетчатка) *требует* "квадратно-гнездового" синтаксиса. И потому отступничество, хотя, вероятно, и не самый оптимальный вариант такового, уж точно лучше всех других широко распространённых.

DonkeyHot ★★★★★
()

Ставить табы и пробелы подряд - особый маразм. Ладно ещё, если в начале строки только табы, а в середине - только пробелы.

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

> пример Ъ кода в студию

#include <stdio.h>

int main(int argc, char **argv)
{
    if (argc < 2) {
        fprintf(stderr, "usage: %s [--option] file\n", *argv);
        return 1;
    }
    ...
}

1. нет табов => нет проблем.
2. _имхо_ 4 пробела - иделальный размер отступа, 2 - для языков с высоким уровнем вложенности (типа руби), 8 - для асма. Отступы != 2 или 4 или 8 - бред!

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

> Можно. Но повторюсь раз: нет табов - нет проблем, два:
> http://www.linux.org.ru/jump-message.jsp?msgid=3566082&cid=3566730


ничего существенного в ваших аргументах нет, сплошное - "пользоваться табами нехорошо:

> Весь геморрой с редакторами/вьюверами отпадает автоматически.


какой геморрой? нормально оформленный код( см. мой пример выше ) выглядит хорошо везде

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


см выше

> пробелами можно добится любого отступа (кратного 1 :), а размер отступа табами будет всегда кратен его размеру


зачем вам разный размер отступа?

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


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

lester ★★★★
()

Задача:
У 1-ого кодера в IDE для набора быдлокода используется шрифт "times new roman", а у 2-ого моноширинный.

Вопрос: Как поплывёт форматирование быдлокода у 2-ого кодера когда он откроет на редактирование код 1-ого? Как слетит форматирование при использовании табов 1-ым кодером?

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

> Задача:
> У 1-ого кодера в IDE для набора быдлокода используется шрифт "times new roman", а у 2-ого моноширинный.

> Вопрос: Как поплывёт форматирование быдлокода у 2-ого кодера когда он откроет на редактирование код 1-ого? Как слетит форматирование при использовании табов 1-ым кодером?


Ъ быдлокодер не использует отступы

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

> зато сколько времени экономит использование таба вместо пробелов - в четыре раза меньше нажатий

Выкинь свой говноредактор. У меня на клавишу "таб" вставляется четыре пробела. И автоиндент идёт по уровню сложенности.

// vim user

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

> Выкинь свой говноредактор. У меня на клавишу "таб" вставляется четыре пробела. И автоиндент идёт по уровню сложенности.

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

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

> автоиндент идёт по уровню сложенности.

нашел чем удивить

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