Show your code Saturday: код-рев’ю #10
Коментар редакції. Нещодавно ми оголосили про початок Show your code Saturday — це інтерактивна рубрика, у якій кожен охочий може поділитися власним проєктом, написавши про нього в коментарях. А ми натомість щосуботи обираємо найцікавіший і розповідатимемо детальніше.
Сьогодні ми хочемо поділитися з вами роботою Андрія Блищака.
Наш активний учасник спільноти Максим Рудний зробив код-рев’ю проєкту! Тож далі передаємо слово Максиму 👇
Дисклеймер: я не є автором коду і не знаю причин реалізації будь-якої частини коду таким чином, як це є. Стиль написання коду без ознайомлення з Code Style та Code Convention проєкту не можу критикувати, може це так було задумано.
Сьогодні у нас на ревю щось новеньке — проєкт на Vue 3. Автор Андрій Блищак спробував зробити клон Minesweeper з Windows, щоб попрактикуватись, але пет-проєкт трохи виріс і тепер там чотири гри — сапер, тетріс, 2048 та судоку.
Я ніколи не писав на Vue і навіть не дивився в його сторону. Якщо ви теж не використовували Vue то, гадаю, буде цікаво глянути на цей проєкт з погляду React-розробника.
Генерація проєкту
Vite спростив нам трохи життя, адже він створює проєкти як на React, так і на Vue. Структура проєкту максимально знайома і «онбординг» відбувається швидше.
Оскільки структура знайома то і проблеми тут теж знайомі. В нас не налаштовані інструменти автоматичного забезпечення якості коду — ESlint та Pritter. Файли конфігурації були згенеровані, але дальше цього автор не пішов. В package.json не додана жодна команда для запуску цих інструментів.
Попри відсутність цих інструментів, код виглядає чистим, нема до чого придертись.
Юніт-тестів тут теж нема, що не дуже личить Senior-розробнику.
По коду
Автор закомітив .vscode папочку, при тому що сам же додав її в .gitignore. Там лежать налаштування IDE конкретного розробника і вони будуть відрізнятися в різних програмістів. В мене взагалі .idea і там свої файли лежать. Ці папки завжди ігноруються в Git.
Місцями видно шматки коду скопійовані з іншого проєкту, причому не з JavaScript. Нотація для змінних не CamelCase, а snake_case. В JS ми все таки пишемо в одній єдиній нотації.
export function unique(allowed: number[], index: number, value: number) {
let { row, col } = indexToRowAndColumn(index);
let r1 = 3 * ((row / 3) | 0);
let c1 = 3 * ((col / 3) | 0);
let ir = 9 * row;
let ic = col;
let uniq_row = true;
let uniq_col = true;
let uniq_3x3 = true;
for (let r = r1; r < r1 + 3; ++r) {
for (let c = c1; c < c1 + 3; ++c, ++ir, ic += 9) {
if (uniq_3x3) {
let i = rowAndColumnToIndex(r, c);
if (i != index && allowed[i] & value) uniq_3x3 = false;
}
if (uniq_row) {
if (ir != index && allowed[ir] & value) uniq_row = false;
}
if (uniq_col) {
if (ic != index && allowed[ic] & value) uniq_col = false;
}
if (!(uniq_3x3 || uniq_row || uniq_col)) return false;
}
}
return uniq_row || uniq_col || uniq_3x3;
}
Також місцями в коді ще є var для оголошення змінної. Схоже що якась частина коду була скопійована і не оновлена.
Робота зі стилями
Що цікаво, у Vue уже з коробки є функція що спрощує побудову класів стилів. У React нам потрібно використовувати бібліотеки classnames або clsx. Тут же ми просто беремо метод computed і отримуємо той же результат (сподіваюсь).
const cellClasses = computed(() => ({
[styles.cell]: true,
[styles.opened]: !props.fieldCell.isHidden,
[styles.mine]: props.fieldCell.isPlanted,
[styles.flag]: props.fieldCell.label === FieldCellLabel.Flag,
[styles.question]: props.fieldCell.label === FieldCellLabel.Question,
[styles.highlight]: props.fieldCell.isHighlighted,
[styles.hidden]: hidden.value,
}));
Ще більше цікавого у моєму огляді на YouTube. Також підписуйтесь на телеграм, де я ділюсь корисною інформацією для Front-end розробників.
2 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів