Conversation
|
🍏 Пройдено тестов 19 из 19 |
|
@bazhenova обрати внимание решено доп. задание |
| @@ -1,49 +1,198 @@ | |||
| 'use strict'; | |||
|
|
|||
| /** | |||
There was a problem hiding this comment.
Зачем ты удалил все JsDoc? Давай их вернем обратно. Хорошей практикой считается документировать публичные методы, так как по параметрам сложно догадаться, что они содержат
robbery.js
Outdated
| * @param {String} workingHours.to – Время закрытия, например, "18:00+5" | ||
| * @returns {Object} | ||
| */ | ||
| var days = ['ПН', 'ВТ', 'СР']; |
There was a problem hiding this comment.
Давай назовем как-нибудь по-другому. Задумайся, какие это дни?
robbery.js
Outdated
| var timeRegExp = /([А-Я]{2}) (\d{2}):(\d{2})\+(\d+)/g; | ||
| var parsedTime = timeRegExp.exec(date); | ||
| var day = days.indexOf(parsedTime[1]) + 1; | ||
| var hour = parsedTime[2] - (parseInt(parsedTime[4]) - bankTimezone); |
There was a problem hiding this comment.
у parseInt лучше указывать вторым аргументом основание системы счисления, чтобы избежать ошибок
robbery.js
Outdated
| } | ||
|
|
||
|
|
||
| function getInterval(from, to, timezone) { |
There was a problem hiding this comment.
Непонятно, что за интервал ты хочешь получить
robbery.js
Outdated
|
|
||
|
|
||
| function getSotredIntervals(schedule, bankTimezone) { | ||
| var sortedSchedule = parseSchedule(schedule, bankTimezone).sort(function (a, b) { |
There was a problem hiding this comment.
давай разобьем эту строчку: сначала ты парсишь - это одна переменная, а потом на ней вызывай метод sort - тебе не придется создавать новую переменную, так как данный метод изменяет исходный массив
robbery.js
Outdated
|
|
||
| function joinSchedule(schedule) { | ||
| var fullSchedule = []; | ||
| var firstInterval = schedule[0]; |
There was a problem hiding this comment.
Надо переименовать, неочевидно название. Первый интервал чего?
robbery.js
Outdated
|
|
||
|
|
||
| function joinSchedule(schedule) { | ||
| var fullSchedule = []; |
There was a problem hiding this comment.
Полное расписание? Подумай, как по-другому это можно назвать
robbery.js
Outdated
|
|
||
| function isCrossed(bankInterval, freeInterval) { | ||
| var checkFrom = checkInterval(bankInterval.from, freeInterval); | ||
| var checkTo = checkInterval(bankInterval.to, freeInterval); |
There was a problem hiding this comment.
Здесь и в строчке выше надо переименовать переменные, они должны отражать смысл
robbery.js
Outdated
| function isCrossed(bankInterval, freeInterval) { | ||
| var checkFrom = checkInterval(bankInterval.from, freeInterval); | ||
| var checkTo = checkInterval(bankInterval.to, freeInterval); | ||
| var compareIntervals = freeInterval.from > bankInterval.from && |
There was a problem hiding this comment.
Надо переименовать, непонятно, что за сравнение интервалов. По переменной должно быть понятно, что в ней лежит
robbery.js
Outdated
| function getBankTimezone(time) { | ||
| var bankTimezone = /\+(\d+)/.exec(time)[1]; | ||
|
|
||
| return parseInt(bankTimezone); |
There was a problem hiding this comment.
Укажи второй аргумент, как я писала выше
robbery.js
Outdated
| return parseInt(bankTimezone); | ||
| } | ||
|
|
||
| function getMomentForAttack(freeSchedule, bankSchedule, duration) { |
There was a problem hiding this comment.
Может быть не getMomentForAttack, а getMomentsForRobbery? :) + не забывай, что ты возвращаешь массив, поэтому в названии присутствует множественное число
robbery.js
Outdated
| to: new Date(Math.min(bankInterval.to, freeInterval.to)) | ||
| }; | ||
|
|
||
| var laterTime = new Date(crossInterval.from.getTime() + (duration * 60 * 1000)); |
robbery.js
Outdated
|
|
||
| function getFreeSchedule(busyTime, bankTimezone) { | ||
| var freeTime = []; | ||
| var interval = {}; |
robbery.js
Outdated
| } | ||
|
|
||
| function getFreeSchedule(busyTime, bankTimezone) { | ||
| var freeTime = []; |
There was a problem hiding this comment.
может тогда уж freeTimes, раз это массив
robbery.js
Outdated
| } | ||
| interval.to = currentInterval.from; | ||
| freeTime.push(interval); | ||
| interval = {}; |
There was a problem hiding this comment.
Ого, какое-то 'обнуление' переменной. Можешь пояснить, что ты имел в виду?
robbery.js
Outdated
|
|
||
| function formatTime(time) { | ||
|
|
||
| return (time.toString().length === 2 ? '' : '0') + time.toString(); |
There was a problem hiding this comment.
На вход приходит численное значение? Может тогда лучше написать так:
return (time < 10 ? '0' : '') + time;
robbery.js
Outdated
|
|
||
| function createLaterTime(date, shift) { | ||
|
|
||
| return new Date(date.getTime() + (shift * 60 * 1000)); |
robbery.js
Outdated
| var bankTimezone = getBankTimezone(workingHours.from); | ||
| var freeTimeIntervals = getSotredIntervals(schedule, bankTimezone); | ||
| var bankSchedule = getBankSchedule(workingHours, bankTimezone); | ||
| var robberyTime = getMomentForAttack(freeTimeIntervals, bankSchedule, duration); |
robbery.js
Outdated
|
|
||
| var time = robberyTime[0].from; | ||
|
|
||
| return template.replace('%HH', formatTime(time.getHours())) |
There was a problem hiding this comment.
Когда идет вызов нескольких функций подряд, то лучше каждую функцию начинать с новой строки. Перенеси этот replace на новую строчку. Код станет и красивее и читабельнее)
robbery.js
Outdated
| */ | ||
| tryLater: function () { | ||
| if (this.exists()) { | ||
| var laterTime = createLaterTime(robberyTime[0].from, 30); |
robbery.js
Outdated
| robberyTime[0].from = laterTime; | ||
|
|
||
| return true; | ||
| } else if (robberyTime.length > 1) { |
There was a problem hiding this comment.
почему именно больше 1, почему не больше 0?
|
🍅 |
|
🍏 Пройдено тестов 19 из 19 |
|
@bazhenova обрати внимание решено доп. задание |
robbery.js
Outdated
| return getFreeSchedule(joinedSchedule, bankTimezone); | ||
| } | ||
|
|
||
| function checkInterval(time, interval) { |
There was a problem hiding this comment.
В названии не отражено, на что именно ты проверяешь данный интервал. Раз ты возвращаешь булевское значение, то может быть лучше назвать как-нибудь isIntersected или isIncluded или что-то в этом роде (посмотри, что больше подходит)
robbery.js
Outdated
| function isCrossedIntervals(bankInterval, freeInterval) { | ||
| var checkTimeFrom = checkInterval(bankInterval.from, freeInterval); | ||
| var checkTimeTo = checkInterval(bankInterval.to, freeInterval); | ||
| var compareTimes = freeInterval.from > bankInterval.from && |
There was a problem hiding this comment.
Если я правильно поняла, то compareTimes - это isRobberyTime
robbery.js
Outdated
| } | ||
|
|
||
| function getMomentsForRobbery(freeSchedule, bankSchedule, duration) { | ||
| var timesToRob = []; |
There was a problem hiding this comment.
Лучше не сокращать слова в названиях: timesOfRobbery либо robberyTimes
|
И еще немного комментариев) |
|
🍅 |
|
Ты будешь доделывать задачу? |
|
@bazhenova, да, в процессе. Не знаю как правильно переименовать переменные. |
|
@tgkd Скажи, с чем проблемы, лучше напиши в slack, помогу |
|
🍅 Не пройден линтинг или базовые тесты |
|
🍏 Пройдено тестов 19 из 19 |
|
@bazhenova обрати внимание решено доп. задание |
robbery.js
Outdated
| return interval.from <= time && time <= interval.to; | ||
| } | ||
|
|
||
| function createDate(currentTime, firstTime) { |
There was a problem hiding this comment.
еще бы вот тут переименовать, ты же выбираешь максимум из дат, как я поняла; то есть по сути позднее из двух времен. И раз ты возвращаешь дату, то можно назвать getLaterTime. В аргументы передавай firstTime и secondTime
|
Еще пару переименований сделай, и я отдам тебя ментору. Вроде что-то хочется поправить, но не могу понять, что именно. Посмотрим, что скажет ментор |
|
🍅 |
|
🍏 Пройдено тестов 19 из 19 |
|
@bazhenova обрати внимание решено доп. задание |
|
🚀 |
|
🚀 |
| var bankTimezone = /\+(\d+)/.exec(time)[1]; | ||
|
|
||
| return parseInt(bankTimezone, 10); | ||
| } |
There was a problem hiding this comment.
Ты определяешь часовой пояс банка, а потом везде его прокидываешь в качестве аргумента. Проще сохранить в переменную
|
|
||
|
|
||
| function getSortedIntervals(schedule, bankTimezone) { | ||
| var sortedSchedule = parseSchedule(schedule, bankTimezone); |
There was a problem hiding this comment.
Тут еще пока не отсортировано. Отсортированным становится только на следующем шаге
| function getNewDate(date, bankTimezone) { | ||
| var timeRegExp = /([А-Я]{2}) (\d{2}):(\d{2})\+(\d+)/g; | ||
| var parsedTime = timeRegExp.exec(date); | ||
| var day = ROBBERY_DAYS.indexOf(parsedTime[1]) + 1; |
There was a problem hiding this comment.
ROBBERY_DAYS.indexOf(parsedTime[1]) + 1
В условии сказано, что проверять данные не надо, но допустим в расписании появится ЧТ. ЧТ, как день, является валидным значением, но твой код вернет 0(воскресенье), вместо 4(четверга).
Получается, что шаг в лево и твое решение перестанет работать. Надо переписать на что-то более надежное
| busyIntervals.push(totalBusyInterval); | ||
| totalBusyInterval = schedule[i]; | ||
| } | ||
| } |
| var freeIntervals = []; | ||
| var currentFreeInterval = {}; | ||
|
|
||
| currentFreeInterval.from = getNewDate('ПН 00:00+' + bankTimezone, bankTimezone); |
| busyTime.forEach(function (currentBusyInterval) { | ||
| if (currentBusyInterval.from === currentBusyInterval.to) { | ||
| return; | ||
| } |
There was a problem hiding this comment.
А в каком случае может отработать это условие? Ведь если у интервала начало и конец совпадают, то это уже не интервал, а момент времени.
| } | ||
| } | ||
| }); | ||
| }); |
There was a problem hiding this comment.
Тут все интервалы сравниваются с другими интервалами, но это не очень хорошо с точки зрения производительности. Зачем сравнивать время работы банка в понедельник с свободным временем грабителей во вторник или среду. Попробуй как-нибудь оптимизировать проверку по дням
|
🍅 |
|
Последняя активность 7-го ноября |
No description provided.