Руководство Стэнфорда по стилю (C++)
От: LaptevVV Россия  
Дата: 18.01.17 11:48
Оценка: 6 (2) -1
https://tproger.ru/translations/stanford-cpp-style-guide/
Практически так же и пишу.
Только скобки блока — всегда на отдельных строках.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Руководство Стэнфорда по стилю (C++)
От: SergeyOsipov Россия  
Дата: 18.01.17 11:52
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

LVV>https://tproger.ru/translations/stanford-cpp-style-guide/

LVV>Практически так же и пишу.
LVV>Только скобки блока — всегда на отдельных строках.

Я вместо

const int VOTING_AGE = 18;

обычно #define делаю.


Используйте ссылочные переменные, а не указатели. Одна из причин — это то, что ссылочные переменные, в отличие от указателей, не могут принимать значение NULL:

// Плохая практика
// Принимает указатель
void process(BankAccount* account) {
...
}

// Хорошая практика
// Принимает адресную ссылку
void process(BankAccount& account) {
...
}


Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции
Отредактировано 18.01.2017 11:55 SergeyOsipov . Предыдущая версия .
Re[2]: Руководство Стэнфорда по стилю (C++)
От: LaptevVV Россия  
Дата: 18.01.17 12:03
Оценка:
SO>Я вместо
SO>const int VOTING_AGE = 18;
SO>обычно #define делаю.
А я практически никогда #define не использую.
Разве что для уловной компиляции.
SO>Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции
Как я понимаю, руководство в некоторых местах просто устарело.
Я уже давно использую nullptr;

Но все равно новичкам полезно.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Руководство Стэнфорда по стилю (C++)
От: VTT http://vtt.to
Дата: 18.01.17 12:49
Оценка: 1 (1) +8
Здравствуйте, LaptevVV, Вы писали:

LVV>https://tproger.ru/translations/stanford-cpp-style-guide/

LVV>Практически так же и пишу.
LVV>Только скобки блока — всегда на отдельных строках.

Ну и что это за очередные скрижали? Дойдя до участка

Используйте текстовую строку, стандартную для C++, а не С. С++ путает тем, что имеет два вида текстовых строк: класс string из С++ и старый char* (массив символов) из С:1

// Плохая практика: текстовая строка в стиле Cи
char* str = "Hello there";
 
// Хорошая практика: текстовая строка в стиле C++
string str = "Hello there";

я бросил читать эту лабуду.

Судя по аннотации, это просто руководство по оформлению студенческих работ.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re: Руководство Стэнфорда по стилю (C++)
От: uncommon Ниоткуда  
Дата: 23.01.17 01:30
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>https://tproger.ru/translations/stanford-cpp-style-guide/

LVV>Практически так же и пишу.
LVV>Только скобки блока — всегда на отдельных строках.

Это для студней, и содержания там на две страницы. Кого-то, наверное, совсем достало, что студни даже отступы в коде не делают.
Re[2]: Руководство Стэнфорда по стилю (C++)
От: LaptevVV Россия  
Дата: 23.01.17 04:20
Оценка: :))
U>Это для студней, и содержания там на две страницы. Кого-то, наверное, совсем достало, что студни даже отступы в коде не делают.
Это к вопросу о подготовке студентов-программистов в Стэнфорде...
Такие же балбесы, как и у нас...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Руководство Стэнфорда по стилю (C++)
От: CEMb  
Дата: 23.01.17 06:39
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

SO>>Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции

LVV>Как я понимаю, руководство в некоторых местах просто устарело.
LVV>Я уже давно использую nullptr;
Он имел ввиду что проверка указателя на nullptr может давать ветвление в коде, в то время, как ссылку на nullptr не проверишь
Но (сам отвечу) речь шла именно о параметрах функций (я бы там ещё const добавил (а в случае с указателем ещё один const)), чтобы не проверять указатель на входе, так как в 99% случаев nullptr в параметре означает выход из функции, так как по этому указателю предполагалось поработать. Оставшийся 1% подразумевает работу с указателем, непосредственное изменение данных, удаление или создание, что тоже моветон, даже/тем_более если это какая-то фабричная функция.
Re: Руководство Стэнфорда по стилю (C++)
От: Kingofastellarwar Украина  
Дата: 24.01.17 10:25
Оценка: +1 :))) :)
class Point {
public:
    Point(int x, int y);
    int getX() const;
    int getY() const;
    void translate(int dx, int dy);
 
private:
    int m_x;
    int m_y;
};



опять это гавно, public и provate это области ВНУТРИ класса и поэтому должны быть с отступом, а объявления — с двойным
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[2]: Руководство Стэнфорда по стилю (C++)
От: GhostCoders Россия  
Дата: 27.02.17 22:55
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>опять это гавно, public и provate это области ВНУТРИ класса и поэтому должны быть с отступом, а объявления — с двойным

А мне больше нравиться так:
class Point {
    int m_x;
    int m_y;
public:
    Point(int x, int y);
    int getX() const;
    int getY() const;
    void translate(int dx, int dy);
};


хотя раньше больше нравилось — сейчас нет.
Третий Рим должен пасть!
Re: Руководство Стэнфорда по стилю (C++)
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 27.02.17 23:06
Оценка: 18 (2)
Здравствуйте, LaptevVV, Вы писали:

LVV>https://tproger.ru/translations/stanford-cpp-style-guide/

LVV>Практически так же и пишу.
LVV>Только скобки блока — всегда на отдельных строках.

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

ТОП лучших инструментов C++

Artistic Style
Тип: Автоматическое форматирование кода
Платформа: кросс-платформенное
Лицензия: LGPL
Вебсайт: http://astyle.sourceforge.net

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

Re[2]: Руководство Стэнфорда по стилю (C++)
От: alexzzzz  
Дата: 03.03.17 16:01
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>

SO>Используйте ссылочные переменные, а не указатели. Одна из причин — это то, что ссылочные переменные, в отличие от указателей, не могут принимать значение NULL:
SO> ...


Если очень хочется, то могут.
Re[2]: Руководство Стэнфорда по стилю (C++)
От: cures Россия cures.narod.ru
Дата: 03.03.17 16:42
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>опять это гавно, public и provate это области ВНУТРИ класса и поэтому должны быть с отступом, а объявления — с двойным


А Маяковский вообще лесенкой писал, хотя у него даже широкоэкранных мониторов не было
Особенно замечательно такая практика работает, когда в класс без ключевых прайватов или пабликов добавляется метод с таковым: сразу надо менять отступ у всего класса Или заранее, лепя любой класс или структуру, резервировать двойной отступ.
Лично я делаю отступ для этих спецификаторов, но только один пробел, а не табуляцию. А в некоторых языках эти спецификаторы должны прилагаться к каждому методу, и это наверное правильно.
Re[2]: Руководство Стэнфорда по стилю (C++)
От: cures Россия cures.narod.ru
Дата: 03.03.17 16:51
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:
SO>Я вместо
SO>const int VOTING_AGE = 18;
SO>обычно #define делаю.

Это у Вас привычка из C сохранилась, там консты ненастоящие, рунтаймовые: их нельзя сделать размерностью статического массива, на них очень долго делить, и т.п. В плюсах это уже не нужно, и консты верхнего уровня обычно по дефолту статические.

SO>Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции


Вот в этом случае и надо передавать указатель, а не ссылку Совет же для дефолтного применения, когда объект заведомо существует. Хотя тоже может быть вреден, пойнтер хотя бы ассертнуть можно, а вот если как ссылку передать NULL (умельцы ухитряются), то привет сегфолту.
Re[3]: Руководство Стэнфорда по стилю (C++)
От: elmal  
Дата: 04.03.17 07:47
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Такие же балбесы, как и у нас...

Не совсем. У нас получившие дипломы на программерских якобы специальностях якобы приличных ВУЗов отступов не делают, не знают что такое системы контроля версий до сих пор, пишут функции на тысячу строк в которой вся логика программы и обожают копипастить, про DRY в институтах у нас не рассказывают (или рассказывают, но уже тогда, когда студенты на занятия не ходят, а работают на фултайме где то).

Я конечно видел студентов, которые пишут нормально. Но есть одно но, им эту привычку прививали не в ВУЗе.

А в Стэнфорде за такое сразу баллы снимают, и нормальный стиль прививают с первого курса, даже документ по стилю есть, причем компактный, а не на тысячу строк по ГОСТ. Собственно в Стэнфорде балбесами являются абитуриенты, уже после первых лекций уровень весьма неслабо преподы умудряются поднимать. Причем начальный базис у недавних абитуриентов — много хуже, чем у нас.
Re: Руководство Стэнфорда по стилю (C++)
От: Submitter  
Дата: 04.03.17 07:53
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

Не увидел ответ на сакраментальный вопрос: сколько должны быть пробелов в отступе/табе — 2 или 4?
Re[4]: Руководство Стэнфорда по стилю (C++)
От: LaptevVV Россия  
Дата: 04.03.17 09:58
Оценка:
LVV>>Такие же балбесы, как и у нас...
E>Не совсем. У нас получившие дипломы на программерских якобы специальностях якобы приличных ВУЗов отступов не делают, не знают что такое системы контроля версий до сих пор, пишут функции на тысячу строк в которой вся логика программы и обожают копипастить, про DRY в институтах у нас не рассказывают (или рассказывают, но уже тогда, когда студенты на занятия не ходят, а работают на фултайме где то).
Вот у нас вуз "заборостроительный".
Но давай я тебе расскажу по пунктам...
1. Система контроля версий.
а) я на 3 курсе в обязательном порядке требую использовать github в некоторых лабах.
Кроме того, в обязательно порядке рекомендую единственную книжку на русском по GIT
б) на 2 курсе в обязательном порядке делаем ревью кода по курсовым (Qt) и соответственно все функции на 1000 строк идут лесом.
Кроме того, идут лесом все обработчики событий, в которых реализуется основная функциональность.
в) DRY — там же в ревью и еженедельно на лабах...
E>Я конечно видел студентов, которые пишут нормально. Но есть одно но, им эту привычку прививали не в ВУЗе.
Мы не принимаем код, написанный в одну колонку.
И с обязательным разбиением на функции (с некоторой стадии обучения).
E>А в Стэнфорде за такое сразу баллы снимают, и нормальный стиль прививают с первого курса, даже документ по стилю есть, причем компактный, а не на тысячу строк по ГОСТ. Собственно в Стэнфорде балбесами являются абитуриенты, уже после первых лекций уровень весьма неслабо преподы умудряются поднимать. Причем начальный базис у недавних абитуриентов — много хуже, чем у нас.
Проблема в том, что от постоянных "заворотов" сильно устаешь.
И, к сожалению, у нас всего 4-балльная система оценок.
Да и та — на экзаменах.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Руководство Стэнфорда по стилю (C++)
От: Панда Россия  
Дата: 11.03.17 02:56
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>// Плохая практика

SO>// Принимает указатель
SO>void process(BankAccount* account) {
SO> ...
SO>}

SO>// Хорошая практика

SO>// Принимает адресную ссылку
SO>void process(BankAccount& account) {
SO> ...
SO>}

SO>[/q]


SO>Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции



Кроме того

void process(BankAccount* account) {
   ...
}

BankAccount* account = get_account();
process(account)


переделываем на ссылочный аргумент:

void process(BankAccount& account) {
   ...
}

BankAccount* account = get_account();
process(*account)


Ну и нихрена не помогло, UB из за разардесации нулевого указателя. В конфигурации Release скорее всего просто передастся ссылка на нулевой адрес, далее те же проблемы, что с нулевым указателем.

А если бы
void process(BankAccount& account) {
   ...
}

BankAccount& account = get_account();
process(account)


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