Questão nº 39
Questão de Tecnologia da Informação · FCC TRT-12 2023 (nº 39)
Considere os programas em C# e em PHP a seguir:
C#:
using System;
namespace TratamentoExcecao {
class Program {
static void Main(string[] args) {
try{ double num = 10;
double den = 0;
double r = FazDivisao(num, den);
Console.WriteLine($"Resultado da divisão: {r}");
}
catch (DivideByZeroException ex) {
Console.WriteLine($"Erro: {ex.Message}");
}
catch (Exception ex) {
Console.WriteLine($"Erro desconhecido: {ex.Message}");
}
}
static double FazDivisao(double n, double d) {
if (d == 0) {
I
......
}
return n / d;
}
}
}
PHP:
<?php
function divide($a, $b) {
if ($b === 0) {
II
......
}
return $a / $b;
}
try {
$num1 = 10;
$num2 = 0;
$resultado = divide($num1, $num2);
echo "O resultado da divisão é: " . $resultado;
} catch (Exception $e) {
echo "Erro: " . $e->getMessage();
}
?>
Em condições ideais, para que cada um dos programas possa ser executado fazendo o tratamento de exceção relativo à divisão e sejam impressas as frases exatamente iguais, as lacunas I e II devem ser corretamente preenchidas com:
- ALacuna I: `throw new DivideByZeroException("Divisão por zero não é válida.");` Lacuna II: `throw new Exception_DivideByZero("Divisão por zero não é válida.");`
- BLacuna I: `throw new Exception("Divisão por zero não é válida.")` Lacuna II: `throw new Exception("Divisão por zero não é válida.")`
- CLacuna I: `throw new DivideByZeroException("Divisão por zero não é válida.")` Lacuna II: `throw new DivideByZeroException("Divisão por zero não é válida.")`
- DLacuna I: `throw new DivideByZeroException("Divisão por zero não é válida.");` Lacuna II: `throw new Exception("Divisão por zero não é válida.");` (alternativa correta)
- ELacuna I: `throw new Exception("Divisão por zero não é válida.");` Lacuna II: `throw new DivideByZeroException("Divisão por zero não é válida.");`
Resposta comentada
Gabarito Alternativa D
Tratamento de Exceções é um mecanismo usado em programação para lidar com situações inesperadas (erros) que podem ocorrer durante a execução de um programa, como tentar dividir um número por zero. Ele permite que o programa reaja a esses erros de forma controlada, em vez de simplesmente parar.
- (A) Incorreta: A Lacuna II usa
Exception_DivideByZero, que não é uma classe de exceção padrão no PHP. Para que o código PHP funcione sem a necessidade de definir uma nova classe, é preciso usar uma exceção padrão. - (B) Incorreta: A Lacuna I usa
Exceptiongenérica. Embora funcione, o C# possui uma exceção mais específica (DivideByZeroException) para esse cenário, e o blococatchno C# está configurado para capturar essa exceção específica primeiro. Usar a exceção genérica faria com que ela fosse capturada pelocatch (Exception ex)genérico, e não pelo mais específico. - (C) Incorreta: A Lacuna II usa
DivideByZeroException, que não é uma classe de exceção padrão no PHP. No PHP, para lançar uma exceção genérica ou para uma condição específica sem definir uma nova classe, usa-seException. Armadilha da banca: Esta alternativa é tentadora porqueDivideByZeroExceptionparece semanticamente correta para ambos os casos, mas não é uma classe padrão no PHP, o que a torna incorreta para a Lacuna II. - (D) Correta: A Lacuna I preenche corretamente o C# com
throw new DivideByZeroException("Divisão por zero não é válida.");. Esta é a exceção específica e idiomática para divisão por zero em C#, e será capturada pelo blococatch (DivideByZeroException ex). A Lacuna II preenche corretamente o PHP comthrow new Exception("Divisão por zero não é válida.");. No PHP,Exceptioné a classe base para todas as exceções e é a forma padrão de lançar uma exceção genérica que será capturada pelocatch (Exception $e). Ambas as escolhas garantem que as mensagens de erro sejam impressas conforme desejado. - (E) Incorreta: A Lacuna I usa
Exceptiongenérica em C#, o que não é o ideal quando há uma exceção mais específica (DivideByZeroException) disponível e um blococatchconfigurado para ela. A Lacuna II usaDivideByZeroExceptionem PHP, que não é uma classe padrão.
Fonte: FCC TRT-12 2023 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 003). Reproduzida para fins de estudo.