Как правильно разбивать функции в javascript?

У меня есть функция, которая выводит логи боя, но в идеале она должна только генерировать лог, а рендерить лог на страницу должна уже другая функция.
Как их по правильному разбить и вызывать ? Можно ли в функции вызывать функцию?
export const generateLogs = (type, player1, player2, damage = 0) => {
	const { name: name1 } = player1;
	const { name: name2 } = player2;

	let logMessage = type
		.replace('[playerKick]', name1)
		.replace('[playerDefence]', name2);

	switch (type) {
		case 'start':
			logMessage = LOGS.start
				.replace('[time]', getTime())
				.replace('[player1]', name1)
				.replace('[player2]', name2);
			break;
		case 'hit':
			logMessage = `${LOGS.hit[getRandom(0, LOGS.hit.length - 1)]
				.replace('[playerKick]', name1)
				.replace('[playerDefence]', name2)} -${damage} 
				[${player2.hp} / 100]
			`;
			break;
		case 'defence':
			logMessage = LOGS.defence[getRandom(0, LOGS.defence.length - 1)]
				.replace('[playerKick]', name2)
				.replace('[playerDefence]', name1);
			break;
		case 'end':
			logMessage = LOGS.end[getRandom(0, LOGS.end.length - 1)]
				.replace('[playerWins]', name1)
				.replace('[playerLose]', name2);
			break;
		case 'draw':
			logMessage = LOGS.draw;
			break;
		default:
			logMessage = '...';
	}
        const el = `<p>${logMessage }</p>`;
	chat.insertAdjacentHTML('afterbegin', el);

	return el ;
};
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Результат вот этого будет потерян:
let logMessage = type
    .replace('[playerKick]', name1)
    .replace('[playerDefence]', name2);


Я бы ожидал, что функция с именем generate мне что-то вернёт, а не сделает сайд эффект.

Можно как то так:
export const generateLogs = (type, player1, player2, damage = 0) => {
    const { name: name1 } = player1;
    const { name: name2 } = player2;

    const logMessage = type
        .replace('[playerKick]', name1)
        .replace('[playerDefence]', name2);

    switch (type) {
        case 'start':
            return logMessage + LOGS.start
                .replace('[time]', getTime())
                .replace('[player1]', name1)
                .replace('[player2]', name2);
        case 'hit':
            return logMessage + `${LOGS.hit[getRandom(0, LOGS.hit.length - 1)]
                .replace('[playerKick]', name1)
                .replace('[playerDefence]', name2)} -${damage} 
                [${player2.hp} / 100]
            `;
        case 'defence':
            return logMessage + LOGS.defence[getRandom(0, LOGS.defence.length - 1)]
                .replace('[playerKick]', name2)
                .replace('[playerDefence]', name1);
        case 'end':
            return logMessage + LOGS.end[getRandom(0, LOGS.end.length - 1)]
                .replace('[playerWins]', name1)
                .replace('[playerLose]', name2);
        case 'draw':
            return logMessage + LOGS.draw;
        default:
            return logMessage + '...';
    }
};

export const insertLogs = (logMessage) => {
    const el = `<p>${logMessage}</p>`;
    chat.insertAdjacentHTML('afterbegin', el);
};
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ZhenyaMak
@ZhenyaMak
Писать качественный софт? Пфф, это не для меня.
Ну разбейте как и описали вы сами выше))

Про вызов функции из другой функции - да, можно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы