Выделение вычислений из действий

Выделение вычислений из действий #

Презентация #

Презентацию по теме лекции можно открыть по ссылке.

Видео-запись: Rutube

Документация #

Задания #

В приведённых примерах логика вычислений смешана с действиями. Выделите вычисление в отдельную чистую функцию. Оставшееся действие оставьте в обёртке.

  1. Функция getDiscount:

    function getDiscount(userId) {
      var user = db.query("SELECT * FROM users WHERE id = ?", [userId]);
      if (user.age > 60) {
        return 0.2;
      } else if (user.age > 30) {
        return 0.1;
      } else {
        return 0;
      }
    }
  2. Функция countWordsInFile:

    function countWordsInFile(filename) {
      var content = fs.readFileSync(filename, "utf8");
      var words = content.split(/\s+/);
      var count = 0;
      for (var i = 0; i < words.length; i++) {
        if (words[i].length > 0) {
          count++;
        }
      }
      return count;
    }
  3. Функция calculateAverageGrade:

    function calculateAverageGrade(studentId) {
      var grades = db.query("SELECT grade FROM grades WHERE student_id = " + studentId);
      var sum = 0;
      for (var i = 0; i < grades.length; i++) {
        sum += grades[i].grade;
      }
      return sum / grades.length;
    }
  4. Функция getMostExpensiveItem:

    function getMostExpensiveItem(categoryId) {
      var items = db.query("SELECT * FROM items WHERE category_id = " + categoryId);
      var maxPrice = 0;
      var result = null;
      for (var i = 0; i < items.length; i++) {
        if (items[i].price > maxPrice) {
          maxPrice = items[i].price;
          result = items[i];
        }
      }
      return result;
    }
  5. Функция isPasswordStrong:

    function isPasswordStrong(userId) {
      var user = db.query("SELECT password FROM users WHERE id = " + userId);
      var password = user.password;
      var hasUpperCase = false;
      var hasDigit = false;
      for (var i = 0; i < password.length; i++) {
        if (password[i] === password[i].toUpperCase() && password[i] !== password[i].toLowerCase()) {
          hasUpperCase = true;
        }
        if (password[i] >= '0' && password[i] <= '9') {
          hasDigit = true;
        }
      }
      return password.length >= 8 && hasUpperCase && hasDigit;
    }

© A. M. Васильев, 2026, CC BY-SA 4.0, andrey@crafted.su