Else Considered Harmful

Else Considered Harmful

People are bad at logic and at keeping state. “else” clauses are often used to implement complicated logic and require us to backtrack, a.k.a. to keep a lot of state.

75fb365927cb3f5f7b677682d6249406?s=128

Nikolay Bachiyski

November 29, 2014
Tweet

Transcript

  1. 2.
  2. 3.
  3. 5.
  4. 6.
  5. 7.

    W E H AV E A P RO B L

    E M O B V I O U S LY
  6. 8.
  7. 9.
  8. 10.
  9. 11.
  10. 12.
  11. 13.
  12. 14.
  13. 15.

    I N E N G L I S H B

    O O K S else If
  14. 16.

    I N C O M P U T E R

    P R O G R A M S else If
  15. 17.

    I N C O M P U T E R

    P R O G R A M S else If 2.5 times more else!
  16. 18.
  17. 19.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸      }  else  {          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸          }  else  {              ⩸⩸                    ⩸⩸⩸⩸⩸⩸          }      }   }  else  {      ⩸⩸⩸   }
  18. 20.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸      }  else  {          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸          }  else  {              ⩸⩸                    ⩸⩸⩸⩸⩸⩸          }      }   }  else  {      ⩸⩸⩸   } 1: true
  19. 21.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸      }  else  {          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸          }  else  {              ⩸⩸                    ⩸⩸⩸⩸⩸⩸          }      }   }  else  {      ⩸⩸⩸   } 1: true 1: true, 2: true
  20. 22.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸      }  else  {          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸          }  else  {              ⩸⩸                    ⩸⩸⩸⩸⩸⩸          }      }   }  else  {      ⩸⩸⩸   } 1: true 1: true, 2: true 1: true, 2: false
  21. 23.

    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
  22. 24.

    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
  23. 25.

    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 don’t matter
  24. 26.

    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 don’t matter We have to context-switch
  25. 27.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸              if  (⩸⩸⩸4)  {                  ⩸⩸                        ⩸⩸⩸⩸⩸⩸              }              ⩸⩸              ⩸⩸⩸⩸⩸⩸⩸⩸          }      }   }
  26. 28.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸              if  (⩸⩸⩸4)  {                  ⩸⩸                        ⩸⩸⩸⩸⩸⩸              }              ⩸⩸              ⩸⩸⩸⩸⩸⩸⩸⩸          }      }   } 1: true
  27. 29.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸              if  (⩸⩸⩸4)  {                  ⩸⩸                        ⩸⩸⩸⩸⩸⩸              }              ⩸⩸              ⩸⩸⩸⩸⩸⩸⩸⩸          }      }   } 1: true 1 & 2: TRUE
  28. 30.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸              if  (⩸⩸⩸4)  {                  ⩸⩸                        ⩸⩸⩸⩸⩸⩸              }              ⩸⩸              ⩸⩸⩸⩸⩸⩸⩸⩸          }      }   } 1: true 1 & 2: TRUE 1 & 2 & 3: TRUE
  29. 31.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸              if  (⩸⩸⩸4)  {                  ⩸⩸                        ⩸⩸⩸⩸⩸⩸              }              ⩸⩸              ⩸⩸⩸⩸⩸⩸⩸⩸          }      }   } 1: true 1 & 2: TRUE 1 & 2 & 3: TRUE 1 & 2 & 3 & 4: true
  30. 32.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸              if  (⩸⩸⩸4)  {                  ⩸⩸                        ⩸⩸⩸⩸⩸⩸              }              ⩸⩸              ⩸⩸⩸⩸⩸⩸⩸⩸          }      }   } 1: true 1 & 2: TRUE 1 & 2 & 3: TRUE 1 & 2 & 3 & 4: true No switches, just adding :-)
  31. 34.
  32. 35.
  33. 36.

    we use complex logic: • More when we talk to

    computers • less when we talk to people
  34. 37.

    P E O P L E A R E N

    OT G R E AT AT LO G I C
  35. 38.
  36. 39.

    P E O P L E A R E N

    OT G R E AT AT F O L LO W I N G S TAT E
  37. 41.

    FA C E S P E O P L E

    A R E G O O D AT
  38. 42.
  39. 43.
  40. 44.

    S O U N D S P E O P

    L E A R E G O O D AT
  41. 45.
  42. 47.

    M O R E PAT T E R N S

    L E S S “ E L S E ”
  43. 48.

    N OT N E C E S S A R

    I LY “ D E S I G N PAT T E R N S "
  44. 49.

    0 . E M P H A S I Z

    E E S S E N T I A L C O D E
  45. 50.

    valid  =  validator(data)   if  (valid)  {      

       ⩸⩸⩸⩸⩸⩸          ⩸⩸⩸⩸⩸          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸   }  else  {      return  null;   }   ⩸⩸⩸⩸⩸⩸   return  data;
  46. 51.

    valid  =  validator(data)   if  (valid)  {      

       ⩸⩸⩸⩸⩸⩸          ⩸⩸⩸⩸⩸          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸   }  else  {      return  null;   }   ⩸⩸⩸⩸⩸⩸   return  data; essential code
  47. 52.

    valid  =  validator(data)   if  (!valid)  {      return

     null;   }   ⩸⩸⩸⩸⩸⩸   ⩸⩸⩸⩸⩸   ⩸⩸⩸   ⩸⩸⩸⩸⩸⩸   ⩸⩸⩸⩸⩸⩸   return  data; essential code
  48. 55.

    fieldAsHtml:  function(field)  {      if  ('text'  ===  field.type)  

           return  <input  ⩸⩸⩸⩸⩸⩸  />;   else  if  ('number'  ===  field.type)          return  <Number  ⩸⩸⩸⩸⩸⩸>;      else  if  ('textarea'  ===  field.type)          return  <textarea  ⩸⩸⩸⩸⩸⩸⩸⩸⩸⩸⩸>      else          throw  new  IMissYou(type,  field)   }
  49. 56.

    fieldAsHtml:  function(field)  {      if  ('text'  ===  field.type)  

           return  <input  ⩸⩸⩸⩸⩸⩸  />;   else  if  ('number'  ===  field.type)          return  <Number  ⩸⩸⩸⩸⩸⩸>;      else  if  ('textarea'  ===  field.type)          return  <textarea  ⩸⩸⩸⩸⩸⩸⩸⩸⩸⩸⩸>      else          throw  new  IMissYou(type,  field)   } fieldAsHtml:  function(field)  {      renderer  =  renderers[field.type]  ||  throw…      return  renderer(field)   }
  50. 60.
  51. 61.
  52. 62.

    if  ('text'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else

     if  ('textarea'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('number'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('airplane  on  wheels'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('scooter  with  squirrel'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('name'  ===  field.type  &&  name.length  >  5      return  ⩸⩸⩸⩸⩸;   else  if  ('name'  ===  field.type  &&  name.length  <  5      return  ⩸⩸⩸⩸⩸;   else  if  ('textarea  on  JavaScript'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('textarea  raised  with  love'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else      return  ⩸⩸⩸⩸⩸;
  53. 63.

    if  ('text'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else

     if  ('textarea'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('number'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('airplane  on  wheels'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('scooter  with  squirrel'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('name'  ===  field.type  &&  name.length  >  5)      return  ⩸⩸⩸⩸⩸;   else  if  ('name'  ===  field.type  &&  name.length  <  5)      return  ⩸⩸⩸⩸⩸;   else  if  ('textarea  on  JavaScript'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else  if  ('textarea  raised  with  love'  ===  field.type)      return  ⩸⩸⩸⩸⩸;   else      return  ⩸⩸⩸⩸⩸;
  54. 64.

    2 . P U T M O R E F

    O C U S O N A C T I O N
  55. 65.

    if  (spring)  {      if  (weekday)  {    

         school();      }  elseif  (saturday)  {          if  (raining)              tv();          else              football();      }  else  {          homework();      }   }  else  if  (winter)  {      hibernate();   }
  56. 66.

    if  (spring)  {      if  (weekday)  {    

         school();      }  elseif  (saturday)  {          if  (raining)              tv();          else              football();      }  else  {          homework();      }   }  else  if  (winter)  {      hibernate();   } if  (spring  &&  weekday)      school();   if  (spring  &&  saturday  &&  !raining)      football();   if  (spring  &&  saturday  &&  raining)      tv();   if  (spring  &&  sunday)      homework();   if  (winter)      hibernate();
  57. 67.

    if  (spring)  {      if  (weekday)  {    

         school();      }  elseif  (saturday)  {          if  (raining)              tv();          else              football();      }  else  {          homework();      }   }  else  if  (winter)  {      hibernate();   } if  (spring  &&  weekday)      school();   if  (spring  &&  saturday  &&  !raining)      football();   if  (spring  &&  saturday  &&  raining)      tv();   if  (spring  &&  sunday)      homework();   if  (winter)      hibernate();
  58. 70.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸      }  else  {          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸          }  else  {              ⩸⩸                    ⩸⩸⩸⩸⩸⩸          }      }   }  else  {      ⩸⩸⩸   }
  59. 71.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸      }  else  {          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸          }  else  {              ⩸⩸                    ⩸⩸⩸⩸⩸⩸          }      }   }  else  {      ⩸⩸⩸   } if  (⩸⩸⩸⩸⩸1)  {      ⦾(⩸,  ⩸⩸⩸)   }  else  {      ⩸⩸⩸   }   function  ⦾(⩸,  ⩸⩸⩸)  {      ⪍  ⪍  ⪍      ⪍      ⪍  ⪍  ⪍  ⪍   }
  60. 72.

    if  (⩸⩸⩸⩸⩸1)  {      ⩸⩸⩸⩸      ⩸⩸⩸⩸  

       if  (⩸⩸2)  {          ⩸⩸⩸⩸      }  else  {          ⩸⩸⩸          ⩸⩸⩸⩸⩸⩸          ⩸⩸          if  (⩸⩸⩸3)  {              ⩸⩸          }  else  {              ⩸⩸                    ⩸⩸⩸⩸⩸⩸          }      }   }  else  {      ⩸⩸⩸   } var  ⪍  =  ⩸⩸⩸⩸⩸1;   if  (⪍)  {      ⦾(⩸,  ⩸⩸⩸)   }  else  {      ⩸⩸⩸   }
  61. 73.

    I N D I R E C T I O

    N ! = A B S T R A C T I O N
  62. 74.

    P RO G R A M M I N G

    + U S A B I L I T Y = ❤️
  63. 75.
  64. 76.
  65. 77.

    T H A N KS ! @ N I KO

    L AY B H T T P : // E X T R A P O L AT E . M E /