LINUX.ORG.RU

Swift: tabs vs. 2 spaces vs. 4 spaces?

 , , , ,


1

2

Пришли к какому-то консенсусу на этот счёт в Swift сообществе? Stdlib, я смотрю, использует 2 пробела, пакетный менеджер, foundation и многие проекты - 4 пробела. И лишь некоторые сторонние пакеты - табы (второй по популярности стайлгайд - от Github - требует именно их). Правильно понимаю, что нет такого, как в Dart / Go / Rust с единственно верным стилем и «\(lang)fmt»? Что используете вы?

Единственного нет, использую 4.

Deleted
()

Единственно верный стиль для совершенно любого языка — это indent with tabs, align with spaces. В этом случае tabwidth не имеет значения.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

indent with tabs, align with spaces. В этом случае tabwidth не имеет значения.

Чёт боюсь, что здесь имеют место взаимоисключающие параграфы

UPD: ts=8, ts=2. Я всё правильно понял?

Deleted
()
Последнее исправление: ecko (всего исправлений: 1)
Ответ на: комментарий от Deleted

Нет, неправильно. Vim так не умеет, по крайней мере без костылей.

void foo(int a,
.........int b)
{
<-->fprintf(stderr, "%d %d\n",
<-->........a,
<-->........b);
}

<--> — таб, . — пробел.

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

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от Deleted

Есть ещё один достаточно эксцентричный стиль, который я нашёл весьма удобным, когда пришлось работать с большим количеством кода на питоне:

some_array = [
<-->member1,
<-->member2,
]

some_method(
<-->arg1=value1,
<-->arg2=[
<--><-->value21,
<--><-->value22,
<-->],
)

some_other_method(
<-->arg1=value1,
<-->arg2=[
<--><-->value21,
<--><-->value22,
<-->],
)

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

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)
Ответ на: комментарий от intelfx

Понял. Так в целом норм, но лично для себя я бы такое не выбрал ¯\_(ツ)_/¯

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

Вот такой стиль мне ближе. Только я его в сишке использую. В питоне всё же ближе к PEP8 — 4 пробела для индента.

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

Хорошо в теории. А на практике из-за

любой читатель кода сможет задавать любой tabwidth, который ему удобен

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

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

Это...

размер таба 8 мест, а не 4 места <...> Из-за этого код едет

Если всё правильно сделано, то

любой читатель кода сможет задавать любой tabwidth, который ему удобен <...>, и это не будет ломать форматирование.

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

Да.

(ещё один дисклеймер про то, что это всего лишь моё мнение)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Не... ты не понял. Если код отформатирован по правилам, он не едет ни у кого. Но вот несознательные личности не могут настроить свои IDE и фигачат код как попало. И форматирование такого кода уже едет у других. Но у них-то норм, они не понимают. От слова совсем.

Единственный вариант с этим хоть как-то бороться — использовать пробелы везде.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Самое правильное, это использовать только табы. Табы и ничего кроме табов.

Полностью поддерживаю, но не хотелось бы прослыть мудаком, пишущим unconventional код. Проанализировав 390 самых популярных (по кол-ву звёзд, что впрочем не показатель, шлака - больше половины) Swift реп на GH, результат такой: 4 пробела - 298 реп, 2 пробела - 52 репы (самый популярный style guide рекомендует эту шнягу), 1 таб - 21 репа, 1 пробел - 3 репы. Не самый популярный выбор (даже не второй). Пусть сами под меня подстраиваются :)?

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

Вот это самый годный, ящитаю. Всегда использовал.

SwiftRocks
() автор топика
Ответ на: комментарий от i-rinat

А. Ну, да. Ещё можно запихнуть линтер в pre-receive hook.

Это, кстати, и есть фатальный недостаток indent with tabs, align with spaces — правило слишком сложное и линтеры/форматтеры в него толком не умеют.

intelfx ★★★★★
()
Ответ на: комментарий от i-rinat

Единственный вариант с этим хоть как-то бороться — использовать пробелы везде

Я в такие моменты использую tabs only. Выглядит не так красиво, но, по крайней мере, консистентно: ts=8, ts=2

Deleted
()

А мне всё равно как отформатирован код. У меня есть скрипт runastyle.sh. Тоже и всем рекомендую(как вариант можно использовать clang-format вместо astyle). Если это совместный проект, то можно договориться об форматировании, и использовать два скрипта, один который запускать перед коммитом, а второй запускать для себя, чтобы комфортно кодить.

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

indent with tabs, align with spaces

По этой фразе я распознаю 100% фанатика. Больше никто таким способом не пользуется - слишком сложно, да и не факт, что IDE поддерживает. А уж что будет, если кто-то отредактирует исходник в редакторе без поддержки такое замороченной схемы...

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

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

Vim так не умеет, по крайней мере без костылей.

Ну вот ты и сам понимаешь, что это хреновый способ.

anonymous
()
Ответ на: комментарий от i-rinat

Единственный вариант с этим хоть как-то бороться — использовать пробелы везде.

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

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

Я в такие моменты использую tabs only. Выглядит не так красиво, но, по крайней мере, консистентно: ts=8, ts=2

создатели PEP8 предлагают тебе немедленно умереть в огненном море

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

Они не в силах понять сишку? Бывает.

Кстати, в питоне я использую такой же стиль отступов, только с ts=4 sw=4. Дурная привычка от вима ¯\_(ツ)_/¯

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

Что используете вы?

В зависимости от настроек IDE.

Настройки IDE даны свыше и ты их никогда не меняешь?

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

Ништяк, можно «сэкономить кучу байт» на завершающих ;
О~shi, на табах можно больше «сэкономить»

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

Ништяк, можно «сэкономить кучу байт» на завершающих ;

не путай индент и завершение)

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

Если чешется, могу и поменять

когда чешется надо мыться, а не в ide сидеть... а то обколются своими сиплюсплсами, потом сидят неделями, не моются и воняют

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

Единственно верный стиль для совершенно любого языка — это indent with tabs

для совершенно любого языка

WAT!?

tabs are not members of the Fortran Character Set

-Wno-tabs will cause a warning to be issued if a tab is encountered. Note, -Wno-tabs is active for -pedantic, -std=f95, -std=f2003, -std=f2008 and -Wall.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от i-rinat

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

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

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

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

Vim и горизонтальную прокрутку не умеет, давай ещё на ed равняться, запретим файлы без nl в конце.

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

Автоформат по умолчанию наверняка не в одном редакторе сделает перенос строки перед каждой такой точкой с запятой.

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

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

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

Автоформат по умолчанию наверняка не в одном редакторе сделает перенос строки перед каждой такой точкой с запятой.

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

not_rj45
()

В Swift сообществе с форматированием всё плохо. Мешанина из пробелов и табов - повсеместное явление, потому что все они XCode кнопкодавы. Даже в самом Apple не научились в консистентность форматирования. Скобки: #1:

.library(
	// some stuff here...
)
#2 (самый WTF):
.target(
	/* some stuff here... */
	/* some stuff here, too...*/),
А в самих исходниках ещё и вариант #3:
func blahBlahBlah(/* some stuff here... */
                  /* some stuff here, too...*/),
Чёртовы ублюдки, как так можно? В одном файле особенно! Аналогично с trailing commas / spaces и всем остальным. Полный ахтунг. И это помимо повсеместной ObjC деформации.

Потому то Swift и не взлетает. Как ЯП - норм, а engineering / tooling / культура вокруг - говно, одни альтернативные. В Go, например, всё наоборот: хоть ЯП и УГ, а с engineering'ом / tooling'ом / культурой всё благополучно (за исключением альтернативных с «I've never used generics and I've never missed them», но это утята, они, к счастью open-source код не пишут, только посты).

anonymous
()

еще люди про python что-то говорят

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