LINUX.ORG.RU
ФорумTalks

[C] Чем плохи lisp-style отступы?

 


0

3

Почему никто не использует в си отступы в стиле lisp?

void foo (int x) {
    if (x > 42)
        do_something_with(x);
    else {
        do_something_else_with(x);
        do_something_else_with_again(x); }}

По-моему, весьма удобно. Ср. также со стилем python:

def foo (x):
    if (x > 42):
        do_something_with(x);
    else:
        do_something_else_with(x);
        do_something_else_with_again(x);


Ну и чем это отличается от обычного, GNU-style'а, например? :-))
А собрание скобок в конце, имхо, неочень способствует разбору кода.

Bad_ptr ★★★★★
()

Зачем экономить на сточках?

void foo (int x)
{
    if (x > 42)
        do_something_with (x);
    else
    {
        do_something_else_with (x);
        do_something_else_with_again (x);
    }
}

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

GNU-style

Положениями {, }.

А собрание скобок в конце, имхо, неочень способствует разбору кода.

Что значит «разбору»? Если вы о восприятии, то всё равно отступы обозначивают блоки и уровни, как в питоне.

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

Зачем экономить на сточках?

Идея не в экономии, а в бесполезных {, }, которые (ИМХО) только замусоривают картину. По-моему, логичнее их использовать только для синтаксического разделение блоков, а восприятие полагать на отсутпы.

toady2
() автор топика

>По-моему, весьма удобно

Пока не потребуется удалить последнюю строку. Или добавить строку в конец блока. А это — очень частые операции.

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

Кто-то привык так, а кто-то иначе. Вопрос темы не в этом. Это не холивар. Просто мне интересна причина, почему этот lisp-стиль практически нигде не используют; наверное, какие-то существенные причины есть?

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

> Идея не в экономии, а в бесполезных {, }, которые (ИМХО) только замусоривают картину.

Еще один все понял. Добро пожаловать к питонщикам.

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

>Зачем экономить на сточках?

Да, это тоже мой стиль. Правда с поправкой на то, что я не пишу пробелы после имён функций и ключевых слов перед скобкой.

Кстати, у тебя некоторая нелогичность. Пробелы после ключевых слов стали писать, чтобы отличать их от функций. А у тебя и после имени функции — тоже пробел.

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

Ааа... действительно.

Но если возвращаться к первоисточнику (lisp), то там же тоже такая проблема, но, тем не менее, там указанный стиль используется повсеместно.

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

При достаточно умном редакторе можно забить на эту проблему.

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

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

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

Много закрывающих скобочек в одной строке не прибавляет удобства при чтении кода. Особенно при правке такого фрагмента можно легко запутаться после какой конкретно скобочки тебе нужно вставить то что надо.

Я видел такой код в одном старом проекте - безумно сложно читаемый, когда собирается 5-6 скобочек вместе.

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

>Но если возвращаться к первоисточнику (lisp), то там же тоже такая проблема

Ну, это уже проблемы индейцев :)

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

Я как-то так привык.

Считаю такой вариант наиболее читабельным.

o4kapuk
()

Я так делал для себя. Но для публичного кода это проблема т.к. далеко не всем такое нравится. И, увы, это не всегда добавляет наглядности.

true_admin ★★★★★
()

> Почему никто не использует в си отступы в стиле lisp?

Потому что в Си, в отличие от лиспов, пунктуация несёт достаточно большую семантическую нагрузку. По тому круглая у тебя скобка, квадратная, фигурная или, в случае C++, треугольная можно понять смысл кода непосредственно перед скобкой. В лиспах это невозможно, вследствие чего нет никакого смысла привлекать внимание к пунктуации и структуру кода стараются передавать исключительно отступами. В питоне эти отступы просто сделали необходимыми, а не желательными.

kim-roader ★★
()
Ответ на: комментарий от toady2

>какие-то существенные причины есть?
Да, это не удобно. Тебе KRoN73 уже намекнул по этому поводу.

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

gnu style вот:

Канонично в gnu style отступы по 2 пробела, а не по три, как в вашем примере. А ещё ставится пробел между именем функции и аргументами в скобках. Вот так:

if (wtf)
  {
    printf ("hui\n");
  }
for (v = 0; v < 1000; v++)
  {
    a[v] = b;
  }
...
kim-roader ★★
()
Ответ на: комментарий от grondek

Ух ты. То, что вы предлагаете, называется K&R style, занятно, даже не подозревал о таком.

ErasimHolmogorin
()

Почему никто? Я поначалу так делал, потом убедился, что общепринятый вариант - намного более читабельный.

Deleted
()

Кстати, интересно еще оформление аргументов функций.

Кто-то делает так:

type function(  type arg1,
                type arg2,
                type arg3
                ...
             )
Кто-то - так:
type function(type arg1, type arg2, type arg3 ...)

Ну и вариации.

Лично мне больше нравится первый вариант - легко комментировать аргументы, да и проще добавлять/удалять.

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

Если я не ошибаюсь, в ядре именно так делается. Ну и мне так удобнее - имя + параметры функции могут занимать много места.

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

Это зависит от того влезаем мы в 80 символов по строке или нет. Если не влезаем то первый вариант, или даже такой (так как он не зависит от табуляции)

void func(
   int a,
   int b,
   ...)

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

Кстати да, такой вариант я даже чаще встречал.

А вообще, меня бесит это общепринятое ограничение на 80 символов: даже в консольке ширина экрана значительно больше. Не говоря уже про текстовый редактор: для 24-дюймового монитора при ширине окна текстового редактора в 2/3 ширины экрана даже несмотря на то, что часть места слева занимает доп. панелька geany, ширина текста - 100-120 символов.

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

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

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

Я в редакторе всегда делаю вертикальный сплит, поэтому у меня редактор занимает половину ширины экрана.

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

Да. :-) Просто что-то мне в последнее время нравиться гнустайл, а это просто был повод сообщить ЛОРу об этом чудесном ситле :-)

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

Причина: большинству это неудобно.

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

Мне горизонтальный нравится. Но что-то я в последних версиях Geany этого не нахожу: то ли поломали, то ли заныкали куда-то.

Eddy_Em ☆☆☆☆☆
()

Только K&R. Всё остальное - происки приспешников империализма.

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

Правильно говорил Линус: «первым делом напечатайте спеки GNU Style. Напечатайте их, чтобы символически сжечь!». Почему бы не делать более читабельно и без лишних отступов, например, так:

if (wtf)
{
    printf("hui\n");
}
for (v = 0; v < 1000; v++)
{
    a[v] = b;
}
Или так:
if (wtf) {
    printf("hui\n");
}
for (v = 0; v < 1000; v++) {
    a[v] = b;
}

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

Мне сначала тоже так казалось. А теперь нравиться, незнаю почему. :-) Впрочем я не погроммист...

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

Отступы делать - это ерунда, достаточно прописать настройки отступоделалки в конфиг (для меня, как латентного вимера и нынешнего емаксера). Намного важнее - читабельность кода с этими отступами.

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

во, плюсую, Allman BSD рулит и заруливает
только пробел между функцией и скобкой убираю

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

Горизонтальный на широких мониторах выглядит не очень.

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

Делать сплит не при помощи клавиатуры - это особая разновидность мазохизма?

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

Делать сплит не при помощи клавиатуры - это особая разновидность мазохизма?

Знать бы, где это волшебное клавосочетание настроить...

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

А не лучше использовать нормальные редакторы? В нормальном редакторе #1 оно by default C-x 2 (горизонтальное) и C-x 3 (вертикальное), в нормальном редакторе #2 - :sp (горизонтальное) и :vsp (вертикальное).

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

Во-первых, эти ваши «нормальные редакторы» уж больно жуткие, во-вторых, чтобы с ними работать для начала надо здоровенный талмуд прочесть.

Eddy_Em ☆☆☆☆☆
()

> Чем плохи lisp-style отступы?

Риском тяжких телесных повреждений от коллег.

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

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

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

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

emacs - это вообще чуть ли не операционная система :)

vim презираю (через одно место много чего сделано). У меня вообще EDITOR=mcedit

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

Не бред. На разрешении 1440x900 при вертикальном сплите помешаются как раз 80 с небольшим символов.

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