enkryptor

code review: ToDo List

Nov 11th, 2023
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.65 KB | None | 0 0
  1.  
  2. ПЛЮСЫ:
  3.  
  4. + есть комментарии
  5. + есть явно выраженный стиль кода: формат имен, отступы
  6. + осмысленные имена переменных и функций
  7. + используется const для неизменяемых переменных
  8. + предпринята попытка декомпозиции (код оформлен в несколько разных функций)
  9. + работает на узком экране (на мобильном)
  10. + работает как Enter, так и нажатие кнопки "добавить"
  11.  
  12.  
  13. МИНУСЫ:
  14.  
  15. По оформлению проекта:
  16. - нет README, не описана цель проекта, нет инструкции как разворачивать и запускать
  17. - нет истории коммитов, это очень плохо
  18. - не выдержан стиль кода: где-то есть точка с запятой, где-то нет, разные кавычки (в 70-й строке)
  19.  
  20. По работе проекта:
  21. - Очень мало функций (только добавление и удаление строк). Как минимум хотелось бы отмечать задачу как "сделано".
  22. - Есть легко находимый баг — при добавлении большого количества пунктов они сначала залезают на дату, а потом и вовсе вылазят за край экрана, приложением становится невозможно пользоваться. Это сразу создаёт впечатление недоделанного продукта.
  23. - На узких экранах вёрстка масштабируется некорректно.
  24. - Страница имеет заголовок "Document", хотя должно быть что-то типа "ToDo List".
  25.  
  26. По коду (HTML и CSS более-менее ок, комментирую только JS):
  27. - Строки 1-4: добавляются поля в глобальный объект window
  28. - Строка 2: кнопка отмечена идентификатором "#btn". Пока это единственная кнопка на странице, проблемы нет. Но что если появится ещё хотя бы одна?
  29. - Строки 8-12: создание массива и цикл можно заменить на один вызов map()
  30. - Строка 9: функция берёт данные из замыкания, а не из параметров, это помешает её переиспользовать
  31. - Строка 20: нет обработки ошибок при загрузке данных
  32. - Строка 28: icon.className = 'far fa-trash-alt'; - тут лучше сделать через classList.add()
  33. - Строка 41: ToDo добавляется в глобальное пространство имён. Название ToDo не отражает суть функции (обработчик события submit, добавление задачи).
  34. - Строка 43: условие можно инвертировать и убрать лишнюю вложенность
  35. - Строки 49-61: тут явное дублирование кода с функцией загрузки, это очень плохо
  36. - Строки 68-70: очень ненадёжный механизм получения строки даты, который поломается на чужой локали. Посмотрите Intl.DateTimeFormat и Date.prototype.toLocaleDateString
  37. - Строка 70: такое лучше делать через распаковку: const [month, date, year] = date
  38. - Строка 78: непонятно как взявшийся тут кусок инициализации. Эта строка должна быть в функции инициализации.
  39. - Замусоривается глобальное пространство имён. Это плохо и ведёт к багам, используйте паттерн IIFE или ES модули.
  40. - Плывёт ответственность функций, но это пока нормально, придёт с опытом. Например, loadTasksFromLocalStorage не только загружает данные из стораджа, но и меняет DOM. Отсюда идёт дублирование кода и проблемы с последующей его модификацией (например, попробуйте добавить кнопку массового удаления задач).
  41.  
  42.  
  43. РЕКОМЕНДАЦИИ:
  44.  
  45. - включать strict mode в своём коде; проще всего это сделать через <script type="module">, заодно и импорты заработают
  46. - начать применять npm и eslint
  47. - использовать JSDoc вместо произвольных комментариев к функциям
  48. - использовать интерполяцию строк вместо конструкций вида date[1] + ' ' + date[2] + " " + date[3]
  49. - использовать константы вместо копипаста строк, как тут: getItem('tasks'), setItem('tasks')
  50. - использовать переменные в css для указания цветов и прочих повторяемых значений
  51. - начать писать функции, которые принимают параметры
  52. - не хранить данные в вёрстке
  53.  
Advertisement
Add Comment
Please, Sign In to add comment