Everybody	
  loves	
  coffee,	
  right?	
  
Today,	
  Everybody	
  loves	
  JavaScript,	
  
                     right?	
  
•    JavaScript	
  revival	
  
•    Node.js	
  
•    One-­‐Page	
  applica@ons	
  
•    Real@me	
  applica@ons	
  
Some	
  things	
  I	
  like	
  about	
  
      CoffeeScript	
  
1.	
  FUNCTION	
  SYNTAX	
  
function	
  greet(name)	
  {	
  
  	
  return	
  ”Hello	
  ”	
  +	
  name	
  
}	
  



1.	
  FUNCTION	
  SYNTAX	
  
greet	
  =	
  (name)	
  -­‐>	
  
 	
  ”Hello	
  ”	
  +	
  name	
  




1.	
  FUNCTION	
  SYNTAX	
  
$(”a”).click(function(event)	
  {	
  
 	
  $(this).addClass(”busy”);	
  
});	
  



1.	
  FUNCTION	
  SYNTAX	
  
$(”a”).click	
  (event)	
  -­‐>	
  
 	
  $(this).addClass	
  ”busy”	
  




1.	
  FUNCTION	
  SYNTAX	
  
2.	
  SIGNIFICANT	
  WHITESPACE	
  
if(url)	
  {	
  
  	
  $.get(url,	
  function(data)	
  {	
  
  	
   	
  return	
  $(”#result”).html(data);	
  
  	
  });	
  
}	
  else	
  {	
  
  	
  $(”#error“).show();	
  
}	
  


2.	
  SIGNIFICANT	
  WHITESPACE	
  
if	
  url	
  
 	
  $.get	
  url,	
  (data)	
  -­‐>	
  
 	
   	
  $(”#result”).html	
  data	
  
else	
  
 	
  $(”#error“).show()	
  




2.	
  SIGNIFICANT	
  WHITESPACE	
  
if(url)	
  {	
  
  	
  $.get(url,	
  function(data)	
  {	
  
  	
   	
  return	
  $(”#result”).html(data);	
  
  	
  });	
  
}	
  else	
  {	
  
  	
  $(”#error“).show();	
  
}	
  


2.	
  SIGNIFICANT	
  WHITESPACE	
  
var	
  response	
  =	
  function(callback)	
  {	
  
   	
  return	
  $.get("/data.php",	
  function(data,	
  textStatus)	
  {	
  
   	
   	
  if(textStatus	
  ==	
  200)	
  {	
  
   	
   	
   	
  return	
  data.toUpperCase();	
  
   	
   	
  }	
  
   	
   	
  else	
  {	
  
   	
   	
   	
  return	
  callback(data);	
  
   	
   	
  }	
  
   	
  }	
  
};	
  


2.	
  SIGNIFICANT	
  WHITESPACE	
  
response	
  =	
  (callback)	
  -­‐>	
  
  	
  $.get	
  "/data.php",	
  (data,	
  textStatus)	
  -­‐>	
  
  	
   	
  if	
  textStatus	
  ==	
  200	
  
  	
   	
   	
  data.toUpperCase()	
  
  	
   	
  else	
  
  	
   	
   	
  callback(data)	
  




2.	
  SIGNIFICANT	
  WHITESPACE	
  
var	
  student	
  =	
  {	
  
      	
  name:	
  ”Sebastian”,	
  
      	
  age:	
  21,	
  
      	
  hobbies:	
  [”drums”,	
  ”programming”]	
  
}	
  




3.	
  BARE	
  OBJECTS	
  
student	
  =	
  
  	
  name:	
  ”Sebastian”	
  
  	
  age:	
  21	
  
  	
  hobbies:	
  [”drums”,	
  ”programming”]	
  




3.	
  BARE	
  OBJECTS	
  
var	
  squares	
  =	
  []	
  
	
  
for(var	
  i	
  =	
  0;	
  i	
  <	
  100;	
  i++)	
  {	
  
      	
  squares.push(i	
  *	
  i);	
  
}	
  




4.	
  COMPREHENSIONS	
  
squares	
  =	
  []	
  
	
  
for	
  i	
  in	
  [0..100]	
  
     	
  squares.push	
  i	
  *	
  i	
  




4.	
  COMPREHENSIONS	
  
squares	
  =	
  (i	
  *	
  i	
  for	
  i	
  in	
  [0..100])	
  




4.	
  COMPREHENSIONS	
  
squares	
  =	
  (i	
  *	
  i	
  for	
  i	
  in	
  [0..100]	
  when	
  i	
  %	
  2	
  is	
  0)	
  




4.	
  COMPREHENSIONS	
  
var	
  i,	
  squares;	
  
squares	
  =	
  (function()	
  {	
  
	
  	
  var	
  _results;	
  
	
  	
  _results	
  =	
  [];	
  
	
  	
  for	
  (i	
  =	
  0;	
  i	
  <=	
  100;	
  i++)	
  {	
  
	
  	
  	
  	
  if	
  (i	
  %	
  2	
  ===	
  0)	
  {	
  
	
  	
  	
  	
  	
  	
  _results.push(i	
  *	
  i);	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
	
  	
  return	
  _results;	
  
})();	
  


4.	
  COMPREHENSIONS	
  
$(”a”).click(function()	
  {	
  
  	
  $.get(”/data.php”,	
  (function(data,	
  responseText)	
  {	
  
  	
   	
  $(this).html(data);	
  
  	
  }).bind(this));	
  
});	
  




5.	
  FUNCTION	
  BINDING	
  
$(”a”).click	
  -­‐>	
  
  	
  $.get	
  ”/data.php”,	
  (data,	
  responseText)	
  =>	
  
  	
   	
  $(this).html	
  data	
  




5.	
  FUNCTION	
  BINDING	
  
$(”#elements”).append(	
  
   	
  ”<li	
  class=’entry’>”	
  +	
  data.name	
  +	
  ”</li>”	
  
);	
  




6.	
  STRING	
  SYNTAX	
  
$(”#elements”).append	
  ”<li	
  class=’entry’>#{data.name}</li>”	
  




6.	
  STRING	
  SYNTAX	
  
render	
  (student)	
  -­‐>	
  
  	
  ”””	
  
  	
   	
  <div	
  class=”student”>	
  
  	
   	
   	
  <a	
  href=”/student/#{student.id}”>	
  
  	
   	
   	
   	
  <span>#{student.name}</span>	
  
  	
   	
   	
  </a>	
  
  	
   	
  </div>	
  
  	
  ”””	
  

6.	
  STRING	
  SYNTAX	
  
There	
  is	
  lots	
  more:	
  
 Classes,	
  existen@al	
  operator,	
  destructuring	
  assignment,	
  …	
  




               hHp://coffeescript.org	
  



       Sebas@an	
  Hoitz	
  -­‐	
  @sebas@anhoitz	
  –	
  hHp://suplify.me	
  

Webmontag Berlin "coffee script"

  • 1.
  • 2.
    Today,  Everybody  loves  JavaScript,   right?   •  JavaScript  revival   •  Node.js   •  One-­‐Page  applica@ons   •  Real@me  applica@ons  
  • 3.
    Some  things  I  like  about   CoffeeScript  
  • 4.
  • 5.
    function  greet(name)  {    return  ”Hello  ”  +  name   }   1.  FUNCTION  SYNTAX  
  • 6.
    greet  =  (name)  -­‐>    ”Hello  ”  +  name   1.  FUNCTION  SYNTAX  
  • 7.
    $(”a”).click(function(event)  {    $(this).addClass(”busy”);   });   1.  FUNCTION  SYNTAX  
  • 8.
    $(”a”).click  (event)  -­‐>    $(this).addClass  ”busy”   1.  FUNCTION  SYNTAX  
  • 9.
  • 10.
    if(url)  {    $.get(url,  function(data)  {      return  $(”#result”).html(data);    });   }  else  {    $(”#error“).show();   }   2.  SIGNIFICANT  WHITESPACE  
  • 11.
    if  url    $.get  url,  (data)  -­‐>      $(”#result”).html  data   else    $(”#error“).show()   2.  SIGNIFICANT  WHITESPACE  
  • 12.
    if(url)  {    $.get(url,  function(data)  {      return  $(”#result”).html(data);    });   }  else  {    $(”#error“).show();   }   2.  SIGNIFICANT  WHITESPACE  
  • 13.
    var  response  =  function(callback)  {    return  $.get("/data.php",  function(data,  textStatus)  {      if(textStatus  ==  200)  {        return  data.toUpperCase();      }      else  {        return  callback(data);      }    }   };   2.  SIGNIFICANT  WHITESPACE  
  • 14.
    response  =  (callback)  -­‐>    $.get  "/data.php",  (data,  textStatus)  -­‐>      if  textStatus  ==  200        data.toUpperCase()      else        callback(data)   2.  SIGNIFICANT  WHITESPACE  
  • 15.
    var  student  =  {    name:  ”Sebastian”,    age:  21,    hobbies:  [”drums”,  ”programming”]   }   3.  BARE  OBJECTS  
  • 16.
    student  =    name:  ”Sebastian”    age:  21    hobbies:  [”drums”,  ”programming”]   3.  BARE  OBJECTS  
  • 17.
    var  squares  =  []     for(var  i  =  0;  i  <  100;  i++)  {    squares.push(i  *  i);   }   4.  COMPREHENSIONS  
  • 18.
    squares  =  []     for  i  in  [0..100]    squares.push  i  *  i   4.  COMPREHENSIONS  
  • 19.
    squares  =  (i  *  i  for  i  in  [0..100])   4.  COMPREHENSIONS  
  • 20.
    squares  =  (i  *  i  for  i  in  [0..100]  when  i  %  2  is  0)   4.  COMPREHENSIONS  
  • 21.
    var  i,  squares;   squares  =  (function()  {      var  _results;      _results  =  [];      for  (i  =  0;  i  <=  100;  i++)  {          if  (i  %  2  ===  0)  {              _results.push(i  *  i);          }      }      return  _results;   })();   4.  COMPREHENSIONS  
  • 22.
    $(”a”).click(function()  {    $.get(”/data.php”,  (function(data,  responseText)  {      $(this).html(data);    }).bind(this));   });   5.  FUNCTION  BINDING  
  • 23.
    $(”a”).click  -­‐>    $.get  ”/data.php”,  (data,  responseText)  =>      $(this).html  data   5.  FUNCTION  BINDING  
  • 24.
    $(”#elements”).append(    ”<li  class=’entry’>”  +  data.name  +  ”</li>”   );   6.  STRING  SYNTAX  
  • 25.
  • 26.
    render  (student)  -­‐>    ”””      <div  class=”student”>        <a  href=”/student/#{student.id}”>          <span>#{student.name}</span>        </a>      </div>    ”””   6.  STRING  SYNTAX  
  • 27.
    There  is  lots  more:   Classes,  existen@al  operator,  destructuring  assignment,  …   hHp://coffeescript.org   Sebas@an  Hoitz  -­‐  @sebas@anhoitz  –  hHp://suplify.me