Правила коддинга

Базовые правила написания хорошего программного кода (Pascal, Delphi и не только …)

Как и к любому литературному произведению есть определенные требования, так и в написании программного кода есть определенные правила. Соблюдение этих правил делает «чтение» программы легким и удобным. К сожалению, в литературе для программистов данному вопросу уделено мало внимания, там сразу рубят с плеча. Предлагаю Вашему вниманию полезные советы по этому вопросу. Они не претендуют на обязательное выполнение, но позволят программам выглядеть «читабельно», понятно и скажем «стильно». Используя их при написании программного кода, со временем стиль Ваших программ будет заметно отличаться от простого набора команд. И в будущем, открыв наработку годовой давности, можно будет довольно легко и быстро войти в курс дела, а не ломать голову: что же это тут я такого навыдумывал, что оно работает… Вопрос в том КАК? 😉
Рассмотрите эти примеры.

Агния Барто — стихи
МЯЧИК
Наша Таня громко плачет:
Уронила в речку мячик.
— Тише, Танечка, не плачь:
Не утонет в речке мяч.
Агния Барто — стихи
МЯЧИК
Наша                        Таня громко плачет:
Уронила                       в речку мячик.
— Тише, Танечка,
не                        плачь:
Не                                  утонет в речке
мяч.

Из примера видно, что легче читать Пример 1. Аналогичная ситуация и в программировании. В зависимости от стиля программирования, программистам будет так же легко, или трудно читать код. И уместно будет сказать, что поиск ошибок в «понятно» написанном коде проходит гораздо легче и быстрее, чем в «разбросаном». Итак, уважаемые, если вы хотите упростить жизнь себе и преподавателям, желательно использовать подобные рекомендации. А преподавателям, если не отказаться от поиска ошибок в коде учеников, то хотя бы не указывать явно где находится ошибка. Конечно, требуя «правильного» оформления кода программы. Напомню, что стандартный размер экрана — 80×25 символов (знакомест). Именно такие размеры наиболее комфортные для восприятия.

Правило №1. «Командные скобки»
Часто бывают ситуации, когда количество командных открытых скобок не совпадает с количеством закрытых. А искать их по всему «программному пространству» довольно трудно. После написания Begin нажимаем 2 раза Enter, пишем End. А потом возвращаемся на строку выше, и между ними уже «кодируем» дальше. То есть написание программного кода — это НЕ ПОСЛЕДОВАТЕЛЬНЫЙ процесс написания слов, как обычно мы делаем создавая текстовый документ.И в данном случае Вы никогда не потеряете или не впишете лишний Begin или End.

Begin Enter 1
Enter 2 … Вернулись… код;
End.

Правило №2. «О количестве операторов в одной строке»
Количество операторов в одной строке должна равняться 1.

a:=2;
b:=33;
Res:=b-a;
Writeln(‘Result =’, Res);
a:=2; b:=33; Res:=b-a; Writeln(‘Result=’, Res);

Правило №3. «О горизонтальные отступы»
Все операторы, которые находятся между командными скобками (между begin и end в «Паскаль» и между {} в C подобных языках программирования) должны быть правее. В этом помогает клавиша TAB, не нужно вручную ставить пробелы. Кроме того, размер отступления должен/желательно составлять 8 (восемь) символов.

For i:=1 to 10 do
	Вegin
		For j:=1 to 10 do
		Begin
		Write(i*j:3);
	End;
Writeln;
End;
For i:=1 to 10 do
Вegin
For j:=1 to 10 do
Begin
Write(i*j:3);
End;
Writeln;
End;

Количество вложенных блоков не должна превышать значение в 3 или 4. В приведенном примере степень вложенности — 2. Если же степень вложенности больше — это значит, что вы недостаточно продумали алгоритм и структуру программы. Напоминаю, что табуляция должна составлять 8 символов.

Правило №4. «О командных скобках»
По этому вопросу есть много суждений. Я предлагаю свой вариант. Возможно, Вы найдете более приемлемый для себя вариант. Итак … Командные скобки (Begin — End), которые относятся к одному блоку размещаются следующим образом:

For i:=1 to 20 do
Begin
WriteLn('Hello World');
End;
For i:=1 to 20 do Begin
WriteLn('Hello World');
End;
For i:=1 to 20 do begin WriteLn('Hello World');
end;

В конце строки пробелов быть не должно. Пробелы обязательно нужно ставить после запятой, как в обычном тексте. Пробелы полезны после знака определенной операции (+,-,*,/).

Правило №5. «О вертикальных пробелах (пустые строки)»
Пустые строки обязательные до и после объявления функций и процедур. Логические части программы также желательно разделять пустой строкой, например команду цикла от предыдущих и последующих операторов.

Write(‘N=’);
Readln(N);

For x:=1 to N do
Begin
y:=x*x;
Writeln(x, ‘*’, x, ‘=’, y)
End;

Readln;
Writeln(‘Press Enter to Exit’);
Write(‘N=’);
Readln(N);
For x:=1 to N do
Begin
y:=x*x;
Writeln(x, ‘*’, x, ‘=’, y)
End;
Readln;
Writeln(‘Press Enter to Exit’);

Правило №6. «Об объявлении переменных»
Для каждой переменной нужно писать свой тип. В одной строке — 1 переменная. На крайний случай — группировать по логическим признакам. При этом легко писать комментарии к переменным.

a: integer;
b: integer;
c: integer;
q: real;
I, j, k: integer; {для цикла FOR}
Suma, Dobutok: Integer;
Zhach_y: real;
I, j, k: integer; {для циклу FOR}
 a,b,c,d,ttt,test,tt0: integer;
q,w,u,z,ppp,ddd,ddd0,ddd23: real;

Это правило желательно выполнять, поскольку оно делает текст программы более четким и понятным. Кроме того, если в процессе разработки программы необходимо удалить определенный код — разработчик удаляет одну строку, а не давит на кнопки Del или Backspace. Кстати, если в программе есть вложенные циклы — эти управляющие переменные желательно объявлять в одной  строке.
 Описание переменных, которые отличаются по содержанию — желательно размещать в разных строках.

 
j, k: integer; 
counter: integer; 

Правило №7. «Правильные имена переменных (идентификаторов)»
Идентификаторы (имена переменных, типов, процедур, функций) должны быть названы корректно настолько, чтобы читая текст программы, разработчик понимал их суть (за что отвечает переменная, и какую информацию она в себе содержит и т.д.) без присутствия автора программного кода . Нужно сказать, что иногда автор программы где-то через полгода решит внести качество изменения. И «будет мучительно больно» вспоминать что означает «II» и «f1_b». Если ищем сумму — назовите переменную Summa и т.д. То есть имя переменной должно отражать ее суть.
Использовать транслит — это плохо. Лучше давать имена на английском. Имена для переменных — это подлежащие
Matrix — Matrica
Counter — Schethik
а для функций — сказуемые, так как это действие, или подлежащее + сказуемое.

Примеры:
Summa_digits ()
Print_Matrix ()

Правило №8. «О комментариях …»
При написании объемной программы желательно использовать пояснительные комментарии к логическим блокам программы или к написанным подпрограммам. Это позволит в будущем использовать повторно некоторые моменты кода в других разработках. Но не нужно и злоупотреблять, комментируя каждый шаг программы.

{Ввод данных}
Write(‘N=’);
Readln(N);
{Расчет значения функции на промежутке}
For x:=1 to N do
Begin
y:=x*x;
Writeln(x, ‘*’, x, ‘=’, y);
End;
{Окончание рассчета}
Readln;
Writeln(‘Press Enter to Exit’);
Write(‘N=’); {Вывод сообщения}
Readln(N); {Запрос данных}
For x:=1 to N do {Просмотр промежутка}
Begin
y:=x*x; {Расчет значения функции}
Writeln(x, ‘*’, x, ‘=’, y); {Вывод результата}
End;
Readln; {Ожидаем действий пользователя}
Writeln(‘Press Enter to Exit’);

Правило №9 «Об инициализацию массивов»
Массивы, данные для которых известны (не надо вводить с клавиатуры, или из файла) не нужно заполнять операторами присваивания, а использовать инициализацию при объявлении.

const n=3;
var
Matrix: array[1..n, 1..n] of real =
(
(1.7, 3.5, ...),
(...),
(...)
);
const n=3;
var
Matrix : array[1..n, 1..n] of real;
......
BEGIN
Matrix[1,1] := 1.7;
Matrix[1,2] := 3.5;
......

Правило №10. «О функциях и процедурах»
10.1 Функции должны присутствовать в программе. Возможно за исключение программы с 1 строки.
10.2 Функции должны иметь параметры. Функция, которая использует глобальные параметры (доступны в произвольном блоке программы) почти всегда «нехорошая».
10.3 Программный код функции должен быть коротким, 1-2 экраны (до 50 строк). Это касается и главной программы — Вegin Еnd на языке Pascal. Если же в программе присутствует большой набор альтернатив — это в определенной степени оправдывает большой объем вышеупомянутых объектов программы.
10.4 Функция должна выполнять ТОЛЬКО ОДНО ДЕЙСТВИЕ. Например, если подпрограмма выполняет суммирование цифр числа, она не должна заниматься считыванием данных. Она должна получить данные в виде аргументов. Она также не должна выводить результат. Опять же, это должна делать другая подпрограмма.

Правило №11. «Об ошибках и т.п.»
Если программа или подпрограмма может завершиться «аварийно» нужно предусмотреть проверку корректности данных.Так называемая «Защита от дурака»

Правило №12 «If, if-else, if else-if else операторы»

if (условие) then
Begin
Серия команд 1;
...
End;
if (условие) then
Begin
Серия команд 1;
...
End
else
    Begin
         Серия команд 2;
         ...
    End;

Пример программы

.... код...
{Сортировка одномерного массива: метод перестановки}
For i := 1 to 9 do
Begin
  vblMin := A[i];
  k := i;
    For j := 1+i to 10 do
         Begin
              If (vblMin > A[j]) Then
              Begin
                   vblMin := A[j];
                   k := j;
              End;
         End;
  vblStuf := A[i];
  A[i] := vblMin;
  A[k] := vblStuf;
End;
For i:=1 to 9 do
begin
vblMin:=A[i];
k:=i;
For j:=1+i to 10 do
begin
If (vblMin > A[j]) Then
begin
vblMin:=A[j];
k:=j;
end;
end;
stuf:=A[i];
A[i]:=vblMin;
A[k]:=vblStuf;
end;

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Programing for beginner's

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: