Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Открывается и закрывается #7

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

bator-batuev
Copy link
Contributor

@bator-batuev bator-batuev commented Nov 13, 2024

@keksobot keksobot changed the title Добавлен сценарий просмотра фотографий в полноэкранном режиме Открывается и закрывается Nov 13, 2024
keksobot pushed a commit that referenced this pull request Nov 13, 2024
@keksobot
Copy link
Contributor

♻️ Я собрал ваш пулреквест. Посмотреть можно здесь.

Copy link
Collaborator

@fyvfyv fyvfyv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Твой код содержит довольно много комментариев, и это может считаться антипаттерном — когда избыточные пояснения делают код перегруженным и сложным для восприятия. Комментарии, объясняющие очевидные вещи, часто увеличивают объем кода, не добавляя реальной ценности.

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

Если тебе сейчас так удобнее, и комментарии помогают ориентироваться, можешь оставить их. Со временем, когда почувствуешь себя увереннее, попробуй минимизировать комментарии, сохраняя только те, которые добавляют что-то действительно полезное к пониманию кода.


Ещё у тебя в файле js/functions.js остались console.log, на которые ругается ESLint, давай их уберем, чтобы не мешались

js/img-view.js Outdated
// удаляем класс modal-open, чтобы контейнер с фотографиями снова скроллился
document.body.classList.remove('modal-open');
// удаляем с кнопки для закрытия окна просмотра обработчик закрытия по клику на нее
bigPictureCancelNode.removeEventListener('click', onBigPictureCancelClick);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Обрати внимание здесь и на 32 строке на ошибки от ESLint

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я пытался вынести объявление этих функций до этого блока, но в них используется функция closeBigPicture - ругается на нее. Замкнутый круг. Или просто объявить их двумя строчками (это желательно делать или можно так оставить)?

По поводу комментариев. Я самостоятельно не смог сделать это дз. Даже посмотрев разбор, мне понадобилось много времени, чтобы понять логику. Собственно, комментировал каждый шаг именно для этого и чтобы ты проверил. Это было еще в сентябре, до перерыва. Сейчас по этим комментариям заново пытf.cm все это понять)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ты можешь изменить здесь стрелочные функции на function declaration, т.е. function closeBigPicture и т. д. Тогда благодаря хоистингу эта ошибка исчезнет

js/img-view.js Outdated
Comment on lines 41 to 49
const onEscKeydown = (evt) => {
// проверяем, что нажата клавиша Esc
if (evt.key === 'Escape') {
// отменяем действие по умолчанию
evt.preventDefault();
// вызываем функцию закрытия окна просмотра
closeBigPicture();
}
};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❗️ Это не ошибка, просто для кругозора

Вместо проверки if (evt.key === 'Escape') и выполнения основной логики внутри, лучше сначала сделать проверку на противоположное условие — if (evt.key !== 'Escape') { return }.

Такой подход сразу отсеивает ненужные сценарии и позволяет основной логике функции быть менее вложенной, что делает её проще для чтения и понимания.

Suggested change
const onEscKeydown = (evt) => {
// проверяем, что нажата клавиша Esc
if (evt.key === 'Escape') {
// отменяем действие по умолчанию
evt.preventDefault();
// вызываем функцию закрытия окна просмотра
closeBigPicture();
}
};
const onEscKeydown = (evt) => {
// если нажата не клавиша Esc, выходим из функции
if (evt.key !== 'Escape') {
return;
}
// отменяем действие по умолчанию
evt.preventDefault();
// вызываем функцию закрытия окна просмотра
closeBigPicture();
};

Использование early return часто помогает избавиться от лишней вложенности, особенно в больших функциях, делая их структуру более плоской и легко читаемой

js/img-view.js Outdated
Comment on lines 100 to 107
pictureBlock.addEventListener('click', (evt) => {
const currentBigPicture = evt.target.closest('.picture');
// проверяем, что кликнули по миниатюре
if (currentBigPicture) {
// аргументом передаем в функцию открытия полноэкранного изображения id изображения, по которому кликнули
openBigPicture(currentBigPicture.dataset.pictureId);
}
});
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ты импортируешь pictureBlock здесь только для того, чтобы навесить обработчик, но сам элемент определяется в другом месте. В итоге, логика «подготовки» этого блока оказывается размазанной по двум файлам, что делает ее неочевидной. Лучше сделать рефакторинг так, чтобы код был более «цельным»: каждый блок логики завершённым, без необходимости переходить между файлами для понимания, где какая часть инициализируется.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Перенести этот фрагмент в thumbnails.js?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, например, и тогда img-view хорошо переименовать в что-то про big-picture (т.к. он только им и будет заниматься).
Кстати, тебе возможно будет проще, если просто на бумаге попробуешь нарисовать связи. Просто каждый файлик - это квадрат, а стрелочками туда-обратно между ними импорты/экспорты. И потом попробовать посмотреть, где можно упростить связи.

@keksobot
Copy link
Contributor

♻️ Я собрал ваш пулреквест. Посмотреть можно здесь.

keksobot pushed a commit that referenced this pull request Nov 14, 2024
}

// функция открытия полноэкранного изображения
function openBigPicture (pictureId) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Смотир, при проверке тоже указало на ошибку. У тебя функция объявлена, но не экспортируется (хотя ты её используешь рядом)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Точно, забыл про экспорт. Думал, ошибка указывает, что функция не используется конкретно в этом модуле.

@keksobot
Copy link
Contributor

♻️ Я собрал ваш пулреквест. Посмотреть можно здесь.

keksobot pushed a commit that referenced this pull request Nov 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants