Выделение вычислений из действий #
Презентация #
Презентацию по теме лекции можно открыть по ссылке.
Видео-запись: Rutube
Документация #
- Четвёртая глава книги, Extracting calculations from actions.
Задания #
В приведённых примерах логика вычислений смешана с действиями. Выделите вычисление в отдельную чистую функцию. Оставшееся действие оставьте в обёртке.
-
Функция
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; } } -
Функция
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; } -
Функция
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; } -
Функция
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; } -
Функция
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; }