Не совсем понятно, о чем именно вопрос: об оформлении кода, или о дизайне пользовательского интерфейса. На всякий случай отвечу на оба.
- Существует несколько конвенций (соглашений) об оформлении кода, включающих довольно подробные рекомендации: размеры отступов во вложенных блоках кода, стиль фигурных скобок (ставить открывающую в текущей строке, или переносить на следующую), стиль именования переменных и т. д. Таким образом, достаточно выбрать любую понравившуюся структуру и стараться ей следовать. Не особо важно какую именно — главное чтобы весь код выглядел единообразно. Вообще вопрос важный, так как несмотря на то, что современные среды разработки уже умеют выполнять за пользователя такую рутинную задачу, как форматирование кода, нужно приучать себя к тому, что код должен быть удобочитаемым. Как сказал Мартин Фаулер: «Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку.»
- По части внешнего вида программы трудно уложиться в один ответ, ибо дизайн это целая наука. Из самых простых советов — это представить себя на месте пользователя. Хотя и этого порой недостаточно. То, что понятно разработчику, конечному пользователю может быть решительно непонятно. Знаю по своему опыту. Поэтому советую посадить за свою программу потенциального пользователя и понаблюдать за ним.
Источник: yandex.ru
Как оформить реферат по ГОСТУ 2020 года за 5 минут (Пример правильного оформления)
Правила оформления программы
Нет строгих правил, регламентирующих расположение конструкций текста программы. Например, можно расположить конструкции программы в одной строке [3] :
Program Hello; begin writeln(‘Hello, World!’) end.
Эта синтаксически правильная программа будет исполнена и напечатает текст Hello, World! Но программы пишет человек и читает их не только компилятор, но и другие люди. В процессе обучения Вам придется прочитать много программ, и для Вас важно, чтобы программы было удобно читать. Кроме того, правильное оформление программ упростит поиск ошибок, а многие ошибки просто не появятся в них.
В любом месте строки можно выполнять переход на следующую строку без знаков переноса. Описания и операторы располагаются таким образом, чтобы программу можно было легко читать и модифицировать:
Program Hello; begin writeln(‘Hello, World!’) end.
При написании программы используют текстуальные отступы, которые позволяют контролировать уровни вложенности составных операторов.
Для отделения друг от друга идентификаторов, чисел, зарезервированных слов используются разделители:
· пробел и табуляция;
В любом месте программы, где можно поместить один разделитель, их можно поместить любое количество и в любом сочетании, что позволяет наглядно представить структуру программы.
Упражнение. Дана программа (кстати, она содержит ошибки из-за неправильного оформления):
Python как сделать красивую программу под ПК за 10 минут?
Program Hello;Var I: Integer;BeginWriteLN(‘Hello, World!’);Write(‘Enter
the integer number, please ‘);ReadLN(I);WriteLN(‘You entered number greater than ‘, I-1, ‘,
1) Оформите ее, используя разделители и отступы.
2) Какие зарезервированные слова использованы в программе?
3) Сколько РАЗНЫХ операторов имеется в программе?
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru
Гайд по оформлению кода на С++ от Стэнфордского университета
Стэнфордский университет представил гайд по основным стандартам оформления кода на С++. Умение корректно оформить ваш код является ценным навыком, так как это в разы облегчает работу других. Также у нас есть подобная статья, посвящённая написанию самодокументируемого кода.
Пробелы и отступы
Отделяйте пробелами фигурные скобки:
// Плохая практика int x = 3, y = 7; double z = 4.25; x++; if (a == b) < foo(); >// Хорошая практика int x = 3; int y = 7; double z = 4.25; x++; if (a == b)
Ставьте пробелы между операторами и операндами:
int x = (a + b) * c / d + foo();
Когда строка становится длиннее 100 символов, разделите её на две, сделав перевод на новую строку после оператора, и продолжайте писать:
int result = reallyLongFunctionOne() + reallyLongFunctionTwo() + reallyLongFunctionThree() + reallyLongFunctionFour(); int result2 = reallyLongFunction(parameterOne, parameterTwo, parameterThree, parameterFour, parameterFive, parameterSix);
Оставляйте пустые линии между функциями и между группами выражений:
void foo() < . >// пустая линия void bar()
Названия и переменные
Давайте переменным описательные имена, такие как firstName или homeworkScore . Избегайте однобуквенных названий вроде x или c , за исключением итераторов вроде i .
Называйте переменные и функции, используя верблюжийРегистр . Называйте классы ПаскальнымРегистром , а константы — в ВЕРХНЕМ_РЕГИСТРЕ . Узнать подробнее про верблюжий регистр вы можете в этой статье.
Если переменная используется лишь внутри определенного if , то делайте её локальной, объявляя в том же блоке кода, а не глобальной.
Программист-разработчик C/C++ АО «Гринатом» , , можно удалённо , По итогам собеседования
Выбирайте подходящий тип данных для ваших переменных. Если переменная содержит лишь целые числа, то определяйте её как int , а не double .
Используйте текстовую строку, стандартную для C++, а не С. С++ путает тем, что имеет два вида текстовых строк: класс string из С++ и старый char* (массив символов) из С:
// Плохая практика: текстовая строка в стиле Cи char* str = «Hello there»; // Хорошая практика: текстовая строка в стиле C++ string str = «Hello there»;
Если определенная константа часто используется в вашем коде, то обозначьте её как const и всегда ссылайтесь на данную константу, а не на её значение:
const int VOTING_AGE = 18;
Никогда не объявляйте изменяемую глобальную переменную. Глобальными переменными должны быть только константы. Вместо того, чтобы делать значение глобальным, сделайте его параметром и возвращайте значение, когда необходимо:
// Плохая практика int count; // Глобальная переменная void func1() < count = 42; >void func2() < count++; >int main() < func1(); func2(); >// Хорошая практика! int func1() < return 42; >void func2(int count++; >int main()
Базовые выражения С++
С++ основан на С, поэтому всегда есть вариант решить задачу «путем С++» и «путем С». Например, когда вы желаете вывести что-либо на системную консоль, вы можете сделать это «путем С++» , использовав оператор вывода cout , в то время как «путем С» вы бы использовали глобальную функцию вроде printf :
// Плохая практика printf(«Hello, world!n»); // Хорошая практика cout
Частенько затрудняетесь с выбором между for и while ? Используйте цикл for , когда вы знаете количество повторений, а цикл while , когда количество повторений неизвестно:
// Повторяет ‘size’ раз for (int i = 0; i < size; i++) < . >// Повторяет, пока больше не будет строк string str; while (input >> str)
Когда используете операторы управления вроде if / else , for , while , всегда используйте < >и соответствующие отступы, даже если тело всего оператора управления состоит лишь из одной строки:
// Плохая практика if (size == 0) return; else for (int i = 0; i < 10; i++) cout else < for (int i = 0; i < 10; i++) < cout >
Старайтесь избегать использования выражений break или continue . Используйте их только в том случае, если это абсолютно необходимо.
В C++ есть функция exit , которая немедленно завершает программу. Настоятельно не рекомендуется использовать данную функцию. Программа всегда должна заканчиваться естественно, достигая оператора return функции main .
Используя выражения if / else , подобающе выбирайте между разнообразными if и else шаблонами в зависимости от условий, относящихся к друг другу. Избегайте излишних тестов if :
// Плохая практика if (grade >= 90) < cout if (grade >= 80 grade < 90) < cout if (grade >= 70 grade < 80) < cout // Хорошая практика if (grade >= 90) < cout else if (grade >= 80) < cout else if (grade >= 70) < cout .
Если у вас есть выражение if / else , которое возвращает логическое значение, возвращайте результаты теста напрямую:
// Плохая практика if (score1 == score2) < return true; >else < return false; >// Хорошая практика return score1 == score2;
Никогда не проверяйте значения логического типа, используя == или != с true или false :
// Плохая практика if (x == true) < . >else if (x != true) < . >// Хорошая практика if (x) < . >else
Чрезмерность
Если вы используете один и тот же код дважды или более, то найдите способ удалить излишний код, чтобы он не повторялся. К примеру, его можно поместить во вспомогательную функцию. Если повторяемый код похож, но не совсем, то постарайтесь сделать вспомогательную функцию, которая принимает параметры и представляет разнящуюся часть:
// Плохая практика foo(); x = 10; y++; . foo(); x = 15; y++; // Хорошая практика helper(10); helper(15); . void helper(int newX)
Переместите общий код из выражения if / else , чтобы он не повторялся:
// Плохая практика if (x < y) < foo(); x++; cout else < foo(); y++; cout // Хорошая практика foo(); if (x < y) < x++; >else < y++; >cout
Вызывая большую функцию и используя результат несколько раз, сохраните результат в переменной вместо того, чтобы постоянно вызывать данную функцию:
// Плохая практика if (reallySlowSearchForIndex(«abc») >= 0) < remove(reallySlowSearchForIndex(«abc»)); >// Хорошая практика int index = reallySlowSearchForIndex(«abc»); if (index >= 0)
Функции и процедурное проектирование
Хорошо спроектированная функция имеет следующие характеристики:
- Полностью выполняет четко поставленную задачу;
- Не берет на себя слишком много работы;
- Не связана с другими функциями бесцельно;
- Хранит данные максимально сжато;
- Помогает распознать и разделить структуру программы;
- Помогает избавиться от излишков, которые иначе присутствовали бы в программе.
Используйте параметры, чтобы отправлять информацию из функции или когда функции нужно возвратить несколько значений. Не используйте параметры без необходимости. Заметьте, что a , b , и с не являются параметрами в нижеприведенной функции, так как это не нужно:
/* * Решает квадратное уравнение ax^2 + bx + c = 0, * внося результаты в root1 и root2. * Предполагается, что данные уравнения имеют два корня. */ void quadratic(double a, double b, double c, double root2) < double d = sqrt(b * b — 4 * a * c); root1 = (-b + d) / (2 * a); root2 = (-b — d) / (2 * a); >
Когда требуется вернуть значение из функции, используйте значение return :
// Плохая практика void max(int a, int b, int if (a >b) < result = a; >else < result = b; >> // Хорошая практика int max(int a, int b) < if (a >b) < return a; >else < return b; >>
Отправляя объект в функцию как параметр, вы должны передавать его по ссылке, так как если он будет передан как значение, то будет скопирован весь объект. Копирование объектов требует больших затрат памяти.
Используйте ссылочные переменные, а не указатели. Одна из причин — это то, что ссылочные переменные, в отличие от указателей, не могут принимать значение NULL :
// Плохая практика // Принимает указатель void process(BankAccount* account) < . >// Хорошая практика // Принимает адресную ссылку void process(BankAccount . >// Хорошая практика // Принимает константную ссылку void display(const BankAccount private: int homeworkScore; .
.h vs .cpp. Всегда размещайте объявления классов и их частей в собственные файлы, ClassName.h . Всегда сворачивайте файлы объявления классов .h в блок препроцессоров #ifndef / define / endif , чтобы избежать множественных объявлений одного класса:
// Point.h #ifndef _point_h #define _point_h 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; >; #endif // Point.cpp #include «Point.h» Point::Point(int x, int y) < m_x = x; m_y = y; >void Point::translate(int dx, int dy) < m_x += dx; m_y += dy; >.
class vs struct. Всегда используйте class , только если вы не создаете очень маленький и простой вид данных, для которого нужны лишь несколько публичных переменных и, возможно, конструктор для их инициализации.
Избегайте ненужных полей. Используйте поля, чтобы хранить важные данные о ваших объектах, но не временные значения, которые используются единожды.
Источник: tproger.ru