Ordenação de arrays em JavaScript: o método sort()
Gabarito: letra C. O método sort() do JavaScript, quando chamado sem função de comparação, converte os elementos para strings e os ordena em ordem alfabética/numérica crescente (ordem lexicográfica). No entanto, a questão afirma que a saída será em ordem decrescente, o que indica que o código provavelmente utiliza uma função de comparação que inverte essa ordem padrão, como (a, b) => b.localeCompare(a) ou (a, b) => b - a. Como o enunciado não fornece o código-fonte, a alternativa correta é a que descreve a saída em ordem decrescente, independentemente da ordem de inserção.
O método sort() é um dos métodos mais utilizados para ordenar arrays em JavaScript. Por padrão, ele ordena os elementos convertendo-os em strings e comparando seus códigos Unicode. Isso significa que, para strings, a ordenação é alfabética crescente (A-Z, a-z), e para números, a ordenação é numérica crescente, mas apenas se os números forem convertidos para strings (o que pode causar resultados inesperados, como 10 vindo antes de 2). Para controlar a ordem, é possível passar uma função de comparação como argumento. Essa função recebe dois elementos (a e b) e retorna um número negativo, zero ou positivo, indicando se a deve vir antes, depois ou se são iguais. Para obter uma ordem decrescente, basta inverter o sinal do retorno da função de comparação padrão.
A questão explora exatamente esse comportamento. O enunciado menciona que os nomes são "ordenados e então exibidos", e as alternativas descrevem diferentes ordens possíveis. A pegadinha está em reconhecer que, sem ver o código, a única informação que temos é que a saída é em ordem decrescente. As alternativas A, B, D e E descrevem outras ordens (crescente, crescente e depois decrescente, decrescente e depois crescente, e aleatória), que não correspondem ao comportamento esperado de um código que ordena e exibe uma única vez. A alternativa C é a única que descreve uma saída única em ordem decrescente, que é o que se espera de um código que utiliza sort() com uma função de comparação que inverte a ordem.
Para entender melhor, considere o seguinte exemplo: se os nomes inseridos forem "banana", "maçã", "pera", "uva" e "abacaxi", um código que ordena em ordem decrescente exibirá "uva", "pera", "maçã", "banana", "abacaxi". Independentemente da ordem em que foram inseridos, o resultado final será sempre esse. É isso que a alternativa C afirma: "Independentemente da ordem de inserção, será exibida a saída dos nomes em ordem alfabética/numérica decrescente."
A distinção importante aqui é entre a ordem de inserção e a ordem de exibição. A ordem de inserção é a sequência em que o usuário digita os nomes, enquanto a ordem de exibição é a sequência em que o programa os apresenta após a ordenação. O método sort() modifica o array original, reordenando seus elementos. Portanto, a ordem de exibição é determinada pela lógica de ordenação, não pela ordem de inserção. A banca explora a confusão entre esses dois conceitos, oferecendo alternativas que misturam ordens diferentes.
Guarde a fronteira entre a ordem de inserção e a ordem de exibição: é exatamente nela que as alternativas se dividem. A alternativa correta é a que descreve uma única ordem de exibição, que é a decrescente, independentemente da ordem de inserção.
Alternativa A — ❌ Incorreta
Afirma que a saída será em ordem alfabética/numérica crescente. Isso seria o comportamento padrão do sort() sem função de comparação, mas a questão indica que a saída é decrescente. A alternativa confunde a ordem padrão com a ordem invertida.
Alternativa B — ❌ Incorreta
Afirma que a saída será em ordem crescente e, logo após, em ordem decrescente. Isso implicaria que o código exibe a lista duas vezes, uma em cada ordem. No entanto, o enunciado diz que os nomes são "ordenados e então exibidos", sugerindo uma única exibição. A alternativa inventa uma sequência de exibições que não é mencionada.
Alternativa C — ✅ Correta ⟵ GABARITO
Afirma que a saída será em ordem alfabética/numérica decrescente, independentemente da ordem de inserção. Isso é consistente com um código que utiliza sort() com uma função de comparação que inverte a ordem padrão. A alternativa descreve corretamente o comportamento esperado.
Alternativa D — ❌ Incorreta
Afirma que a saída será em ordem decrescente e, logo após, em ordem crescente. Assim como a alternativa B, implica uma dupla exibição, o que não é mencionado no enunciado. A alternativa mistura as duas ordens em uma sequência que não corresponde ao comportamento de um código que ordena e exibe uma única vez.
Alternativa E — ❌ Incorreta
Afirma que a saída será em ordem aleatória. Isso contradiz a premissa de que os nomes são "ordenados". A ordenação, por definição, produz uma sequência determinística, não aleatória. A alternativa nega o próprio ato de ordenar.
Gabarito: letra C