Используйте ссылочные переменные, а не указатели. Одна из причин — это то, что ссылочные переменные, в отличие от указателей, не могут принимать значение NULL:
// Плохая практика
// Принимает указатель
void process(BankAccount* account) {
...
}
// Хорошая практика
// Принимает адресную ссылку
void process(BankAccount& account) {
...
}
Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции
SO>Я вместо SO>const int VOTING_AGE = 18; SO>обычно #define делаю.
А я практически никогда #define не использую.
Разве что для уловной компиляции. SO>Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции
Как я понимаю, руководство в некоторых местах просто устарело.
Я уже давно использую nullptr;
Но все равно новичкам полезно.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Ну и что это за очередные скрижали? Дойдя до участка
Используйте текстовую строку, стандартную для C++, а не С. С++ путает тем, что имеет два вида текстовых строк: класс string из С++ и старый char* (массив символов) из С:1
// Плохая практика: текстовая строка в стиле Cиchar* str = "Hello there";
// Хорошая практика: текстовая строка в стиле C++
string str = "Hello there";
я бросил читать эту лабуду.
Судя по аннотации, это просто руководство по оформлению студенческих работ.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
U>Это для студней, и содержания там на две страницы. Кого-то, наверное, совсем достало, что студни даже отступы в коде не делают.
Это к вопросу о подготовке студентов-программистов в Стэнфорде...
Такие же балбесы, как и у нас...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
SO>>Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции LVV>Как я понимаю, руководство в некоторых местах просто устарело. LVV>Я уже давно использую nullptr;
Он имел ввиду что проверка указателя на nullptr может давать ветвление в коде, в то время, как ссылку на nullptr не проверишь
Но (сам отвечу) речь шла именно о параметрах функций (я бы там ещё const добавил (а в случае с указателем ещё один const)), чтобы не проверять указатель на входе, так как в 99% случаев nullptr в параметре означает выход из функции, так как по этому указателю предполагалось поработать. Оставшийся 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 г.
Здравствуйте, 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);
};
А по мне стиль не столь важен. С тех пор как открыл для себя автоматическое форматирование кода на эту тему больше не задумываюсь. Даже делал как-то небольшую статью, чтобы люди сразу приобщались к инструментам определённой направленности.
В коллективном проекте код должен выглядеть так, как будь-то его написал один человек. Да и просто из банальной лени дотошно форматировать свой код попросту не охота. А так же чтобы обзоры кода не превращались в обзоры стиля кода, придуман этот инструмент. Возможности его форматирования превышают возможности редактора интегрированной среды разработки, и тем не менее он простой. Рекомендую так же установить universalindentgui, а уже через неё использовать эту или может быть даже другие подобные программы.
SO>Используйте ссылочные переменные, а не указатели. Одна из причин — это то, что ссылочные переменные, в отличие от указателей, не могут принимать значение NULL:
SO> ...
Здравствуйте, Kingofastellarwar, Вы писали:
K>опять это гавно, public и provate это области ВНУТРИ класса и поэтому должны быть с отступом, а объявления — с двойным
А Маяковский вообще лесенкой писал, хотя у него даже широкоэкранных мониторов не было
Особенно замечательно такая практика работает, когда в класс без ключевых прайватов или пабликов добавляется метод с таковым: сразу надо менять отступ у всего класса Или заранее, лепя любой класс или структуру, резервировать двойной отступ.
Лично я делаю отступ для этих спецификаторов, но только один пробел, а не табуляцию. А в некоторых языках эти спецификаторы должны прилагаться к каждому методу, и это наверное правильно.
Здравствуйте, SergeyOsipov, Вы писали: SO>Я вместо SO>const int VOTING_AGE = 18; SO>обычно #define делаю.
Это у Вас привычка из C сохранилась, там консты ненастоящие, рунтаймовые: их нельзя сделать размерностью статического массива, на них очень долго делить, и т.п. В плюсах это уже не нужно, и консты верхнего уровня обычно по дефолту статические.
SO>Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции
Вот в этом случае и надо передавать указатель, а не ссылку Совет же для дефолтного применения, когда объект заведомо существует. Хотя тоже может быть вреден, пойнтер хотя бы ассертнуть можно, а вот если как ссылку передать NULL (умельцы ухитряются), то привет сегфолту.
Здравствуйте, LaptevVV, Вы писали:
LVV>Такие же балбесы, как и у нас...
Не совсем. У нас получившие дипломы на программерских якобы специальностях якобы приличных ВУЗов отступов не делают, не знают что такое системы контроля версий до сих пор, пишут функции на тысячу строк в которой вся логика программы и обожают копипастить, про DRY в институтах у нас не рассказывают (или рассказывают, но уже тогда, когда студенты на занятия не ходят, а работают на фултайме где то).
Я конечно видел студентов, которые пишут нормально. Но есть одно но, им эту привычку прививали не в ВУЗе.
А в Стэнфорде за такое сразу баллы снимают, и нормальный стиль прививают с первого курса, даже документ по стилю есть, причем компактный, а не на тысячу строк по ГОСТ. Собственно в Стэнфорде балбесами являются абитуриенты, уже после первых лекций уровень весьма неслабо преподы умудряются поднимать. Причем начальный базис у недавних абитуриентов — много хуже, чем у нас.
LVV>>Такие же балбесы, как и у нас... E>Не совсем. У нас получившие дипломы на программерских якобы специальностях якобы приличных ВУЗов отступов не делают, не знают что такое системы контроля версий до сих пор, пишут функции на тысячу строк в которой вся логика программы и обожают копипастить, про DRY в институтах у нас не рассказывают (или рассказывают, но уже тогда, когда студенты на занятия не ходят, а работают на фултайме где то).
Вот у нас вуз "заборостроительный".
Но давай я тебе расскажу по пунктам...
1. Система контроля версий.
а) я на 3 курсе в обязательном порядке требую использовать github в некоторых лабах.
Кроме того, в обязательно порядке рекомендую единственную книжку на русском по GIT
б) на 2 курсе в обязательном порядке делаем ревью кода по курсовым (Qt) и соответственно все функции на 1000 строк идут лесом.
Кроме того, идут лесом все обработчики событий, в которых реализуется основная функциональность.
в) DRY — там же в ревью и еженедельно на лабах... E>Я конечно видел студентов, которые пишут нормально. Но есть одно но, им эту привычку прививали не в ВУЗе.
Мы не принимаем код, написанный в одну колонку.
И с обязательным разбиением на функции (с некоторой стадии обучения). E>А в Стэнфорде за такое сразу баллы снимают, и нормальный стиль прививают с первого курса, даже документ по стилю есть, причем компактный, а не на тысячу строк по ГОСТ. Собственно в Стэнфорде балбесами являются абитуриенты, уже после первых лекций уровень весьма неслабо преподы умудряются поднимать. Причем начальный базис у недавних абитуриентов — много хуже, чем у нас.
Проблема в том, что от постоянных "заворотов" сильно устаешь.
И, к сожалению, у нас всего 4-балльная система оценок.
Да и та — на экзаменах.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, SergeyOsipov, Вы писали:
SO>// Плохая практика SO>// Принимает указатель SO>void process(BankAccount* account) { SO> ... SO>}
SO>// Хорошая практика SO>// Принимает адресную ссылку SO>void process(BankAccount& account) { SO> ... SO>}
SO>[/q]
SO>Иногда NULL в качестве параметра может подразумевать отдельную ветвь логики работы функции
Ну и нихрена не помогло, UB из за разардесации нулевого указателя. В конфигурации Release скорее всего просто передастся ссылка на нулевой адрес, далее те же проблемы, что с нулевым указателем.