coffeescript the good parts
play

CoffeeScript: The Good Parts The good and not so good parts of Co ff - PowerPoint PPT Presentation

webapplog.com CoffeeScript: The Good Parts The good and not so good parts of Co ff eeScript in comparison to JavaScript @azat_co 1 webapplog.com About The Presenter Azat Mardan Worked in the US government, startups and corporations


  1. webapplog.com CoffeeScript: The Good Parts The good and not so good parts of Co ff eeScript in comparison to JavaScript @azat_co 1

  2. webapplog.com About The Presenter Azat Mardan • Worked in the US government, startups and corporations • Wrote six books on JavaScript and Node.js (the latest is Practical Node.js by Apress) • Certified yoga teacher and paleo lifestyle enthusiast @azat_co 2

  3. webapplog.com Fun story: “CoffeeScript is a solution without a problem” I used to make fun of CoffeeScript, before falling in love with it. @azat_co 3

  4. webapplog.com Who likes /uses CoffeeScript already? @azat_co 4

  5. webapplog.com Please be open-minded @azat_co 5

  6. webapplog.com Blub Paradox � Blub paradox: devs are satisfied with whatever language they happen to use, because it dictates the way they think about programs. http://en.wikipedia.org/wiki/ Paul_Graham_(computer_programmer)#Blub @azat_co 6

  7. webapplog.com CoffeeScript’s Bad Rep Most of the people who say bad things about CoffeeScript have never built with it anything relatively large-scale and production-ready. @azat_co 7

  8. webapplog.com CoffeeScript at DocuSign DocuSign stack: CoffeeScript+Node.js+Backbone.js+Grunt Observation: front-end developers, after only a few weeks of CoffeeScript, didn’t want to go back to regular JavaScript! @azat_co 8

  9. webapplog.com “CoffeeScript is a little language that compiles into JavaScript.” — coffeescript.org @azat_co 9

  10. webapplog.com TOC for v1.7.1 Maybe Co ff eeScript is not so small anymore? @azat_co 10

  11. webapplog.com JavaScript @azat_co 11

  12. webapplog.com Native JavaScript Issues • == vs === • Functional inheritance vs pseudo-classical • Global variable leakage (missing var) • Many others @azat_co 12

  13. webapplog.com CoffeeScript: The Good Parts (some of them) • Syntax: curly braces, parentheses and semicolons • Function declaration: -> and => • Scoping: automatic var • Iterators / comprehensions: replacement of for loops • Class declaration: class operand @azat_co 13

  14. webapplog.com Syntax • No semicolons, i.e., they are banned • Logical blocks can omit curly braces • Function calls can omit parentheses @azat_co 14

  15. webapplog.com Why Semicolons are Bad? (*IMHO) • Extra time&work to put them • If missed, inconsistent but working code • Redundant/not-needed (expect in two cases) • Semicolon Insertion (ASI) @azat_co 15

  16. webapplog.com Logical Blocks (optional curly braces) kids = brother: name: "Max" age: 11 sister: name: "Ida" age: 9 @azat_co 16

  17. webapplog.com Function calls console.log object.class � $('.account').attr class: ‘active’ � $(‘button’).css color: red “font-size”: “16px” @azat_co 17

  18. webapplog.com Function Declaration • Skinny arrow (->) saves time typing “function” over and over again • Fat arrow (=>), i.e., no need to use “var that = this” or “var self = this” @azat_co 18

  19. webapplog.com Function Declaration Elegance CoffeeScript: JavaScript: a = (x,y) -> console.log x+y var a; � a = function(x, y) { return console.log(x + y); }; � a(10, -5); @azat_co 19

  20. webapplog.com Function Declaration: Skinny Arrow JavaScript: CoffeeScript: console.log @ $('div').click ()-> console.log @ console.log(this); $('div').click(function() { return console.log(this); }); Prints “window” and DOM elements i.e., “this” changes and @ changes too @azat_co 20

  21. webapplog.com Function Declaration: Fat Arrow JavaScript: CoffeeScript: console.log @ var _this = this; $('div').click ()=> � console.log @ console.log(this); � $('div').click(function() { return console.log(_this); }); Prints “window” both times (i.e., the outer scope) @azat_co 21

  22. webapplog.com Scoping • Manual “var” is banned • Variables declared in the scope in which they are encountered first (i.e., the order in which variables used determines their scope). @azat_co 22

  23. webapplog.com Why auto vars are good? Missed “var” Example. CoffeeScript: JavaScript: var a = function (c) { var a = function(c) { b = 10; var b = 10; return b + c; return b + c; } }; console.log(a(0)); console.log(a(0)); � � b is window.b — bad! b is a private attribute — what we wanted! @azat_co 23

  24. webapplog.com Scoping: Example I CoffeeScript: JavaScript: b = 1 var a, b; a = -> b = 1; b = -1 a = function() { return b = -1; � a() }; console.log b a(); console.log(b); @azat_co 24

  25. webapplog.com Scoping: Example II CoffeeScript: JavaScript: a = -> b = -1 b = 1 var a, b; a() a = function() { console.log b var b; return b = -1; }; b = 1; a(); console.log(b); @azat_co 25

  26. webapplog.com Iterators / Comprehensions (for loops) Awesome time savers! Good for arrays and objects: � for item, index in arrayObject iterator(item) � for key, value of object iterator(item) � � � � � @azat_co 26

  27. webapplog.com Iterating over an Array CoffeeScript: JavaScript: var index, item, _i, _len; � for item, index in arrayObject for (index = _i = 0, iterator(item) _len = arrayObject.length; _i < _len; index = ++_i) { item = arrayObject[index]; iterator(item); } @azat_co 27

  28. webapplog.com Iterating over an Object CoffeeScript: JavaScript: var key, value; for key, value of object � iterator(value) for (key in object) { value = object[key]; iterator(value); } @azat_co 28

  29. webapplog.com Iterators / Comprehensions (for loops) II Many options: � iterator (item) for item in arrayObject � iterator item for item in arrayObject � iterator item for item in arrayObject when item > 0 � � � � � � @azat_co 29

  30. webapplog.com Class Declaration • In JavaScript classes are absent at all! • CoffeeScript eloquently implements Pseudo-classical inheritance pattern: “new” and capitalized name (“new Animal”, “new Vehicle”, etc.) • Pseudo-classical is hard and cumbersome without CS • CoffeeScript “constructor” method and “super” call @azat_co 30

  31. webapplog.com Class Example CoffeeScript: class Vehicle constructor: (@name) -> move: (meters) -> console.log @name + " moved #{meters} miles.” � camry = new Vehicle "Camry" camry.move(50) Output: Camry moved 50 miles. @azat_co 31

  32. webapplog.com Class Example JavaScript: var Vehicle, camry; � Vehicle = (function() { function Vehicle(name) { this.name = name; } � Vehicle.prototype.move = function(meters) { return console.log(this.name + (" moved " + meters + " miles.")); }; � return Vehicle; � })(); � camry = new Vehicle("Camry"); � camry.move(50); 2x: 6 vs 12 lines of code! @azat_co 32

  33. webapplog.com Other CoffeeScript Goodies • Splats (e.g., “options…”) • Conditions (if, isnt, not, and, or, unless) • Arrays and their slicing (arr = [1..10], slicedArr = arr[2..4]) @azat_co 33

  34. webapplog.com CoffeeScript: The Good Parts Summary • Syntax: curly braces, parentheses and semicolons • Function Declaration: -> and => • Scoping: automatic var • Iterators / Comprehensions: replacement of for loops • Class Declaration: class operand @azat_co 34

  35. webapplog.com CoffeeScript: Not So Good Parts • Learning: 1-2 day, free online ebooks • Compilation: extra build step (use Grunt or similar) • Parentheses: optional and cause misinterpretation • Debugging: use source-maps @azat_co 35

  36. webapplog.com CoffeeScript of My Dreams https://github.com/michaelficarra/coffee-of-my- dreams @azat_co

  37. webapplog.com How to Get Started $ npm install -g coffee-script $ coffee >… @azat_co 37

  38. webapplog.com Companies that use CoffeeScript • GitHub • Airbnb (mobile) • Dropbox • HotelTonight • DocuSign • Basecamp (mobile) @azat_co 38

  39. webapplog.com Further Reading CoffeeScript FUNdamentals: The Better JavaScript http://bit.ly/1nD4dE3 @azat_co 39

  40. webapplog.com CoffeeScript Ebooks • The Little Book on CoffeeScript (free onine) • CoffeeScript Cookbook (free online) • Smooth CoffeeScript (free online) • CoffeeScript Ristretto (free online) @azat_co 40

  41. webapplog.com Future / Alternatives • Dart (early stage) • TypeScript: MicroSoft project • ECMAScript 6: be careful with old browsers, use shims, fully available after June 2015 • Sweet.js: macros! @azat_co 41

  42. webapplog.com Conclusions • Good for enterprise and large team, because it’s easer to have common style, e.g., https://github.com/styleguide/ javascript • Good for developers new to JavaScript and those coming from OOP languages (Java, Ruby) • Cross-browser / old browser support • More productive and happier developers (after learning) • Tested, robust, and available now • Awesome with Backbone.js and Underscore.js @azat_co 42

  43. webapplog.com Session Summary • Native JavaScript Issues • CoffeeScript: The Good Parts • How to Get Started • Future / Alternatives • Conclusions @azat_co 43

  44. webapplog.com Discussion and Q&A Time Questions, thoughts and experiences? @azat_co 44

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend