Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Else, lo inventó el diablo

jansanchez
February 12, 2018

Else, lo inventó el diablo

En esta presentación veremos algunos malos hábitos al usar IF/ELSE/ELSEIF y cómo evitarlos.

jansanchez

February 12, 2018
Tweet

More Decks by jansanchez

Other Decks in Programming

Transcript

  1. Decision Making (toma de decisiones) Es anticipar las condiciones que

    se producirán durante la ejecución del programa y especificar ¿Qué acciones tomar? en base a esas condiciones mediante las estructuras de decisión.
  2. Estructuras de decisión Estas evalúan múltiples expresiones que producen como

    resultado VERDADERO o FALSO. Para que así podamos determinar qué acción tomar y qué declaraciones ejecutar.
  3. La instrucción if-then ejecuta un bloque de código si la

    condición especificada es verdadera.
  4. En un juego, al perder una vida se debe validar

    si el número de vidas del jugador es menor a 1, Si fuese así, entonces el juego debe terminar.
  5. El jugador perdió una vida ¿El número de vidas es

    menor a 1? Validamos mediante una condición
  6. El jugador perdió una vida ¿El número de vidas es

    menor a 1? Finalizar el juego y mostrar el mensaje “Game Over”. Yes Validamos mediante una condición
  7. El jugador perdió una vida ¿El número de vidas es

    menor a 1? Finalizar el juego y mostrar el mensaje “Game Over”. Yes Validamos mediante una condición No
  8. El jugador perdió una vida ¿El número de vidas es

    menor a 1? Finalizar el juego y mostrar el mensaje “Game Over”. Yes Validamos mediante una condición No hacemos Nada! No
  9. El jugador perdió una vida ¿El número de vidas es

    menor a 1? Finalizar el juego y mostrar el mensaje “Game Over”. Yes Validamos mediante una condición The if-then Statement
  10. La instrucción if-then-elseif ejecuta su bloque de código asociado cuando

    la condición principal no es verdadera y cuando la condición elseif es verdadera.
  11. En base a las notas de un estudiante se debe

    validar si su estado es: Aprobado ( > 13 ) Sustitutorio ( > 10 <= 13) Desaprobado ( <= 10 )
  12. En base a sus notas se calcula la nota promedio

    de un estudiante Si la Nota del estudiante es > 13 El estado del estudiante es: “Aprobado” Yes Validamos mediante una condición Si la Nota del estudiante es > 10 No Condición #1 Condición #2
  13. Si la Nota del alumno es > 13 Si la

    Nota del alumno es > 10 No El estado del alumno es: “Sustitutorio” Yes El estado del alumno es: “Desaprobado” No The if-then-elseif Statement [11, 12, 13] [10, 9, …, ∞] Condición #1 Condición #2
  14. var student = { score: 12, status: "" } if

    (student.score > 13) { student.status = "Aprobado"; } else if (student.score > 10) { student.status = "Sustitutorio"; } else { student.status = "Desaprobado"; } // Logs "Sustitutorio"
  15. var student = { score: 12, status: "" } if

    (student.score > 13) { student.status = "Aprobado"; } else if (student.score > 10) { student.status = "Sustitutorio"; } else { student.status = "Desaprobado"; } Esta condición debe resultar falsa Esta condición debe resultar verdadera &
  16. Si la condición es evaluada como falsa. Se omite la

    ejecución del bloque principal de código. Y en su lugar se ejecuta el bloque secundario.
  17. Si el postulante superó los 90 puntos en su evaluación

    entonces es aceptado, sino es así, entonces es rechazado:
  18. Se obtienen los resultados del postulante ¿Si el puntaje obtenido

    es mayor a 90? El postulante es: “Aceptado” Yes Validamos mediante una condición El postulante es: “Rechazado” No [91, 92, …, ∞] [90, 89, …, ∞ ]
  19. var jobApplicant = { score: 90, status: "" } if

    (jobApplicant.score > 90) { jobApplicant.status = "Aceptado" } else { jobApplicant.status = "Rechazado" } // Logs "Rechazado"
  20. var jobApplicant = { score: 90, status: "" } if

    (jobApplicant.score > 90) { jobApplicant.status = "Aceptado" } else { jobApplicant.status = "Rechazado" } // Logs "Rechazado" Esta condición debe resultar falsa
  21. var jobApplicant = { score: 90, status: "" } if

    (jobApplicant.score > 90) { jobApplicant.status = "Aceptado" } else { jobApplicant.status = "Rechazado" } // Logs "Rechazado" Para que se ejecute este bloque de código Esta condición debe resultar falsa
  22. if (...1) { ... if (...2) { ... } else

    { ... if (...3) { ... } else { ... } } } else { ... }
  23. 1: True if (...1) { ... if (...2) { ...

    } else { ... if (...3) { ... } else { ... } } } else { ... }
  24. 1: True 1: True, 2: True if (...1) { ...

    if (...2) { ... } else { ... if (...3) { ... } else { ... } } } else { ... }
  25. 1: True 1: True, 2: True 1: True, 2: False

    if (...1) { ... if (...2) { ... } else { ... if (...3) { ... } else { ... } } } else { ... }
  26. 1: True 1: True, 2: True 1: True, 2: False

    1: True, 2: False, 3: True if (...1) { ... if (...2) { ... } else { ... if (...3) { ... } else { ... } } } else { ... }
  27. 1: True 1: True, 2: True 1: True, 2: False

    1: True, 2: False, 3: True 1: True, 2: False, 3: False if (...1) { ... if (...2) { ... } else { ... if (...3) { ... } else { ... } } } else { ... }
  28. if (...1) { ... if (...2) { ... } else

    { ... if (...3) { ... } else { ... } } } else { ... } 1: True 1: True, 2: True 1: True, 2: False 1: True, 2: False, 3: True 1: True, 2: False, 3: False 1: False, 2 & 3 No importan
  29. Context-Switch (Cambio de contexto) • Cambiar de tarea para el

    CPU significa guardar el estado de la tarea actual y cargar el estado guardado de la siguiente tarea. • El tiempo invertido en cambiar de una tarea a otra sin ninguna alteración es llamado context-switch. • Después de ser programado, el nuevo proceso se apodera del procesador para su ejecución. • En los humanos pasa algo similar si andamos cambiando de contexto a cada momento.
  30. if (...1) { ... if (...2) { ... } 1:

    True 1: True, 2: True
  31. 1: True 1: True, 2: True 1: True, 2: True,

    3: True if (...1) { ... if (...2) { ... } if (...3) { ... } }
  32. var validator = function (data) { if (data) { console.log('dato

    válido'); } else { console.log('dato inválido'); return null; } return data; } // "Ejecución" validator('dato de entrada');
  33. var validator = function (data) { if (data) { console.log('dato

    válido'); } else { console.log('dato inválido'); return null; } return data; } // "Ejecución" validator('dato de entrada'); Código esencial
  34. var validator = function (data) { if (!data) { console.log('dato

    inválido'); return null; } console.log('dato válido'); return data; } // "Ejecución" validator('dato de entrada'); Código esencial
  35. var fieldAsHtml = function(type) { if (type === 'text') return

    '<input type="text" />' else if (type === 'number') return '<input type="number" />' else if (type === 'email') return '<input type="email" />' else throw new Error(type) } // Use fieldAsHtml('text')
  36. Descubrir el patrón común var fieldAsHtml = function(type) { if

    (type === 'text') return '<input type="text" />' else if (type === 'number') return '<input type="number" />' else if (type === 'email') return '<input type="email" />' else throw new Error(type) } // Use fieldAsHtml('text')
  37. var fieldAsHtml = function(type) { return '<input type="' + type

    + '" />' } // Use fieldAsHtml('email') Polimorfismo es la capacidad de un objeto para adoptar muchas formas.
  38. if (isSpecialDeal()) { total = price * 0.95; prepare(); send();

    } else { total = price * 0.98; prepare(); send(); } Identificar los fragmentos duplicados
  39. if (isSpecialDeal()) { total = price * 0.95; } else

    { total = price * 0.98; } prepare(); send();
  40. if (isSpecialDeal()) { total = price * 0.95; } else

    { total = price * 0.98; } prepare(); send();
  41. if (isSpecialDeal()) { total = price * 0.95; } else

    { total = price * 0.98; } prepare(); send();
  42. var discount = 0.98; if (isSpecialDeal()) { discount = 0.95;

    } total = price * discount; prepare(); send(); Seteamos un valor por default para la mayoría de los casos (generalmente el else)
  43. var discount = 0.98; if (isSpecialDeal()) { discount = 0.95;

    } total = price * discount; prepare(); send(); Usamos if-then para validar solo la condición verdad
  44. getPayAmount(): number { let result: number; if (isDead){ result =

    deadAmount(); } else { if (isSeparated) { result = separatedAmount(); } else { if (isRetired) { result = retiredAmount(); } else{ result = normalPayAmount(); } } } return result; }
  45. getPayAmount(): number { let result: number; if (isDead){ result =

    deadAmount(); } else { if (isSeparated) { result = separatedAmount(); } else { if (isRetired) { result = retiredAmount(); } else{ result = normalPayAmount(); } } } return result; } 1: True 1: False, 2: True 1: False, 2: False, 3: True 1: False, 2: False, 3: False
  46. getPayAmount(): number { if (isDead){ return deadAmount(); } if (isSeparated){

    return separatedAmount(); } if (isRetired){ return retiredAmount(); } return normalPayAmount(); } 1: True 2: True 3: True 1, 2, 3: False
  47. if (spring) { if (weekday) { school(); } elseif (saturday)

    { if (raining) { tv(); } else { football(); } } else { homework(); } else if (winter) { hibernate(); } }
  48. if (spring && weekday) school(); if (spring && saturday &&

    !raining) football(); if (spring && saturday && raining) tv(); if (spring && sunday) homework(); if (winter) hibernate();
  49. if (spring && weekday) school(); if (spring && saturday &&

    !raining) football(); if (spring && saturday && raining) tv(); if (spring && sunday) homework(); if (winter) hibernate();
  50. if (...1) { ... if (...2) { ... } else

    { ... if (...3) { ... } else { ... } } } else { ... } if (...1) { @funcion(param1, param2) } else { ... } funcion @(param1, param2) { ... ... }
  51. “Los programas deben estar escritos para que la gente los

    lea, y solo de forma circunstancial para que las máquinas los ejecuten”. Harold Abelson, Structure and Interpretation of Computer Programs