Редактировать

Здоровье кода 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%

Дающие отрицательный процент:

  1. Количество var вне блоков. За первую - -10%, за остальные - -2% пока не достигнет 25%
  2. Описание параметра цикла for вне заголовка - за первую - -15%, за каждую следующую - -3% пока не достигнет 25%
  3. Использование процедуры Read для ввода - за первую -15%, за последующие - -2% пока не достигнет -20%
  4. Использование ключевого слова program - -10%
  5. Использование статических массивов - -10% за первый, за каждый последующий - -2% пока не достигнет -15%
  6. Использование Write(a,’ ‘,b) с пробелом в качестве разделителя - за каждую - -1% пока не достигнет -5%
  7. Использование устаревшего типа string[10] - за каждую - -1% . Если минусуется > 100%, то здоровье делать 0%

Дающие положительный процент:

  1. Используются внутриблочные описания переменных: За первую - 10%, за остальные - 2% (максимум 4 раза)
  2. Переменная цикла for описана в заголовке цикла: 3% за каждую (максимум 4 раза)
  3. Используется инициализация переменной при описании: 4% за каждую (максимум 4 раза)
  4. Для ввода используется функция вида ReadInteger, ReadReal: 3% за каждую (максимум 4 раза)
  5. Используется расширенное присваивание += *=: 3% за каждую (максимум 4 раза)
  6. Для вывода использована Print: 4% за каждую (максимум 4 раза)
  7. Используются кортежи: 5% за каждый (максимум 4 раза)
  8. Используются динамические массивы: 5% за каждый (максимум 4 раза)
  9. Используется распаковка значения в переменные: 5% за каждое (максимум 4 раза)
  10. Используется цикл loop: 4% за каждый (максимум 4 раза)
  11. Используется цикл foreach: 4% за каждый (максимум 4 раза)
  12. Используются лямбда-выражения: 8% за каждый (максимум 4 раза)

Максимальное здоровье программы ограничено 200%