Левшин Михаил#18
Conversation
|
🍏 Пройдено тестов 19 из 19 |
|
@chipolinka обрати внимание решено доп. задание |
robbery.js
Outdated
There was a problem hiding this comment.
это константа? посмотри, как в гайде рекомендуют называть константы.
There was a problem hiding this comment.
Да Это по сути константа. Исправлю
robbery.js
Outdated
There was a problem hiding this comment.
зачем тебе этот массив? можно просто взять ключи словаря)
There was a problem hiding this comment.
Для читаемости кода. daysDict.keys()[i] хуже чем daysArray[i]
There was a problem hiding this comment.
по-моему, это не повод у всех словарей выделять ключи в массив) в конце концов, можешь уж список-то заново не создавать
robbery.js
Outdated
robbery.js
Outdated
There was a problem hiding this comment.
в названии функции надо указывать, что она делает (то бишь глагол)
robbery.js
Outdated
| for (var i = 0; i < timeIntervalsArray.length; i++) { | ||
| if (timeIntervalsArray[i].timeInInterval(time)) { | ||
|
|
||
| return true; |
robbery.js
Outdated
There was a problem hiding this comment.
str.split(' ') наверное стоит вынести в переменную, раз часто используется
robbery.js
Outdated
robbery.js
Outdated
There was a problem hiding this comment.
по-моему, это не самое подходящее название переменной. мало ли чего там m может быть?) да и h тоже
robbery.js
Outdated
There was a problem hiding this comment.
кажется, тут есть дублирование... и константы, конечно.
robbery.js
Outdated
robbery.js
Outdated
There was a problem hiding this comment.
goodTimeToHack = !timeInIntervals(newSchedule[gangster], i) ?
There was a problem hiding this comment.
В случае если время неподходит первому, но подходит второму и третьему, то значение переменной будет true. Что не совсем то что нужно.
robbery.js
Outdated
robbery.js
Outdated
There was a problem hiding this comment.
просто интересно: а почему не >=? а именно отрицание от <?
robbery.js
Outdated
There was a problem hiding this comment.
кажется, что это можно переписать в один if, ну или как-то более сокращенно
|
везде есть константы, которые надо вынести/переименовать. |
|
🍅 |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍏 Пройдено тестов 19 из 19 |
|
@chipolinka обрати внимание решено доп. задание |
robbery.js
Outdated
There was a problem hiding this comment.
и аналогично во всех остальных местах)
robbery.js
Outdated
There was a problem hiding this comment.
меня смущает, что у тебя 4 раза встречается строка
strToIntDate(something) + bankTimezone * MINUTES_IN_HOUR
это никак не сделать поизящнее?
имею в виду DRY
robbery.js
Outdated
There was a problem hiding this comment.
иногда отступы всплывают в самых неожиданных местах. не рекомендую их ставить после фигурных скобочек (не только здесь, но и во всём коде). тут же нечего отделять логически?
There was a problem hiding this comment.
а ещё название этой переменной предполагает, что в ней хранится время.
robbery.js
Outdated
There was a problem hiding this comment.
название функции следует начинать с глагола
|
@chipolinka обрати внимание решено доп. задание |
|
🍏 Пройдено тестов 19 из 19 |
|
@chipolinka обрати внимание решено доп. задание |
robbery.js
Outdated
There was a problem hiding this comment.
можно сделать isGoodTimeToHack = !isTimeInIntervals(schedule[gangster], i)
There was a problem hiding this comment.
Сделать, то можно. Только это не совсем правильно(я уже писал почему). Даже базовые тесты перестают проходить.
robbery.js
Outdated
There was a problem hiding this comment.
В данном while у тебя i не изменяется, кроме как увеличивается при каждой итерации? Почему бы тогда не сделать это циклом?
There was a problem hiding this comment.
функция isGangsterNotBusy использует внешние переменные, одной из которой является переменная i. А так как функции объявлять внутри цикла нельзя(lint), то следовательно нужно объявить эту переменную и функцию ее использующую заранее. Я вижу выход из этой ситуации созданием функции, которая возвращает другую функцию. Попробую это сделать.
There was a problem hiding this comment.
исправил даже изящнее чем сам предполагал)
robbery.js
Outdated
There was a problem hiding this comment.
А зачем ты это вынес в отдельную функцию? У тебя она вынесена далеко от этого места, да и содержит в себе 1 строчку...
There was a problem hiding this comment.
В lint'е стоит ограничение, что нельзя создавать функции внутри цикла
robbery.js
Outdated
There was a problem hiding this comment.
Очень сложная строка. И давай у тебя весь парсинг будет вынесен в одно место?
robbery.js
Outdated
There was a problem hiding this comment.
Эту функцию можно разбить на наполнение нового расписания гангстерами и банком. И объединить результат как раз в этой функции.
robbery.js
Outdated
There was a problem hiding this comment.
Лучше создай новую переменную с соответствующим названием. А то не ясно, чем результат этой функции отличается от предыдущей. А так -- мне нравится организация кода 👍
| return template; | ||
| if (!this.exists()) { | ||
|
|
||
| return ''; |
| function getGangsterNames(schedule) { | ||
| var gangsterNames = []; | ||
| for (var gangsterName in schedule) { | ||
| if (schedule.hasOwnProperty(gangsterName)) { |
There was a problem hiding this comment.
Попробуй написать это как-то по-другому. Попроще :)
There was a problem hiding this comment.
Ну если честно я не знаю как. https://learn.javascript.ru/object-for-in смотрел тут. hasOwnProperty для lint'a
There was a problem hiding this comment.
| exports.isStar = true; | ||
|
|
||
| /** | ||
| * @param {Object} schedule – Расписание Банды |
There was a problem hiding this comment.
Но они же несут полезную информацию!
robbery.js
Outdated
There was a problem hiding this comment.
Если честно, на первый взгляд тут адище происходит. Слайсы не подойдут?
|
🍅 |
|
🍏 Пройдено тестов 19 из 19 |
|
@chipolinka обрати внимание решено доп. задание |
robbery.js
Outdated
robbery.js
Outdated
There was a problem hiding this comment.
В этой функции слишком часто используется arrayIntervals.length, лучше вынеси в отдельную переменную. Да и название покороче будет)
| var gangstersIsNotBusy = true; | ||
| gangsterNames.forEach(function (gangster) { | ||
| if (isTimeInIntervals(schedule[gangster], time)) { | ||
| gangstersIsNotBusy = false; |
There was a problem hiding this comment.
Можно написать здесь return false;, а в конце функции -- return true;. Тогда без этой переменной обойдемся и меньше бегать по циклу будем)
There was a problem hiding this comment.
К сожалению из forEach нельзя ничего возвращать(
|
В целом стало намного лучше, молодец. Исправь мелкие замечания, и я передаю тебя ментору. |
|
🚀 |
|
🍏 Пройдено тестов 19 из 19 |
|
@mokhov обрати внимание решено доп. задание |
mokhov
left a comment
There was a problem hiding this comment.
В данном решении очень много избыточного кода. Из-за этого его очень сложно читать. Хочу в ответном комментарии увидеть ответ на вопрос: как работает твой алгоритм?
| exports.isStar = true; | ||
|
|
||
| var DAYS_INDEXES = { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; | ||
| var DAYS_NAMES = ['ПН', 'ВТ', 'СР', 'ЧТ', 'ПТ', 'СБ', 'ВС']; |
| }; | ||
| } | ||
|
|
||
| function isTimeInIntervals(timeIntervalsArray, time) { |
There was a problem hiding this comment.
Название читаю, а понять что она делает не могу
| } | ||
|
|
||
| function strDateToDateObj(strDate) { | ||
| var strDateCopy = strDate.slice(); |
| function getGangsterNames(schedule) { | ||
| var gangsterNames = []; | ||
| for (var gangsterName in schedule) { | ||
| if (schedule.hasOwnProperty(gangsterName)) { |
There was a problem hiding this comment.
| this.start = start; | ||
| this.end = end; | ||
|
|
||
| this.getLength = function () { |
There was a problem hiding this comment.
start и end известны на этапе создания объекта, почему length нужно вычислять, а нельзя сделать полем?
| } | ||
|
|
||
| function createTimeIntervalWithShift(time, shift) { | ||
| return new TimeInterval(strDateToDateObj(time.from).intValue + shift, |
There was a problem hiding this comment.
Это нечитаемый однострочник, нужно вынести аргументы TimeIntreval в читаемые переменные
| strDateToDateObj(time.to).intValue + shift); | ||
| } | ||
|
|
||
| function simplifyTimesIntervals(timeIntervals, duration) { |
There was a problem hiding this comment.
Название функции переводится как «Упростить временные интервалы». Я честно не понимаю что тут подразумевается
|
|
||
| function simplifyTimesIntervals(timeIntervals, duration) { | ||
| var newTimeIntervals = []; | ||
| timeIntervals.forEach(function (timeInterval) { |
There was a problem hiding this comment.
Для фильтрации массивов придумали специальную функцию https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
| return newTimeIntervals; | ||
| } | ||
|
|
||
| function addOrChangeLastTimeInterval(arrayIntervals, timeToStartNewInterval) { |
There was a problem hiding this comment.
Из названия функции абсолютно не понятно что она делает. И по коду я тоже ничего не понял
|
🍅 |
No description provided.