¿Cuáles son algunas alternativas para escribir una función if/else más limpia, mejor y más inteligente?
De hecho, estoy tratando de convertir mi código en algo más legible.
const statusComment = () => { const isApproved = "🟢"; const unApproved = "🔴"; let status; // is approved and has comment. if (checkApproval && comment) { status = `${isApproved} — ${comment}`; // is not approved and has comment. } else if (!checkApproval && comment) { status = `${unApproved} — ${comment}`; // has comment. } else if (comment) { status = comment; // is approved. } else if (checkApproval) { status = isApproved; } else { // is not approved. status = unApproved; } return status; };
Vamos a desglosarlo un poco: su cadena tiene dos partes que están unidas por un guión -
checkApproval
.comment
. Además, tenga en cuenta que no es posible llegar a su tercera declaración, ya que el comment
siempre es verdadero en las dos primeras declaraciones y se combina con una bandera booleana.
Por lo tanto, puede crear una matriz con la primera parte obligatoria con esta declaración ternaria:
const status = [checkApproval ? "🟢" : "🔴"];
Para la segunda parte opcional, la presionas cuando el comment
es veraz:
if (comment) status.push(comment);
Aquí está su código modificado:
const statusComment = () => { const status = [checkApproval ? "🟢" : "🔴"]; if (comment) status.push(comment); return status.join(' — '); };
Hagamos una tabla basada en su código existente:
checkApproval comment out true true green - comment false true red - comment true comment duplicate/unnecessary? true green false red
Entonces vemos que si hay verdadero para checkApproval, es verde y rojo de lo contrario.
Hagámoslo ahora mismo:
const status = `${checkApproval ? "🟢" : "🔴"}`;
Y si hay un comentario, hay un guión seguido del comentario. Esto lo podemos representar también:
const status = `${checkApproval ? "🟢" : "🔴"}${comment ? " - " + comment : ""}`;
Si no hay ningún comentario, no se añade nada después.
Entonces podemos devolver status
normalmente.