Здоровье кода PascalABC.NET
Здоровье кода PascalABC.NET - важнейший показатель кода, характеризующий то, используются ли в программе устаревшие конструкции базового Паскаля, или напротив новые конструкции PascalABC.NET, рекомендованные практически для любой программы.
PascalABC.NET создан для того чтобы обучать современному программированию, позволяющему писать лёгкие, компактные и понятные программы.
Для начинающих подобных средств языка не так много. Это прежде всего описания переменных по мере того как они становятся нужны в коде (внутриблочные описания), совмещение описания с инициализацией, автовывод типа при инициализации, описание переменной цикла for в заголовке цикла, а также использование функций ReadInteger и ReadReal вместо процедуры Read для ввода данных и процедуры Print вместо процедуры Write для вывода данных, а также расширенных операторов присваивания += и *=. На более высоком уровне обучения это - использование динамических массивов вместо статических, поскольку именно динамические массивы содержат огромное количество стандартных методов, улучшающих понятность программы.
Пример “плохой” программы в стиле устаревшего базового Паскаля:
var i,s,n: integer;
begin
Write('Введите n: ');
Read(n);
s := 0;
for i:=1 to n do
s := s + i * i;
Write(s)
end.
Здоровье кода такой программы оценивается в 54%, то есть “не очень” :)
Пример программы, написанной средствами PascalABC.NET:
begin
var n := ReadInteger('Введите n:');
var s := 0;
for var i:=1 to n do
s += i * i;
Print(s)
end.
Здоровье кода такой программы оценивается в 125%, что означает, что в ней не только нет устаревших конструкций, но и используются новые.
Показатели, по которым оценивается здоровье кода
Пустая программа даёт 100%
Дающие отрицательный процент:
- Количество var вне блоков. За первую - -10%, за остальные - -2% пока не достигнет 25%
- Описание параметра цикла for вне заголовка - за первую - -15%, за каждую следующую - -3% пока не достигнет 25%
- Использование процедуры Read для ввода - за первую -15%, за последующие - -2% пока не достигнет -20%
- Использование ключевого слова program - -10%
- Использование статических массивов - -10% за первый, за каждый последующий - -2% пока не достигнет -15%
- Использование Write(a,’ ‘,b) с пробелом в качестве разделителя - за каждую - -1% пока не достигнет -5%
- Использование устаревшего типа string[10] - за каждую - -1% . Если минусуется > 100%, то здоровье делать 0%
Дающие положительный процент:
- Используются внутриблочные описания переменных: За первую - 10%, за остальные - 2% (максимум 4 раза)
- Переменная цикла for описана в заголовке цикла: 3% за каждую (максимум 4 раза)
- Используется инициализация переменной при описании: 4% за каждую (максимум 4 раза)
- Для ввода используется функция вида ReadInteger, ReadReal: 3% за каждую (максимум 4 раза)
- Используется расширенное присваивание += *=: 3% за каждую (максимум 4 раза)
- Для вывода использована Print: 4% за каждую (максимум 4 раза)
- Используются кортежи: 5% за каждый (максимум 4 раза)
- Используются динамические массивы: 5% за каждый (максимум 4 раза)
- Используется распаковка значения в переменные: 5% за каждое (максимум 4 раза)
- Используется цикл loop: 4% за каждый (максимум 4 раза)
- Используется цикл foreach: 4% за каждый (максимум 4 раза)
- Используются лямбда-выражения: 8% за каждый (максимум 4 раза)
Максимальное здоровье программы ограничено 200%