Abe Estrada

GetPercentageRounds

Acaba de hacerce popular el siguiente tweet:

El cual muestra una función dentro del código de una aplicación del gobierno holandés, la cual muestra una cadena de texto que representa el procentaje. El tweet no juzga el código, solo anuncia que el código del proyecto esta disponible en GitHub.

El código esta escrito en C# y es para una aplicación de iOS. La respuesta fue variada, hay quienes dice que el código es excelente y hay quienes indican que probablemente pudiera ser abreviado aunque se pueda reducir la forma tan fácil de leer el código en su forma original.

const GetPercentageRounds = (percentage) => {
  if (percentage == 0)
    return "⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪";
  if (percentage > 0.0 && percentage <= 0.1)
    return "🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪";
  if (percentage > 0.1 && percentage <= 0.2)
    return "🔵🔵⚪⚪⚪⚪⚪⚪⚪⚪";
  if (percentage > 0.2 && percentage <= 0.3)
    return "🔵🔵🔵⚪⚪⚪⚪⚪⚪⚪";
  if (percentage > 0.3 && percentage <= 0.4)
    return "🔵🔵🔵🔵⚪⚪⚪⚪⚪⚪";
  if (percentage > 0.4 && percentage <= 0.5)
    return "🔵🔵🔵🔵🔵⚪⚪⚪⚪⚪";
  if (percentage > 0.5 && percentage <= 0.6)
    return "🔵🔵🔵🔵🔵🔵⚪⚪⚪⚪";
  if (percentage > 0.6 && percentage <= 0.7)
    return "🔵🔵🔵🔵🔵🔵🔵⚪⚪⚪";
  if (percentage > 0.7 && percentage <= 0.8)
    return "🔵🔵🔵🔵🔵🔵🔵🔵⚪⚪";
  if (percentage > 0.8 && percentage <= 0.9)
    return "🔵🔵🔵🔵🔵🔵🔵🔵🔵⚪";

  return "🔵🔵🔵🔵🔵🔵🔵🔵🔵🔵";
}

Yo soy de los que opina que el código pudiera ser más corto ofreciendo la misma funcionalidad. Así que me di a la tarea de intentar replicar el código como yo a lo mejor lo hubiera hecho en un proyecto real.

Esta es mi propuesta:

const GetPercentageRoundsAbe = (percentage = 0, size = 10) => {
  return Array(size) // Length
    .fill("🔵") // Percentage
    .fill("⚪", parseFloat(percentage) * size) // Filler
    .join(""); // Convert to string
};

Pruebas:

console.log(GetPercentageRoundsAbe(0.5));

Las primeras cinco pruebas son con la solución original, es la base, las siguiente cinco pruebas son con la nueva función reducida y las últimas dos son solo para ver casos no contemplados para obtener el valor predeterminado.