Russian Qt Forum
Ноябрь 15, 2024, 15:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Голосование
Вопрос: Переносите ли вы '{' на следующую строку?
Да, но только в членах-методах класса
Да, но только в обычных конструкциях (Типа if)
Да, везде
Нет, нигде не использую

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Зачем '{' переносить на следующую строку?  (Прочитано 9922 раз)
yarick
Гость
« : Апрель 19, 2013, 16:06 »

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

Например
Код:
MyClass::myFunc()
{
//code
}
- некрасиво. Во многих языках делают так:
Код:
MyClass::myFunc(){
//code
}

Должна быть явная причина... А при желании можно настроить автоформат и перегнать весь проект туда-сюда
Записан
_OLEGator_
Гость
« Ответ #1 : Апрель 19, 2013, 16:08 »

Зачем люди используют желтый цвет в одежде? - Да нравится им желтый цвет!
Лично я предпочитаю как раз первый вариант оформления кода.
Записан
maint
Гость
« Ответ #2 : Апрель 19, 2013, 16:40 »

методы  форматирования текста разные. И они определяются во вкладе qtcreator "проекты".  Если бы вы бросились не на Qt, а на изучение языка C++, то прочли бы в книгах о способах форматирования исходников.
Записан
Figaro
Гость
« Ответ #3 : Апрель 19, 2013, 16:45 »

Смотри требования к оформлению кода... хз.. не помню как по англицки это звучит... товарищи тебя научат... и в каждой конторе, если не дебилы, этот подход соблюдаетсся до истеричного варианта...
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Апрель 19, 2013, 16:49 »

вложенные блоки легче визуально определить, когда они определены отдельностоящими { и }
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Апрель 19, 2013, 17:12 »

кому-то может быть жалко лишней строчки. лично я использую второй вариант.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #6 : Апрель 19, 2013, 17:20 »

Мне импонирует первый вариант.

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

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

Сравни варианты
Код:
fludfasdfd;
fasflud;
fludfd;
bla bla;
if(bla < blaBla && bla !=0 && bla < 999999)
{
    tirik;
    if (bla < blaBpl)
    {
        ddd;
        aaa;
        fff;
    }
    turik;
}
flud;

и второй вариант

Код:
fludfasdfd;
fasflud;
fludfd;
bla bla;
if(bla < blaBla && bla !=0 && bla < 999999){
    tirik;
    if (bla < blaBpl){
        ddd;
        aaa;
        fff;
    }
    turik;
}
flud;

В общем я за первый. И ненавижу второй Веселый
PS потому что пользуюсь первым!
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Апрель 19, 2013, 21:28 »

ой, я имел в виду первый Веселый
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
_OLEGator_
Гость
« Ответ #8 : Апрель 19, 2013, 21:35 »

Для наглядности, советую прикрутить автору голосовалку и проверить приверженность форумчан к какому-то стилю.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #9 : Апрель 19, 2013, 21:40 »

Но тут надо отделить мух от котлет. Имею ввиду скобочки в выражениях и скобочки в функциях/методах. Улыбающийся

Для выражений - второй вариант
Для методов - первый вариант
Записан

ArchLinux x86_64 / Win10 64 bit
tester64
Гость
« Ответ #10 : Апрель 21, 2013, 16:00 »

Стилей оформления C++ кода много.
К примеру, см. доку Artistic Style.
Если брать исторический тренд, то вначале "{" переносились на новую строку для всех языковых конструкций (Керниган и Ритчи, C), потом возобладали компромиссные варианты (например, Страуструп использует перенос только для методов классов и функций), сейчас, я бы сказал, раскол, некоторые корпорации предпочитают не использовать переносов "{" вообще (см. например Google C++ Style Guide).

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

У меня сложился стиль оформления, близкий к Google. Единственное, что меня раздражает в их стиле, - чрезмерные отступы при разрыве длинного списка параметров функции, я в таких случаях использую тот же отступ, что и для тела функции, для наглядности префиксируя строки запятыми и перенося "{" на отдельную строку.
К слову, к Google я не испытываю никакого пиетета.
Записан
Bepec
Гость
« Ответ #11 : Апрель 21, 2013, 16:54 »

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

К тому же на "чтение" влияет так же скорость чтения отдельного человека. С моим "книгу в 500 страниц за час" довольно легко держать в памяти пару классов.

Тут ещё вопрос проектов. К примеру проект с скобками на новых строках понимается легче из-за четкого разделения блоков кода Улыбающийся 

PS Ну и проще говоря - в говнокоде любого программиста, соблюдающего правило "скобки на новых строках", разобраться в несколько раз легче, чем в коде такого же программиста, но следующего другим правилам.

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

PPPS ой на демагогию меня потянуло. Ппц.

 
Записан
tester64
Гость
« Ответ #12 : Апрель 21, 2013, 18:46 »

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

Это если в сфероконных условиях (от "сферический конь в вакууме" Улыбающийся ).
В реальности под напором сенсорных образов - ты же ведь не над одной строчкой кода медитируешь Улыбающийся - образ размывается очень быстро: взгляд мотнулся вверх-вниз, зацепил непроизвольно соседние блоки, при прокрутке метнулся (бессознательно) за изменившимся бегунком, если для навигации по модулю используется "Class view" или "Outline", перескочил на соответствующую панель... и всё, наблюдаем картину Репина "Приплыли" - старые образы начинают затираться, и нужно прикладывать специальное усилие, чтобы сконцентрироваться на нужном.
Объём же кратковременной памяти составляет 4-5 однотипных единиц (кстати, вовсе не 3-9, как считалось ранее, пример с телефонным номером не показатель, поскольку единицей там является группа цифр, которая запоминается как отдельный глиф).

К тому же на "чтение" влияет так же скорость чтения отдельного человека. С моим "книгу в 500 страниц за час" довольно легко держать в памяти пару классов.

Ну мы же не беллетристику читаем, типа "прочитал и тут же забыл" Улыбающийся. Какая эффективность усвоения этих пятисот страниц?... Улыбающийся Как бы не вышло, что околонулевая... Это если говорить о технической литературе. А если о коде, то всё ещё сложнее, поскольку линейное (без мысленного прохода по стеку возможных вызовов и по иерархиям классов) и монотонное (без остановок на осмысление) прочтение - это вообще nonsense. Лимитирующим фактором тут будет не скорость визуального восприятия, а скорость осмысления.

И не надо давить цифрами.
С быстрочтением я ознакомился ещё в начале восьмидесятых, до сих пор на полке лежит препринт книги с дарственной надписью автора (Хромов Лев Николаевич).
Так что представление о его возможностях и недостатках имею достаточное.

Тут ещё вопрос проектов. К примеру проект с скобками на новых строках понимается легче из-за четкого разделения блоков кода Улыбающийся

По мне - как раз наоборот.
Но зависит от индивидуальных особенностей восприятия человека.
Если стиль мышления больше синтетический (нисходящий, от высших абстракций к низшим) и "препроцессор" Улыбающийся успевает на лету структурировать зрительный образ, то достаточно использования отступов по глубине вложенности.  Перенос открывающей скобки только запутывает. Для иллюстрации: вот у тебя есть дерево (допустим, файловой системы), в котором часть пунктов  - в одну строку, а часть - в две, воспринимать дерево стало же сложнее, правильно?!...

PS. Насчёт "говнокода", я этот термин вообще не употребляю. Хотя бы потому, что хороший код - это вообще исключение.
Записан
Bepec
Гость
« Ответ #13 : Апрель 21, 2013, 19:29 »

Улыбающийся Мои 500 страниц = запоминание смысла, запоминание ключевых моментов, которые позволяют восстановить всю последовательность событий Веселый

Но не буду спорить. Ваше сообщение больше. Будьте довольны Улыбающийся
Записан
yarick
Гость
« Ответ #14 : Апрель 22, 2013, 15:49 »

Стилей оформления C++ кода много.
К примеру, см. доку Artistic Style.
Спасибо большое,а то я как раз хотел задать вопрос где найти прогу дабы перегнать быстро весь код в тот или иной формат.

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

Да, действительно здесь идёт противоречие двух взглядов - один за простоту и компактность кода, другой за наглядность блоков кода в ущерб компактности. Но я решил что последний всё-таки перевешивает, здесь компактностью можно пожертвовать.

Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.096 секунд. Запросов: 25.