|
|
||||||
Оценка стиля кода25.01.2015, 01:27. Показов 2818. Ответов 34
Метки нет (Все метки)
Народ, есть предложение. Оцените мой код. Не в смысле функционала - в смысле стиля написания.
Значится, вот тут есть некий код:
Итак, кто за мою аннигиляцию, как написателя адекватного цпп кода - поднимите руки и скажите свое язвительное слово. ![]() Кто против - тоже не стесняйтесь.
0
|
||||||
| 25.01.2015, 01:27 | |
|
Ответы с готовыми решениями:
34
Оценка кода Оценка кода |
|
Заблокирован
|
||||||
| 25.01.2015, 01:45 | ||||||
|
BRcr, я бы переписал 1 функцию в таком оформлении:
1
|
||||||
|
58 / 51 / 38
Регистрация: 22.01.2015
Сообщений: 176
|
|
| 25.01.2015, 02:05 | |
|
Мне немного мешают многочисленные пробелы (в особенности, перед скобками), но, хоть я и новичок, код вполне адекватный и читабельный, как по мне. То ли дело у меня
1
|
|
|
209 / 183 / 114
Регистрация: 15.03.2014
Сообщений: 398
|
||||||||||||||||
| 25.01.2015, 02:55 | ||||||||||||||||
|
BRcr, выскажу свое мнение.
Пробелы 1) После скобки и перед скобок. Если между скобками пусто, то и пробел не нужен. Но подряд идущие скобки также отделяются пробелом. 2) Знаки бинарных операций отделены пробелами с обеих сторон от своих операндов. Унарные операции не отделяются пробелом от своих операндов.
Вложенные операторы типа for и нижеследующих if отделяю пустой строкой если "родительский" оператор верхнего уровня имеет предыдущие операторы в своем теле. Не пишу фигурных скобок, когда этого не требуется. Знаю что это спорный вопрос для многих.
Добавлено через 6 минут Дополнение - согласен с Ev_Hyper, что return в конце функции также отделяется пустой строкой. Пустые строки иногда заменяю комментариями.
1
|
||||||||||||||||
|
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
|
|||||||||||
| 25.01.2015, 08:14 | |||||||||||
|
BRcr, единственное, что вызвало негатив, пробелы между скобками. Я привык ставить пробелы только между знаками сравнения:
1
|
|||||||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 25.01.2015, 08:20 | ||
|
1
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||||||
| 25.01.2015, 11:10 | ||||||
|
форматирование в данном случае читать не мешает.
1. В теле метода check_condition страшный цикл с итераторами заменяется на return find_if(...) == cells.end(); 2. В методе engine_make_step первый цикл перегружен логикой. Помимо итерации он еще на каждом шаге сбрасывает состояние accepting_neibs, declinatory_neibs. Значит, их вообще нужно вынести в другой метод. 3. Второй цикл не лучше — опять в нем какая-то логика помимо итерации. Причем условия, связанные с cell инвариантны. Первая мысль — заменить на range-for. Но если посмотреть дальше, то по сути это два вызова функции типа filter. 4. Последний блок условий — "выбрать receiver и передать его в функцию". Так и переписываем. 5. Семантика проверок типа "size > 0" — проверка на непустоту. Переписываем на not empty. Что еще не нравится. 6. Выбор случайного элемента можно вынести в отдельную функцию, чтобы это страшное выражение не мозолило глаза. 7. Использование сырых сишных указателей. 8. Нужно больше const'a. 9. Если уж говорить о стиле, поля класса лучше именовать, например, с суффиксом _. По фрагменту кода приходится просматривать все, чтобы понять, объявлена переменная локально или находится в скрытом от глаз коде. Дисклеймер: 1. При переписывании кода могла быть искажена логика. По очевидным причинам отладить я не мог. 2. Для форматирования использовал clang-format с настройками по умолчанию, поэтому так сильно отличается. Считаю это непринципиальным вопросом.
И еще все вызовы copy_if и любых других сложных конструкций для читаемости можно обернуть в функции с человекопонятным названием.
3
|
||||||
|
Ушел с форума
|
||||||
| 25.01.2015, 11:16 | ||||||
|
По мне так вполне нормальный код. На четверку (по пятибальной шкале).
Замечания: * строки 28-35 явно перегружены. Разгрузить for и будет ок. * закомментированные строки (26, 54, 60, 64) вызывают желание найти разработчика и, тряхнув его как следует, спросить: нафига ? что здесь было ? почему закомментил ? почему просто не стер ? И т.д. Короче, такие вещи или снабжать TODO-комментами, или сразу затирать, чтобы не вносить неясность. *
1
|
||||||
|
|
||
| 25.01.2015, 11:35 | ||
|
Например, вместо: C++ return cells[accepting_neibs[std::rand() % accepting_neibs.size()]]; C++ r = gen_random (accepting_neibs.size()); a = accepting_neibs[r]; return cells[a];
1
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 25.01.2015, 15:09 | |
|
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||
| 25.01.2015, 15:26 | ||
|
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 25.01.2015, 15:28 | |||
|
Добавлено через 28 секунд
0
|
|||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 25.01.2015, 15:30 | |
|
Не хочу продолжать этот спор.
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 25.01.2015, 15:31 | |
|
Слив защитан.
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
| 25.01.2015, 15:36 | |
|
Да как угодно.
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||
| 25.01.2015, 22:49 | |||
|
Добавлено через 12 минут
0
|
|||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 26.01.2015, 13:43 | |||
|
Добавлено через 3 минуты Добавлено через 6 минут Оболочечный бред хорош ровно в двух случаях: 1. Когда надо реализация сделана в dll, а нужен синтаксис метода. 2. Если надо быстро перешить большой исходник на другой прототип вызываемой функции с другими параметрами. В остальных случаях единственный их эффект - добавление лишнего вызова в цепочку. Задача израсходовать стек решается проще, эффективней и вообще не стоит.
0
|
|||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 26.01.2015, 14:38 | |
|
Эйси. Название формы бессмысленно и чревато забывчивостью.
0
|
|
|
Почетный модератор
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 26.01.2015, 15:01 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Честно сказать я иной раз вздрагиваю, видя как ты заполняешь шапку цикла. Унификация это конечно хорошо, но не в угоду читаемости же. Если привыкнуть, то конечно ничего страшного. Но у меня стек в голове переполняется, когда пытаюсь вот так с размаху скобки в цикле поглядеть:
Про пробелы при скобках
Что же касается скобочки при for, при if, при функции любой в общем случае, то тут несколько вариантов визуального выделения на выбор:
Про пустые круглые скобки (.size() .end()...), то тут пробел на мой взгляд не нужен. Полезной нагрузки он не несет, а вот наоборот заставляет глаз за него цепляться, а это сто лет не надо. Про указатель и разыменовывание
Опять же несколько вариантов расположения вчастности звездочки. Но в единственном числе сильно не принципиально где она будет расположена, а вот уже когда несколько в ряд идет объявлений тех же указателей, то разница ощущается:
Сложно, к примеру, неверно прочесть вот такую запись: C++ some_type *pst, st; C++ some_type* pst, st;
Итог: вцелом все замечательно, но инициализация без оператора равно вырывает глаза.
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 26.01.2015, 15:05 | |||
|
1
|
|||
| 26.01.2015, 15:05 | |
|
Помогаю со студенческими работами здесь
20
оценка кода
Оценка кода динамического двумерного массива Оценка стиля написания кода Настройка стиля кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|