Что такое исходный код программы. Действительно ли вам нужен исходный код

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

Назначение

Исходный код либо используется для получения объектного кода, либо выполняется интерпретатором. Изменения выполняются только над исходным, с последующим повторным преобразованием в объектный.

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

Кроме того, исходный код имеет много других применений. Он может использоваться как инструмент обучения; начинающим программистам бывает полезно исследовать существующий исходный код для изучения техники и методологии программирования. Он также используется как инструмент общения между опытными программистами благодаря своей лаконичной и недвусмысленной природе. Совместное использование кода разработчиками часто упоминается как фактор, способствующий улучшению опыта программистов.

Программисты часто переносят исходный код (в виде модулей , в имеющемся виде или с адаптацией) из одного проекта в другой, что носит название повторного использования кода .

Исходный код - важнейший компонент для процесса портирования программного обеспечения на другие платформы. Без исходного кода какой-либо части ПО портирование либо слишком сложно, либо вообще невозможно.

Организация

Исходный код некоторой части ПО (модуля, компонента) может состоять из одного или нескольких файлов . Код программы не обязательно пишется только на одном языке программирования. Например, часто программы, написанные на языке Си , из соображений оптимизации содержат вставки кода на языке ассемблера . Также возможны ситуации, когда некоторые компоненты или части программы пишутся на различных языках, с последующей сборкой в единый исполняемый модуль при помощи технологии, известной как компоновка библиотек (library linking ).

Сложное программное обеспечение при сборке требует использования десятков или даже сотен файлов с исходным кодом. В таких случаях для упрощения сборки обычно используются файлы проектов, содержащие описание зависимостей между файлами с исходным кодом и описывающие процесс сборки. Эти файлы также могут содержать параметры для компилятора и среды проектирования. Для разных сред проектирования могут применяться разные файлы проекта, причём в некоторых средах эти файлы могут быть в текстовом формате, пригодном для непосредственного редактирования программистом с помощью универсальных текстовых редакторов, в других средах поддерживаются специальные форматы, а создание и изменения файлов производится с помощью специальных инструментальных программ. Файлы проектов обычно включают в понятие «исходный код». Часто под исходным кодом подразумевают и файлы ресурсов, содержащие различные данные, например графические изображения, нужные для сборки программы.

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

Качество

В отличие от человека, для компьютера нет «хорошо написанного» или «плохо написанного» кода. Но то, как написан код, может сильно влиять на процесс сопровождения ПО . О качестве исходного кода можно судить по следующим параметрам:

  • читаемость кода (в том числе наличие

Теперь, когда вы понимаете концепцию программирования, мы рассмотрим исходный код – его главные составляющие и принципы работы с ними.

Эта статья в цикл статей о разработке для начинающих, .

Часть 2 – Исходный код

Многие языки программирования поставляются со множеством библиотек. Они обычно называются SDK (комплекты разработки программного обеспечения). Загружаются вместе с компилятором для дальнейшего создания технологий, приложений и проектов. Также существуют фреймворки , созданные, чтобы облегчить разработку проекта и объединить его различные составляющие.

Некоторые идентификаторы в комплекте с выбранным языком не могут использоваться в качестве идентификатора пользователя. Примером является слово string в Java. Такие идентификаторы вместе с ключевыми словами называются Зарезервированными Словами . Они также являются особыми.

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

Основные типы данных

Исходный код – сосредоточение разных типов даннх: числа (3, 5.7, -100, 3.142) и символы (M, A). В некоторых языках программирования числа разбиваются на подтипы, такие как integers (целые числа).

Целые числа могут быть знаковыми и беззнаковыми , большими и малыми. Последние фактически зависят от объема памяти, зарезервированного для таких чисел. Есть числа с десятичными частями, обычно называемые double и float , в зависимости от языка, который вы изучаете.

Также существуют логические типы данных boolean , которые имеют значение true или false .

Сложные типы данных

Указанные выше типы известны как элементарные, первичные или базовые. Мы можем создавать более сложные типы данных из приведенных базовых.

Массив (Array ) – это простейшая форма сложного типа. Строка (String ) – это массив символов. Мы не можем обойтись без этих данных и часто используем их при написании кода.

Комбинация символов – это строка . Чтобы использовать аналогию, строка для компьютера означает, что слово принадлежит человеку. Слово «термометр» состоит из 9 символов – мы просто называем это строкой символов. Обработка строк – это обширная тема, которая должна изучаться каждым начинающим программистом.

Сложные типы данных поставляются с большинством языков программирования, которые используются. Есть и другие, такие как системы классов. Это явление также известно как объектно-ориентированное программирование (ООП ).

Переменные

Переменные – это просто имена областей памяти. Иногда нужно сохранить данные в исходном коде в месте, откуда их можно вызвать, чтобы использовать. Обычно это место памяти, которое резервирует компилятор/интерпретатор. Нам нужно дать имя этим ячейкам памяти, чтобы потом их вспомнить. Рассмотрим фрагмент кода Python ниже:

pet_name = "Hippo" print pet_name

pet_name = "Hippo"

print pet_name

pet_name – пример переменной, и тип данных, хранящихся в pet_name , является строкой, что делает переменную строковой. Существуют также числовые. Таким образом, переменные классифицируются по типам данных.

Константы

Константы – это значения, которые не изменяются на протяжении всего жизненного цикла программы. Чаще всего в их именах используются заглавные буквы. Некоторые языки поддерживают создание постоянных значений, а некоторые – нет.

Существуют строго типизированные языки программирования , в которых каждая переменная должна быть определенного типа. Выбрав тип один раз, вы больше не сможете его изменить. Java – хороший пример такого ЯП.

Другие же не предоставляют эти функции. Они являются свободно типизированными или динамическими языками программирования . Пример – Python.

Вот как объявить постоянное значение в JavaScript:

JavaScript

const petName = "Hippo"

const petName = "Hippo"

Литералы

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

В приведенном выше фрагменте слово «Hippo» является строковым литералом. Это всегда будет «Hippo», пока вы не отредактируете исходный код. Когда вы научитесь кодить, узнаете, как управлять литералами таким образом, чтобы оставлять неизменной большую часть кода.

Пунктуация/Символы

В большинстве написанных программ вы найдете различные знаки препинания в зависимости от выбранного языка программирования. Например, в Java используется больше знаков препинания, чем в Python.

Основные знаки включают в себя запятую (, ), точку с запятой (; ), двоеточие (: ), фигурные скобки ({} ), обычные круглые скобки (() ), квадратные скобки (), кавычки («» или » ), вертикальную черту (| ), слэш (\ ), точку (. ), знак вопроса (? ), карет (^ ) и процент (% ).

Добро пожаловать в мир программирования, где знаки препинания – ваши лучшие друзья. Скоро вы обнаружите, что в коде их всегда очень много.

Операторы

Шансы, что вы будете писать исходный код для выполнения какой-нибудь операции, крайне высоки. Любые языки программирования, которые мы используем, включают в себя множество операторов. Среди применяемых выделяют сложение (+ ), деление (/ ) умножение (* ), вычитание () и знак больше (> ).

Операторы обычно классифицируются следующим образом:

  1. Операторы присваивания . Они иногда истолковываются как equals , что неправильно. Равенство используется для сравнения двух значений. А вот оператор присваивания присваивает значение переменной, например pet_name = ‘Hippo’
  2. Арифметические операторы . Состоят из операторов для выполнения арифметических задач, таких как сложение и вычитание. Некоторые языки программирования предоставляют арифметические операторы, когда другие могут их не иметь в своем арсенале. Например, оператор модуля/остатка (% ) возвращает остаточное значение в операциях деления.
  3. Реляционные операторы . Используются для сравнения значений. Они включают в себя больше, меньше, равно, не равно. Их представление также зависит от того, какой язык программирования вы изучаете. Для некоторых ЯП не равно – это <> , для других же – != или !== .
  4. Логические операторы . Применяются для произведения логических операций. Обычно используемыми логическими операторами являются и , или , нет . Некоторые языки представляют эти операторы в виде специальных символов. Например, && для представления логического и , || – для или , и ! – для нет . Логические значения принято оценивать с помощью булевых значений true или false .

Комментарии

Документация будет важным аспектом деятельности в сфере программирования. Это то, как вы объясняете свой код другим программистам. Подобное делается с помощью комментариев, которые добавляются к различным частям кода. С помощью комментариев вы можете направлять других программистов через написанную программу.

Компилятор игнорирует строки кода, которые являются комментариями.

Объявление комментариев разное для разных языков. Например, # используется для ввода комментариев в языке Python.

Вот пример комментария в Python:

# фрагмент программы для вычисления фибоначчи из N чисел

Java

// рекурсивная реализация Factorial import java.util.Scanner; class RecursiveFactorial { public static void main(String args) { Scanner input=new Scanner(System.in); System.out.print("Find the Factorial of: "); int num=input.nextInt(); System.out.println("Factorial of "+num+" = "+fact(num)); } static long fact(int n) { if(n < 2) return 1; return n * fact(n-1); } }

Назначение

Исходный код либо используется для получения объектного кода, либо выполняется интерпретатором. Изменения никогда не выполняются над объектным кодом, только над исходным, с последующим повторным преобразованием в объектный.

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

Кроме того, исходный код имеет много других применений. Он может использоваться как инструмент обучения; начинающим программистам бывает полезно исследовать существующий исходный код для изучения техники и методологии программирования. Он также используется как инструмент общения между опытными программистами, благодаря своей (идеально) лаконичной и недвусмысленной природе. Совместное использование кода разработчиками часто упоминается как фактор, способствующий улучшению опыта программистов.

Программисты часто переносят исходный код из одного проекта в другой, что носит название повторного использования кода (Software reusability ).

Исходный код - важнейший компонент для процесса портирования программного обеспечения на другие платформы. Без исходного кода какой-либо части ПО, портирование либо слишком сложно, либо вообще невозможно.

Организация

Исходный код некоторой части ПО (модуля, компонента) может состоять из одного или нескольких файлов . Код программы не обязательно пишется только на одном языке программирования. Например, часто программы, написанные на языке Си , с целью оптимизации, содержат вставки кода на языке ассемблера . Также возможны ситуации, когда некоторые компоненты или части программы пишутся на различных языках, с последующей сборкой в единый исполняемый модуль при помощи технологии известной как компоновка библиотек (library linking ).

Сложное программное обеспечение при сборке требует использования десятков, или даже сотен файлов с исходным кодом. В таких случаях для упрощения сборки обычно используются файлы проектов, содержащие описание зависимостей между файлами с исходным кодом, и описывающие процесс сборки. Эти файлы так же могут содержать и другие параметры компилятора и среды проектирования. Для разных сред проектирования могут применяться разные файлы проекта, причем в некоторых средах эти файлы могут быть в текстовом формате, пригодном для непосредственного редактирования программистом с помощью универсальных текстовых редакторов, в других средах поддерживаются специальные форматы, а создание и изменения файлов производится с помощью специальных инструментальных программ. Файлы проектов обычно включают в понятие «исходный код». В подавляющем большинстве современных языковых сред обязательно используются файлы проектов вне зависимости от сложности прочего исходного кода, входящего в данный проект. Часто под исходным кодом подразумевают и файлы ресурсов, содержащие различные данные, например, графические изображения, нужные для сборки программы.

Для облегчения работы с исходным кодом, для совместной работы над кодом командой программистов, используются системы управления версиями .

Качество

В отличие от человека, для компьютера нет «хорошо написанного» или «плохо написанного» кода. Но то, как написан код, может сильно влиять на процесс сопровождения ПО . О качестве исходного кода можно судить по следующим параметрам:

  • читаемость кода (в том числе наличие или отсутствие комментариев к коду;
  • лёгкость в поддержке, тестировании, отладке и устранении ошибок, модификации и портировании;
  • низкая сложность;
  • низкое использование ресурсов - памяти, процессора, дискового пространства;
  • отсутствие замечаний, выводимых компилятором;
  • отсутствие «мусора» - неиспользуемых переменных, недостижимых блоков кода, ненужных устаревших комментариев и т. д.

Неисполняемый исходный код

См. также

  • Пример: Программа Hello world

Ссылки

Wikimedia Foundation . 2010 .

Смотреть что такое "Программный код" в других словарях:

    программный пакет - 3.19 программный пакет: Архивный файл, содержащий программный код в бинарном или исходном виде, а также метаданные о программе, ее версии, зависимостях и другую информацию. Источник: ГОСТ Р 54593 2011: Информационные технологии. Свободное… …

    - (англ. Netscape Plugin Application Programming Interface, NPAPI кросс платформенная архитектура разработки плагинов, поддерживаемая многими браузерами. Интерфейс был разработан для семейства браузеров Netscape Navigator, начиная с Netscape… … Википедия

    В компьютерных науках программный агент это программа, которая вступает в отношение посредничества с пользователем или другой программой. Слово «агент» происходит от латинского agere (делать) и означает соглашение выполнять действия от… … Википедия

    Framework термин, имеющий размытое значение. Обычно используется в программировании, обозначая «простую концептуальную структуру, используемую для решения сложной, проблемной задачи». Значение этого термина существенно зависит от контекста его… … Википедия

    Эта статья о системе команд в целом; об инструкциях см.: Код операции. Машинный код (платформенно ориентированный код), машинный язык система команд (набор кодов операций) конкретной вычислительной машины, которая интерпретируется… … Википедия

    Официальная терминология

    Вирус (компьютерный, программный) - исполняемый программный код или интерпретируемый набор инструкций, обладающий свойствами несанкционированного распространения и самовоспроизведения. Созданные дубликаты компьютерного вируса не всегда совпадают с оригиналом, но сохраняют… … Словарь-справочник терминов нормативно-технической документации

    - (англ. managed code) термин, введённый Microsoft для обозначения кода программы, исполняемой под «управлением» виртуальной машины.NET Common Language Runtime. При этом обычный машинный код называется неуправляемым кодом… … Википедия

    Заплатка, или патч (англ. patch /pætʃ/ заплатка) автоматизированное отдельно поставляемое программное средство, используемое для устранения проблем в программном обеспечении или изменения его функционала, а также сам процесс установки патча (… … Википедия

    Pyramid Тип Программный каркас веб приложений Разработчик … Википедия

Книги

  • Объектно-ориентированное проектирование: концепции и программный код , Гаст Хольгер. Эта книга призвана помочь читателю глубоко усвоить понятие объектов, раскрыть их истинный потенциал, чтобы писать код, эффективно работающий в реальных условиях. Вней рассматриваются…

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

Программный код - это набор слов и символов языка программирования.

Алфавит - это полный набор букв, цифр и символов, принятых в языке для обозначения данных и действий над ними.

Алфавит языка Visual Basic включает следующий набор символов :

Прописные (A - Z) и строчные (а - z) буквы латинского алфавита;

Цифры от 0 до 9;

Знаки арифметических операций (в порядке возрастания приоритета): +, -, *, /, |, ^;

Знаки операций отношения: =, <, >.

Знаки препинания и разделители: ,  . : ; ();

В алфавит языка входят также зарезервированные слова, которые не могут быть использованы в качестве имен переменных или процедур. Примеры зарезервированных слов: Dim, Sub, Integer и т.д. По умолчанию для выделения ключевых слов в окне редактирования кода Visual Basic используют шрифт синего цвета.

Слова и символы должны быть записаны строго по правилам языка, без орфографических и пунктуационных ошибок. Именно точное написание позволит компьютеру однозначно понять и выполнить программу.

Окно программного кода

Программный код записывается в окне кода. Такое окно имеется у каждой формы.

Открыть окно кода:

1 способ - в окне Проводник Проекта щелкнуть правой кнопкой по нужной форме и в открывшемся меню выбрать Показать код.

Примечание : окно кода может быть и не связано с формой. Отдельное окно кода называется Модуль . Модули в окне Проводник проекта сгруппированы в группу Модули . Для открытия окна с кодом модуля нужно в окне Проводник проекта дважды щелкнуть по имени модуля.

2 способ - дважды щелкнуть по элементу управления на форме или по самой форме в окне формы.

Примечание : при этом не только открывается окно кода, но и создается процедура обработки события (см. ниже).

Структура окна кода:

Рис. 7. Окно программного кода.

    Список элементов управления

    Список событий элементов управления

    Процедура (код)

Процедуры

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

Visual Basic - процедурный программирования язык. Это означает, что в нем можно создавать блоки программного кода, на которые затем можно ссылаться по имени. После того как блок кода получит имя, он может быть вызван и выполнен. Это похоже на программу в программе. Маленькие программы, "живущие" в больших программах, называются функциями, если они возвращают какое-либо зна­чение, и подпрограммами, если они значений не возвращают.

Подпрограммы и функции делают процесс программирования более простым и быстрым, а создаваемый код - более надежным. Создание собственных подпрограмм и функций - первый шаг к разработке инкапсулированного и повторно используемого кода. Под инкапсуляцией следует понимать сокрытие реализации свойств и мето­дов объекта за его внешним интерфейсом.

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

Если процедура может выполняться только внутри данного программного блока (например, только в этой форме), и её нельзя вызвать из другого программного блока, то такая процедура является локальной. Локальная процедура задается с помощью ключевого слова Private Sub.

Если процедуру можно вызвать из других программных блоков (например из другой формы), то такая процедура является глобальной. Глобальная процедура задается с помощью ключевого слова Public Sub.

По умолчанию, если перед ключевым словом Sub, отсутствует ключевое слово, то эта глобальная процедура.

Процедуры бывают:

    Процедуры обработки событий . Выполняются при возникновении какого-либо события в каком-либо элементе управления (или форме). Событийная процедура всегда связана с каким-то объектом. Чтобы вызвать событийную процедуру объекта, достаточно по этому объекту сделать двойной левый щелчок.

    Произвольные процедуры . Она не связаны с событиями и могут быть вызваны из любой другой процедуры и выполнены в любое время. Если в программе во всех формах встречается один и тот же программный блок, то его можно записать только один раз и в одном месте, в виде глобальной общей программы. Запуск общей программы не связана с объектом и с событием, а происходит, когда к нему обращаются из других программных блоков. Вызов общей процедуры из той же формы: ИмяПроцедуры (СписокПараметров) . Вызов общей процедуры из другой формы: ОБЪЕКТ. ИмяПроцедуры (СписокПараметров) . Общая процедура бывает и локальной Private и глобальной Public

Структура процедуры

Процедура состоит из следующих элементов:

    Заголовок процедуры - отмечает начало процедуры, ее тип, назначение (событие).

Пример заголовка процедуры, которая выполняется при щелчке мышью по кнопке с именем Command1.

    Слово Private означает - закрытая, то есть процедура принадлежит только данной форме или модулю и не может быть использована другими контейнерами (формами, модулями). Если это слово опустить, то процедура будет открыта для других контейнеров.

    Sub - процедура.

Примечание : кроме процедур бывают функции - function. Функции не связаны с событиями и дополнительно могут возвращать результат своей работы (вычислений).

    Элемент управления (или имя формы): здесь указывается точное имя элемента, хранящееся в свойстве Name.

    Событие - наименование события. Вот некоторые события:

    Click - щелчок мышью;

    DblClick - двойной щелчок мышью;

    KeyPress - нажатие клавиши;

    UnLoad - выгрузка формы (при закрытии формы, завершении программы);

    Activate - активизация формы (при щелчке по форме, когда ее заголовок подсвечивается);

    Deactivate - деактивизация формы (при щелчке по другой форме).

    Initialize - при создании объекта типа форма.

    Resize - при изменении размера формы

    Terminate - в момент удаления формы

    Аргументы - это исходные данные, передаваемые процедуре для обработки.

У произвольных процедур заголовок следующий:

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

    Окончание процедуры - заканчивает программный код процедуры: End Sub

Примечание : у функций: End Function

    Тело процедуры - это строки между заголовком и окончанием. Их количество неограниченно. Строки содержат предписания, которые должны выполниться при вызове процедуры (возникновении события).

Подпрограмма (Sub ) - представляет собой процедуру, выполняющую про­граммный код в пределах своего блока и не возвращающую значения. Синтаксис про­стой подпрограммы таков:

( Private | Public ) Sub SubMain ()

..строки кода End Sub

Область видимости подпрограммы;

Sub -тип процедуры (а именно - подпрограмма);

subMain имя, присваиваемое подпрограмме;

End Sub -окончание блока кода подпрограммы.

Создание процедуры

Для создания процедуры выполните следующее:

    1 способ - дважды щелкните по нужному элементу управления или форме. Откроется окно кода, а в нем появится заголовок и окончание процедуры. Если необходимо другое событие, то его выбирают с помощью списка в верхнем правом углу окна кода.

    2 способ - откройте окно кода, выполните Инструменты → Добавить процедуру → укажите имя и параметры процедуры → Ok.

    3 способ - откройте окно кода и введите нужные строки с клавиатуры.

В результате должно получиться:

Private Sub Command1_Click()

Вызов процедур на исполнение

    Чтобы выполнилась процедура обработки события, это событие должно произойти.

    Для выполнения произвольной процедуры в теле другой процедуры указывают имя этой процедуры.

Private Sub Command1_Click()

Здесь при нажатии на кнопку Command1 возникает событие Click (щелчок мышью) и вызывается и выполняется процедура Kvadrat.

Код процедуры выполняется построчно и сверху вниз.

Функция (Function ) - это процедура, которая выполняет строки своего кода и возвращает некоторое значение. Синтаксис простой функции таков:

Function FunctionName() As Datatype

... строки кода

FunctionName = ReturnValue End Function

Область ви­димости функции;

Function - ключевое слово Visual Basic, указывающее на то, что это именно функция;

FunctionName () - имя, присваиваемое функции;

AS - ключевое слово Visual Basic, предваряющее назначение типа данных;

DataType тип данных возвращаемого значения;

ReturnValue значение, которое должно быть при­своено имени функции (это очень важный момент!);

End Function -конец данного блока кода.

Есть мириады способов написать плохой код. К счастью, чтобы подняться до уровня качественного кода, достаточно следовать 15 правилам. Их соблюдение не сделает из вас мастера, но позволит убедительно имитировать его.

Правило 1. Следуйте стандартам оформления кода.

У каждого языка программирования есть свой стандарт оформления кода, который говорит, как надо делать отступы, где ставить пробелы и скобки, как называть объекты, как комментировать код и т.д.

Например, в этом куске кода в соответствии со стандартом есть 12 ошибок:

For(i=0 ;i

Изучайте стандарт внимательно, учите основы наизусть, следуйте правилам как заповедям, и ваши программы станут лучше, чем большинство, написанные выпускниками вузов.

Многие организации подстраивают стандарты под свои специфические нужды. Например, Google разработал стандарты для более чем 12 языков программирования. Они хорошо продуманы, так что изучите их , если вам нужна помощь в программировании под Google. Стандарты даже включают в себя настройки редактора, которые помогут вам соблюдать стиль, и специальные инструменты, верифицирующие ваш код на соответствию этому стилю. Используйте их.

Правило 2. Давайте наглядные имена.

Ограниченные медленными, неуклюжими телетайпами, программисты в древности использовали контракты для имён переменных и процедур, чтобы сэкономить время, стуки по клавишам, чернила и бумагу. Эта культура присутствует в некоторых сообществах ради сохранения обратной совместимости. Возьмите, например, ломающую язык функцию C wcscspn (wide character string complement span). Но такой подход неприменим в современном коде.

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

Гораздо важнее то, чтобы вы долго и хорошо думали перед тем, как что-то назвать. Является ли имя точным? Имели ли вы ввиду highestPrice заместо bestPrice? Достаточно ли специфично имя, дабы избежать его использования в других контекстах для схожих по смыслу объектов? Не лучше ли назвать метод getBestPrice заместо getBest? Подходит ли оно лучше других схожих имён? Если у вас есть метод ReadEventLog, вам не стоит называть другой NetErrorLogRead. Если вы называете функцию, описывает ли её название возвращаемое значение?

В заключение, несколько простых правил именования. Имена классов и типов должны быть существительными. Название метода должно содержать глагол. Если метод определяет, является ли какая-то информация об объекте истинной или ложной, его имя должно начинаться с «is». Методы, которые возвращают свойства объектов, должны начинаться с «get», а устанавливающие значения свойств - «set».

Правило 3. Комментируйте и документируйте.

Начинайте каждый метод и процедуру с описания в комментарии того, что данный метод или процедура делает, параметров, возвращаемого значения и возможных ошибок и исключений. Опишите в комментариях роль каждого файла и класса, содержимое каждого поля класса и основные шаги сложного кода. Пишите комментарии по мере разработки кода. Если вы полагаете, что напишете их потом, то обманываете самого себя.

Вдобавок, убедитесь, что для вашего приложения или библиотеки есть руководство, объясняющее, что ваш код делает, определяющий его зависимости и предоставляющий инструкции для сборки, тестирования, установки и использования. Документ должен быть коротким и удобным; просто README-файла часто достаточно.

Правило 4. Не повторяйтесь.

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

  • Создание справочников API из комментариев, используя Javadoc и Doxygen.
  • Автоматическая генерация Unit-тестов на основе аннотаций или соглашений об именовании.
  • Генерация PDF и HTML из одного размеченного источника.
  • Получение структуры классов из базы данных (или наоборот).

Правило 5. Проверяйте на ошибки и реагируйте на них.

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

Правило 6. Разделяйте код на короткие, обособленные части.

Каждый метод, функция или блок кода должн умещаться в обычном экранном окне (25-50 строк). Если получилось длиннее, разделите на более короткие куски. Даже внутри метода разделяйте длинный код на блоки, суть которых вы можете описать в комментарии в начале каждого блока.

Более того, каждый класс, модуль, файл или процесс должен выполнять определённый род задач. Если часть кода выполняет совершенно разнородные задачи, то разделите его соответственно.

Правило 7. Используйте API фреймворков и сторонние библиотеки.

Изучите, какие функции доступны с помощью API вашего фреймворка. а также что могут делать развитые сторонние библиотеки. Если библиотеки поддерживаются вашим системным менеджером пакетов, то они скорее всего окажутся хорошим выбором. Используйте код, удерживающий от желания изобретать колесо (при том бесполезной квадратной формы).

Правило 8. Не переусердствуйте с проектированием.

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

Правило 9. Будьте последовательны.

Делайте одинаковые вещи одинаковым образом. Если вы разрабатываете метод, функциональность которого похожа на функциональность уже существующего, то используйте похожее имя, похожий порядок параметров и схожую структура тела. То же самое относится и к классам. Создавайте похожие поля и методы, делайте им похожие интерфейсы, и сопоставляйте новые имена уже существующим в похожих классах.

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

Правило 10. Избегайте проблем с безопасностью.

Современный код редко работает изолированно. У него есть неизбежный риск стать мишенью атак. Они необязательно должны приходить из интернета; атака может происходить через входные данные вашего приложения. В зависимости от вашего языка программирования и предметной области, вам возможно стоит побеспокоиться о переполнении буфера, кросс-сайтовых сценариях, SQL-инъекциях и прочих подобных проблемах. Изучите эти проблемы, и избегайте их в коде. Это не сложно.

Правило 11. Используйте эффективные структуры данных и алгоритмы.

Простой код часто легче сопровождать, чем такой же, но изменённый ради эффективности. К счастью, вы можете совмещать сопровождаемость и эффективность, используя структуры данных и алгоритмы, которые даёт ваш фреймворк. Используйте map, set, vector и алгоритмы, которые работают с ними. Благодаря этому ваш код станет чище, быстрее, более масштабируемым и более экономным с памятью. Например, если вы сохраните тысячу значений в отсортированном множестве, то операция пересечения найдёт общие элементы с другим множеством за такое же число операций, а не за миллион сравнений.

Правило 12. Используйте Unit-тесты.

Сложность современного ПО делает его установку дороже, а тестирование труднее. Продуктивным подходом будет сопровождение каждого куска кода тестами, которые проверяют корректность его работы. Этот подход упрощает отладку, т.к. он позволяет обнаружить ошибки раньше. Unit-тестирование необходимо, когда вы программируете на языках с динамической типизацией, как Python и JavaScript, потому что они отлавливают любые ошибки только на этапе исполнения, в то время как языки со статической типизацией наподобие Java, C# и C++ могут поймать часть из них во время компиляции. Unit-тестирование также позволяет рефакторить код уверенно. Вы можете использовать XUnit для упрощения написания тестов и автоматизации их запуска.

Правило 13. Сохраняйте код портируемым.

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

Правило 14. Делайте свой код собираемым.

Простая команда должна собирать ваш код в форму, готовую к распространению. Команда должна позволять вам быстро выполнять сборку и запускать необходимые тесты. Для достижения этой цели используйте средства автоматической сборки наподобие Make , Apache Maven , или Ant . В идеале, вы должны установить интеграционную систему, которая будет проверять, собирать и тестировать ваш код при любом изменении.

Правило 15. Размещайте всё в системе контроля версий.

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