@is-jabir

Можно ли сократить этот код, но чтобы он не лишался своих функций?

Недавно начал изучать JavaScript. Вот написал простенький код, который спрашивает имя и возраст, а потом его выводит. Интересно, можно ли его максимально сократить, просто в программирование вошел также не давно, опыта не много.
'use strict';
let userName = prompt (`Здравствуйте, как вас зовут?:`,``);
let userAge = prompt (`Сколько вам лет?:`, ``);
while (userName == null) {
	let userName2 = prompt (`Я же спрашиваю, как вас зовут?:`, ``);
	userName = userName2; /* если пользователь не ввел
	                         значения или нажал "Отмена", при вопросе "Как вас зовут?", 
	                         цикл не завершиться, пока пользователь не введет значение.*/
}
while (userAge == null) {
	let userAge2 = prompt (`Почему молчите? Возраст укажите:`, ``);
	userAge = userAge2;/* если пользователь не ввел
	                      значения или нажал "Отмена", при вопросе "Сколько вам лет?", 
	                      цикл не завершиться, пока пользователь не введет значение.*/
}
alert (`Здравствуйте ${userName}, вам ${userAge} лет.`);
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
@Che603000
c 2011 javascript
У вас приличный код. Код должен быть не короткий, а понятный.
Как вариант, можно цикл чуть по другому определить.
while (!userName) {
...
}


P.S.
userName == null почитайте про разницу разницу между == и ===. В js это важно и обычно используют userName === null
Успехов!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ovodovod
I am Software Engineer
С помощью простой рекурсии будут вызываться функции sayHello и getAge до тех пор, пока наш пользователь не даст ответ:

const promt = (message = '') => window.prompt(message);

function sayHello() {
  let name = promt('Здравствуйте, как вас зовут?');
  return name || sayHello();
}

function getAge() {
  let age = promt('Сколько вам лет?');
  return age || getAge();
}

function greeting() {
	let name = sayHello();
  let age = getAge();

  alert(`Здравствуйте ${name}, вам ${age} лет.`);
}

greeting();


Если вам обязательно нужно задать второй вопрос, если пользователь не ответил на первый (который по умолчанию), то данную логику можно реализовать так:

const promt = (message = '') => window.prompt(message);

function getAnswerAnyway(defaultQuestion, repeatQuestion) {
  const iter = (atempts = 2) => {
    const question = atempts === 2 ? defaultQuestion : repeatQuestion;
    let age = promt(question);
    return age || iter(atempts - 1);
  }

  return iter(2);
}

function greeting() {
	let name = getAnswerAnyway(
    'Здравствуйте, как вас зовут?',
    'Я же спрашиваю, как вас зовут?',
  );

  let age = getAnswerAnyway(
    'Сколько вам лет?',
    'Почему молчите? Возраст укажите',
  );

  alert(`Здравствуйте ${name}, вам ${age} лет.`);
}

greeting();


Рабочий код можно посмотреть здесь.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 17:14
4000 руб./за проект
29 мар. 2024, в 17:04
5000 руб./за проект
29 мар. 2024, в 17:03
3000 руб./за проект