Exemplo de exceção com atributos data- em JavaScript

Suponha que, ao carregar a página, o servidor crie um código HTML que armazena o nome, o preço e a quantidade do produto comprado:

html<div id="product" data-product="maçã" data-price="1000" data-amount="5"></div>

Vamos criar uma função que receberá uma referência ao elemento do produto e calculará o custo total do item (preço multiplicado pela quantidade):

javascriptfunction getCost(elem) {
  return elem.dataset.price * elem.dataset.amount;
}

Vamos encontrar o custo do nosso produto:

javascriptlet product = document.querySelector('#product');
let cost = getCost(product);

alert(cost);

Agora, suponha a seguinte situação: devido a alguma falha no servidor, ele nos enviou um produto que não tem preço ou quantidade (ou ambos), por exemplo, assim:

html<div id="product" data-product="maçã" data-price="1000"></div>

Se tentarmos calcular o custo do produto agora, o resultado exibido na tela será NaN. Concorda, não é muito informativo.

Isso significa que precisamos de alguma forma nos proteger contra a ausência dos atributos de que precisamos. Isso pode ser feito de duas maneiras. A primeira maneira é considerar isso um comportamento normal e simplesmente verificar a presença dos atributos necessários com instruções if:

javascriptfunction getCost(elem) {
  if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
    return elem.dataset.price * elem.dataset.amount;
  } else {
    return 0; // retornamos algo, por exemplo, 0 ou null ou false
  }
}

A segunda opção é considerar que a ausência do atributo data-price ou data-amount é uma situação excepcional. Nesse caso, lançaremos uma exceção:

javascriptfunction getCost(elem) {
  if (elem.dataset.price !== undefined && elem.dataset.amount !== undefined) {
    return elem.dataset.price * elem.dataset.amount;
  } else {
    throw {
      name: 'ProductCostError',
      message: 'preço ou quantidade ausentes para o produto'
    };
  }
}

Qual das duas opções é mais apropriada aplicar aqui - é uma escolha do programador. Ele pode considerar o problema como parte do funcionamento normal do script ou como uma situação excepcional.

Digamos que decidimos que a situação é excepcional. Então, o código para obter o custo do produto ficaria assim:

javascriptlet product = document.querySelector('#product');

try {
  let cost = getCost(product);
  alert(cost);
} catch (error) {
  // reagimos de alguma forma à exceção
}
Задание 1

Modifique meu código para que a função getCost lance dois tipos de exceções: se o preço estiver ausente e se a quantidade estiver ausente. Pense bem sobre os nomes dessas exceções. No bloco catch, exiba mensagens de erro diferentes para exceções de tipos diferentes.