Как называется это соглашение для фигурных скобок?

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

Sun четко заявляет, что правильным объявлением будет:

// this declaration follows sun's conventions
class Sample extends Object {

    Sample(int i, int j) {
        ....
    }
}

Тем не менее, я все чаще вижу, что это объявляется (даже в книгах):

// this declaration follows a convention I cant identify
class Sample extends Object 
{

    Sample(int i, int j) 
    {
        ....
    }
}

И я знаю, что условность — это всего лишь условность, и пока вы ей следуете, все хорошо. Я просто ищу ответ на вопрос, какое соглашение следует последнему объявлению?


person Frankie    schedule 15.12.2010    source источник
comment
Разве теперь это не должно читаться так, как ясно заявляет Oracle...? :П   -  person FrustratedWithFormsDesigner    schedule 15.12.2010
comment
Несмотря на то, что вопрос явно касается названия конвенции, любопытно, насколько люди готовы высказывать свое мнение и предпочтения в ответах, не относящихся к теме (например, это и это) или в качестве голосов за эти ответы.   -  person Jonik    schedule 15.12.2010
comment
Правило 0: не парьтесь по мелочам. Все стандартные положения расчалки одинаково допустимы. Используйте любой из них, который вам нравится. Смешивать и сочетать. Они не оказывают существенного влияния на читабельность. Они не заслуживают включения в конвенцию.   -  person Andy Thomas    schedule 15.12.2010
comment
@Andy: Я согласен с тем, что не парьтесь по мелочам, но все же не рекомендую смешивать и сочетать. Скорее выберите один и придерживайтесь его. Даже мелочи могут повлиять на читабельность, отвлекая внимание.   -  person Jonik    schedule 15.12.2010
comment
@ Энди, нас всех (StackOverflow в целом) поразило, что мы более или менее заинтересованы в какой-то крошечной ультра-микро-спецификации, которая не имеет никакого значения для конечного результата, но удовлетворяет нашу жажду знаний. Как есть. Так же, как спросили.   -  person Frankie    schedule 15.12.2010
comment
Меня озадачивает, почему кто-то понизил бы вопрос, не оставив комментарий и не проголосовав за закрытие. Хорошо...   -  person Frankie    schedule 15.12.2010
comment
Я научился ставить фигурные скобки таким образом из книги, из которой я изучил программирование (Java). Я привык к этому сейчас   -  person stommestack    schedule 11.09.2013


Ответы (7)


Это стандартное соглашение о стиле, называемое стилем ANSI. Это распространено и в других языках, помимо Java.

person asthasr    schedule 15.12.2010
comment
+1, потому что вы ответили на вопрос, который на самом деле был задан, вместо того, чтобы отправиться на джихад о своем предпочтительном стиле. - person JeremyP; 15.12.2010
comment
@syron просто отлично! Именно то, что я искал. Спасибо! - person Frankie; 15.12.2010
comment
Я всегда считал, что это просто стиль Microsoft :) - person Joeri Hendrickx; 16.12.2010
comment
Я хотел бы добавить, что это называется стилем Оллмана. Это было неправильно приписано документации ANSI C. en.wikipedia.org/wiki/Indent_style#Allman_style - person SirTophamHatt; 16.10.2013

Как вы сказали, вы видели это довольно много - разве это не делает его самостоятельным соглашением, независимо от того, существует ли единственный источник или имя для этого соглашения? Это так легко описать, я не думаю, что это нуждается в особой атрибуции. Страница Википедии "стиль отступа" называет его стиль Allman или стиль ANSI, но, честно говоря, я использую его годами, но никогда не слышал этого имени, и я не думаю, знание имени что-то изменит в том, как я кодирую :)

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

person Jon Skeet    schedule 15.12.2010
comment
Преимущество заключается в упрощении операций управления исходным кодом, таких как сравнение и слияние. Когда кто-то идет и переформатирует целые файлы просто потому, что он предпочитает один стиль другому, это может превратить слияние из инструмента управления исходным кодом в королевскую боль. - person FrustratedWithFormsDesigner; 15.12.2010
comment
@FrustratedWithFormsDesigner: это преимущество согласованности в рамках проекта, но это не преимущество для межпроектного соглашения. Если бы я использовал стороннюю библиотеку, я бы не начал переформатировать ее код, даже если бы включил код в свою собственную систему управления версиями. - person Jon Skeet; 15.12.2010
comment
@ Джон Боюсь, как и несколько других в этой теме, вы попали в слабое место, читая вопрос. Я искал только название конвенции. С этим знанием я в конечном итоге откопаю другие аспекты конвенции (или не откопаю, если их не было). Тем не менее, в более широком смысле, я подписываюсь под всеми вашими ответами. - person Frankie; 15.12.2010
comment
@Frankie: Я согласен, поэтому я переместил первый абзац с середины наверх. Я подозреваю, что причиной такой реакции был тон вопроса, который я, конечно же, изначально воспринял как критику этих разработчиков (особенно из-за того, что Sun четко заявляет и т. д.). Только когда я перечитал вопрос, я изменил тон своего ответа. - person Jon Skeet; 15.12.2010
comment
@Джон, да. Будучи иностранцем, я, возможно, звучал немного пассивно-агрессивно. Добавьте к этому тот факт, что с Allman indent style мне намного уютнее. Ах! Разве это не звучит хорошо? Поместить слова там, где ваши мысли? Так держать. Я болею за ваши 250к! ;) - person Frankie; 15.12.2010
comment
@Frankie: Я думаю, пройдет много времени, прежде чем человеческая раса сможет точно и недвусмысленно выражать эмоции в тексте :) - person Jon Skeet; 15.12.2010
comment
@JonSkeet Я всегда благодарю Джона Скита за то, что он использует стили Allman в своих книгах. Для меня это единственный способ кодирования. Мое стремление к симметрии любит Allman и ненавидит все другие стили. - person SQL Police; 25.05.2020

См.: http://en.wikipedia.org/wiki/Indent_style.

Syrion идентифицировал его как стиль ANSI, Sun следует стилю размещения брекетов K&R.

Tangent: и теперь я знаю, что проклятый стиль называется стиль кузнецов

person wkl    schedule 15.12.2010
comment
Это может быть просто городская легенда, но я откуда-то припоминаю, что стиль K&R возник для экономии места при печати кода. - person FrustratedWithFormsDesigner; 15.12.2010
comment
... и экономия места на экране, когда все, что у вас есть, это 20 или 24 строки. Что в наши дни уже не проблема. - person foo; 18.10.2019

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

person code511788465541441    schedule 15.12.2010

Последний выглядит как стиль отступа Allman , довольно популярный в C++, но Я не видел, чтобы он часто использовался в Java.

person vitaut    schedule 15.12.2010

Второе соглашение также является стилем отступа по умолчанию в Visual Studio (и, следовательно, довольно распространенным) для C#.

person Martijn    schedule 15.12.2010

Первое соглашение экономит драгоценное пространство. Соответствие скобок в любом случае выполняется редактором.

person Costis Aivalis    schedule 15.12.2010
comment
В наше время пространство не драгоценно. Вертикальное пространство увеличивает читабельность. Мне нравится иметь возможность сопоставлять фигурные скобки на глаз, не помещая курсор или каретку над одной или другой. - person JeremyP; 15.12.2010
comment
Я, конечно, не имел в виду место на диске. Вы можете увидеть больше кода на экране высокого разрешения при использовании первого соглашения. - person Costis Aivalis; 15.12.2010