Three languages                         in thirty minutes or so...                                                Bossa - ...
Three languages    Who are we?              • Fabio   Marinelli                        •   Project manager @ Poste Italian...
Three languages    Why this challenge?              More languages means:                       • Right tool for your prob...
Three languages    How we do this? Let us talk about ...                                                 Variables        ...
Javascript                               Fabio Marinelli                                           Bossa - Dessì - Marinel...
Javascript - Variables    • Loosely typed language    • Types: number, string, boolean, function and object    • Everythin...
Javascript - Variables    Declare and initialize:    var a;    var a = 1; //number    var a = “string”;    var a = ‘string...
Javascript - Variables      False values:              • false              •   null              •   undefined           ...
Javascript - Flow control                       Is this C?                       if (expression) { ... } else { ... }     ...
Javascript - Data structures                       Javascript object is a mutable key-value map.                       var...
Javascript - Objects and functions                       Functions are first class objects                       var numbe...
Javascript - Objects and functions                       Functions has access to context in which they are created        ...
Javascript - Objects and functions                       Let’s use the closure.                       var Foo = function()...
Javascript - Objects and functions                       Javascript is a prototypal language                       var Foo...
Javascript - Objects and functions                       Developer can add responsibilities to any object                 ...
Javascript - Concurrency                       • Specification says nothing about concurrency                       • Brow...
Javascript - Concurrency                                             Node.js                       var sys = require("sys"...
Javascript - Concurrency                                            ...output                       hello                 ...
Clojure                            Sergio Bossa                                     Bossa - Dessì - Marinellivenerdì 4 mar...
Clojure - Three Words                                    Homoiconic                                     Functional        ...
Clojure - Basics                       From “Programming Clojure”, by Stuart Halloway:                            Form    ...
Clojure - Functions (Definition)                                         Standard                       (defn my-fun [name...
Clojure - Functions (Invocation)                                           Standard                                       ...
Clojure - Variables (Basics)                                   Namespace-scoped                                (def my-var...
Clojure - Variables (Destructuring)                                             Definition                       (defn my-...
Clojure - Control Structures (Conditionals)                                     Single choice                             ...
Clojure - Control Structures (Loops)                                              NO FOR LOOPS                            ...
Clojure - Data Structures (Concepts)                         Everything is (treated as) a Sequence                        ...
Clojure - Data structures (Basics)                                               Essentials                               ...
Clojure - Concurrency (Concepts)                                    Explicit support                                      ...
Clojure - Concurrency (Coordinated)                                     References (aka STM)                       (def pe...
Clojure - Concurrency (Uncoordinated)                                             Atoms                       (def person ...
Clojure - Concurrency (Asynchronous)                                             Agents                       (def person ...
Clojure - Final Words                                         KISS                                      Powerful          ...
Scala                          Massimiliano Dessì                                         Bossa - Dessì - Marinellivenerdì...
Scala variables                       Scala is a hybrid functional/object-oriented language.              Scala runs on th...
Scala variables    In functional programming, variables values are immutable, as        consequence of the mathematical or...
Variable declaration    An immutable “variable” its declared with val keyword (Value Object),       the reference can not ...
Control structures     Function and      if, while, for, try, match         in the base syntax, higher-level control     s...
Control structures    • Closure       var factor = 3       val multiplier = (i:Int) => i * factor    • For Comphresion    ...
Control structures    • Composition       val f = (x: Int) => x + 1       val g = (x: Int) => x * 3.3       val h = (x: Do...
Control structures    • Precondition       class Rational(n: Int, d: Int) {            require(d != 0) ….       }    • Fil...
Specification    class ElementSpec extends FlatSpec with ShouldMatchers {         "A UniformElement" should         "have ...
Collection    • Sequences (List, Array, ListBuffer) Immutable and mutable    • Set and Maps Immutable and mutable    • Tup...
Concurrency    • Actor and messages    class McQueen extends Actor {             loop {                   react {         ...
Concurrency    Actors can receive any sort of object as a message    val fussyActor = actor {         loop {              ...
Concurrency    A strategy to keep your Actor-based code asynchronous is the use of futures    A future is a placeholder ob...
Trait    Traits are like interfaces in Java, but they can also have method       implementations and even fields.    Objec...
Now ... what?!?!                            Quick (really!) start                                              Bossa - Des...
Quickstart - Javascript    • Download and install Nodejs.    • Write your first example.js        var sys = require("sys")...
Quickstart - Clojure                                     Download JDK >= 5.x and Clojure jars                  http://www....
Quickstart - Scala              The SBT can be used for Scala projects as Maven for Java Projects. SBT enable             ...
Quickstart - Scala              1) Download JDK >= 5.x (and set the env vars) http://www.oracle.com              2) Downlo...
References                               Bossa - Dessì - Marinellivenerdì 4 marzo 2011
References              • Javascript              •   Douglas Crockford (Javascript the good parts) http://www.crockford.c...
Upcoming SlideShare
Loading in...5
×

Three languages in thirty minutes

3,591

Published on

Codemotion 2011 slides by Bossa Sergio, Dessì Massimiliano, Marinelli Fabio

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,591
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
25
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Three languages in thirty minutes

  1. 1. Three languages in thirty minutes or so... Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  2. 2. Three languages Who are we? • Fabio Marinelli • Project manager @ Poste Italiane • twitter @fmarinelli • Sergio Bossa • Senior Software Engineer @ Bwin Italy • (Micro-)Blogger @sbtourist • Massimiliano Dessí • Architect/Developer @ Pronetics/Sourcesense • twitter @desmax74 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  3. 3. Three languages Why this challenge? More languages means: • Right tool for your problems • Different mindsets improve your problem solving skills • ... and it’s cool! Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  4. 4. Three languages How we do this? Let us talk about ... Variables Data structures Objects and Functions Flow control Concurrency Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  5. 5. Javascript Fabio Marinelli Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  6. 6. Javascript - Variables • Loosely typed language • Types: number, string, boolean, function and object • Everything is an Object • Function scoped!! Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  7. 7. Javascript - Variables Declare and initialize: var a; var a = 1; //number var a = “string”; var a = ‘string’; var a = true || false; var a = {name:{first:”Fabio”, last:”M.”}, age:33}; var a = function (text) { alert(text);}; Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  8. 8. Javascript - Variables False values: • false • null • undefined • empty string • 0 • NaN Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  9. 9. Javascript - Flow control Is this C? if (expression) { ... } else { ... } while (expression) { ... } do { ... } while (expression); for (initialization; condition; increment) { ... } for (name in object) { ... } try { ... } catch (variable) { ... } 9 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  10. 10. Javascript - Data structures Javascript object is a mutable key-value map. var object = { “name”: value, “other”: function (text) { alert(text); } }; Values can be also a function. Everything is an object. 10 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  11. 11. Javascript - Objects and functions Functions are first class objects var numbers = [1,5,2,12,7,9]; numbers.sort(function(a, b) { return a-b; }); //Output a sorted array //1,2,5,7,9,12 numbers.sort(function(a, b) { return b-a; }); //Output a sorted array //12,9,7,5,2,1 11 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  12. 12. Javascript - Objects and functions Functions has access to context in which they are created var counter = function (value) { return { getAndInc : function () { return value++; } }; }; var myCounter = counter(1); alert(myCounter.getAndInc()); // Output 1 alert(myCounter.getAndInc()); // Output 2 This is called closure 12 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  13. 13. Javascript - Objects and functions Let’s use the closure. var Foo = function() { var value = 1; //private to the function this.inc = function() { ++value; }; this.print = function() { alert(value); }; return this; }; var b = new Foo(); b.print(); //Output 1 b.inc(); b.print(); //Output 2 alert(b.value); //undefined 13 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  14. 14. Javascript - Objects and functions Javascript is a prototypal language var Foo = function() { this.value = 1; //public value return this; }; Foo.prototype.inc = function() { ++this.value; }; Foo.prototype.print = function() { alert(this.value); }; var b = new Foo(); b.print(); //Output 1 b.inc(); b.print(); //Output 2 14 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  15. 15. Javascript - Objects and functions Developer can add responsibilities to any object var b = 1; Number.prototype.inc = function() { return new Number(this+1); }; Number.prototype.print = function() { alert(this); }; b.print(); //Output 1 b.inc().print(); //Output 2 Again, everything is an object. 15 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  16. 16. Javascript - Concurrency • Specification says nothing about concurrency • Browser engine is single threaded • Node.js offers event model concurrency 16 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  17. 17. Javascript - Concurrency Node.js var sys = require("sys"); setTimeout(function () { sys.puts("world"); }, 1000); sys.puts("hello"); Evented model with non blocking I/O 17 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  18. 18. Javascript - Concurrency ...output hello after 1 second world 18 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  19. 19. Clojure Sergio Bossa Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  20. 20. Clojure - Three Words Homoiconic Functional Dynamic Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  21. 21. Clojure - Basics From “Programming Clojure”, by Stuart Halloway: Form Example(s) Boolean true, false Character a Keyword :tag, :doc List (1 2 3), (println “foo”) Map (:name “Bill”, :age 42) Nil nil Number 1, 4.2 Set #(:snap :crackle :pop) String “hello” Symbol user/foo, java.lang.String Vector [1 2 3] Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  22. 22. Clojure - Functions (Definition) Standard (defn my-fun [name] (println “Hello, ” name “!”)) Anonymous I (fn [name] (println “Hello, ” name “!”)) Anonymous II #(println “Hello, ” %1 “!”) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  23. 23. Clojure - Functions (Invocation) Standard (my-fun “Sergio”) Anonymous I ((fn [name] (println “Hello, ” name “!”)) “Sergio”) Anonymous II (#(println “Hello, ” %1 “!”) “Sergio”) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  24. 24. Clojure - Variables (Basics) Namespace-scoped (def my-variable “value”) Locally-scoped (let [my-variable “value”]) Use (println my-variable) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  25. 25. Clojure - Variables (Destructuring) Definition (defn my-fun [{name:name}] (println “Hello, ” name “!”)) Invocation (my-fun {:name “Sergio” :city “Rome”}) Result => Hello, Sergio! Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  26. 26. Clojure - Control Structures (Conditionals) Single choice (when (= n 0) “zero!”) Double choice (if (= n 0) “zero!” “not zero!”) Multiple choice (cond (< n 0) ‘less than zero!’ (= n 0) ‘zero!’ :else ‘greater than zero!’) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  27. 27. Clojure - Control Structures (Loops) NO FOR LOOPS (almost) Explicit recursion (defn sum-a [array] (loop [a array s 0] (if (empty? a) s (recur (rest a) (+ s (first a)))))) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  28. 28. Clojure - Data Structures (Concepts) Everything is (treated as) a Sequence Immutable (Possibly) Lazy Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  29. 29. Clojure - Data structures (Basics) Essentials first, rest, cons, conj, into Comprehension (for [m [1 2 3] n [4 5 6]] (+ m n)) Map/Reduce (reduce #(merge-with + %1 %2) (map #(hash-map %1 1) [‘pippo’ ‘pluto’ ‘pluto’])) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  30. 30. Clojure - Concurrency (Concepts) Explicit support Coordinated Uncoordinated Asynchronous Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  31. 31. Clojure - Concurrency (Coordinated) References (aka STM) (def person (ref {:name ‘Sergio Bossa’ :age 28})) Get @person Update (dosync (alter person conj {:age 29})) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  32. 32. Clojure - Concurrency (Uncoordinated) Atoms (def person (atom {:name ‘Sergio Bossa’ :age 28})) Get @person Update (swap! person conj {:age 29}) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  33. 33. Clojure - Concurrency (Asynchronous) Agents (def person (agent {:name ‘Sergio Bossa’ :age 28})) Get @person Update (send person conj {:age 29}) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  34. 34. Clojure - Final Words KISS Powerful Concurrent Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  35. 35. Scala Massimiliano Dessì Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  36. 36. Scala variables Scala is a hybrid functional/object-oriented language. Scala runs on the JVM and in- teroperates with all Java libraries. Scala is statically typed with inference Powerful language for designing internal DSLs (DSL In Action) Good for Event Driven Architecture/CQRS (Akka actors) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  37. 37. Scala variables In functional programming, variables values are immutable, as consequence of the mathematical orientation Immutability = no side effect No side effect = no shared state, better concurrency Scala allows you to decide whether a variable is immutable or not. Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  38. 38. Variable declaration An immutable “variable” its declared with val keyword (Value Object), the reference can not be changed, but the object itself can be modified. val myArray[String]:Array= new Array(3) array: Array[String] = Array(null, null, null) A mutable “variable” its declared with var keyword, You can assign a new value to a var as often as you want var price: Double = 100 price = 10 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  39. 39. Control structures Function and if, while, for, try, match in the base syntax, higher-level control structure other than these in the libraries •Function Functional programming is based on the behavior of functions in the mathematical sense, with all the implications that starting point implies. (x: Int) => x + 1 functions have no side effects When a function takes other functions as arguments or returns a function, it is called a higher- order function. List(1, 2, 3, 4, 5) reduceLeft { _ * _ } Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  40. 40. Control structures • Closure var factor = 3 val multiplier = (i:Int) => i * factor • For Comphresion val dogs = List("Lassie", "Rex", "Rin tin tin") for (dog <- dogs) println(dog) • Currying def add(x:Int) = (y:Int) => x + y println(add(2)(3)) val addCurried = curried(add _) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  41. 41. Control structures • Composition val f = (x: Int) => x + 1 val g = (x: Int) => x * 3.3 val h = (x: Double) => x + 0.1 val result = h compose g compose f • Pattern matching def factorial(i: BigInt): BigInt = i match { case _ if i == 1 => i case _ => i * factorial(i - 1) } Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  42. 42. Control structures • Precondition class Rational(n: Int, d: Int) { require(d != 0) …. } • Filtering for (file <- filesHere if file.getName.endsWith(".scala")) • Folding and reducing List(1,2,3,4,5,6) reduceLeft(_ + _) List(1,2,3,4,5,6).foldLeft(10)(_ * _) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  43. 43. Specification class ElementSpec extends FlatSpec with ShouldMatchers { "A UniformElement" should "have a width equal to the passed value" in { val ele = elem(x, 2, 3) ele.width should be (2) } it should "have a height equal to the passed value" in { val ele = elem(x, 2, 3) ele.height should be (3) } it should "throw an IAE if passed a negative width" in { evaluating { elem(x, -2, 3) } should produce [IllegalArgumentException] } } Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  44. 44. Collection • Sequences (List, Array, ListBuffer) Immutable and mutable • Set and Maps Immutable and mutable • Tuples, a tuple combines a fixed number of items together (1, "hello", Console) Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  45. 45. Concurrency • Actor and messages class McQueen extends Actor { loop { react { case "how many?" => { println("Ive got " + mailboxSize.toString + " messages in my mailbox.") } } } Every Actor has a mailbox in which messages sent to that Actor are queued Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  46. 46. Concurrency Actors can receive any sort of object as a message val fussyActor = actor { loop { receive { case s: String => println("I got a String: " + s) case i: Int => println("I got an Int: " + i.toString) case _ => println("I have no idea what I just got.") } } } fussyActor ! "hi there" fussyActor ! 23 fussyActor ! 3.33 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  47. 47. Concurrency A strategy to keep your Actor-based code asynchronous is the use of futures A future is a placeholder object for a value that hasn’t yet been returned from an asyn- chronous process the double-bang (!!) on Actor causes operation to return a future /** * Asynchronous message send. Send-and-receive eventually. Waits on a Future for the reply message. * If recevied within the Actor default timeout interval then it returns Some(result) and * if a timeout * has occured None. */ def !!(message: T): Box[R] Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  48. 48. Trait Traits are like interfaces in Java, but they can also have method implementations and even fields. Objects are constructed by mixin composition class Animal trait HasLegs class Frog extends Animal with Philosophical with HasLegs { override def toString = "green" } Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  49. 49. Now ... what?!?! Quick (really!) start Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  50. 50. Quickstart - Javascript • Download and install Nodejs. • Write your first example.js var sys = require("sys"); setTimeout(function () { sys.puts("world"); }, 1000); sys.puts("hello"); • Run example % node example.js • Or easily start node console by running % node-repl Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  51. 51. Quickstart - Clojure Download JDK >= 5.x and Clojure jars http://www.sun.com http://www.oracle.com http://clojure.org/downloads Download and install Leiningen build tool http://github.com/technomancy/leiningen $> lein self-install Start new project $> lein new my-project Start project REPL $> lein repl Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  52. 52. Quickstart - Scala The SBT can be used for Scala projects as Maven for Java Projects. SBT enable Dependency management. It support multiple project/subproject, and mixed project Scala/Java. It also has built-in support for generating Scaladocs and for testing with ScalaTest, Specs, and ScalaCheck. class Project(info: ProjectInfo) extends DefaultWebProject(info) with IdeaProject { lazy val scalaTest = "org.scalatest" % "scalatest" % "1.3" % "test" lazy val scalateCore = "org.fusesource.scalate" % "scalate-core" % "1.4.0" lazy val casbah = "com.mongodb.casbah" %% "casbah" % "2.0.3" lazy val salat = "com.novus" %% "salat" % "0.0.5" lazy val junit = "junit" % "junit" % "4.8.2" % "test" lazy val sfl4japi = "org.slf4j" % "slf4j-api" % "1.6.1" % "runtime" lazy val logback = "ch.qos.logback" % "logback-classic" % "0.9.27" val scalaTools = "Scala Tools Repository snapshot" at "http://nexus.scala-tools.org/content/ repositories/public/" } Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  53. 53. Quickstart - Scala 1) Download JDK >= 5.x (and set the env vars) http://www.oracle.com 2) Download Scala installer jar http://www.scala-lang.org/downloads and set the environment $SCALA_HOME (ie: /usr/local/share/scala) and $PATH:$SCALA_HOME/bin 3) Use scala with -shell -Intellij idea community with scala plugin - eclipse with scala plugin Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  54. 54. References Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  55. 55. References • Javascript • Douglas Crockford (Javascript the good parts) http://www.crockford.com/ • Nodejs http://nodejs.org/ • John Resig (JQuery, Pro Javascript and Javascript secrets books) http://ejohn.org/ • Clojure • Clojure Web Site: http://clojure.org • Clojure Online Docs: http://clojuredocs.org/ • Programming Clojure Book: http://pragprog.com/titles/shcloj/programming-clojure • Scala • Scala site : http://www.scala-lang.org • Scala docs: http://www.scala-lang.org/node/197 • Scala Books : http://www.scala-lang.org/node/959 Bossa - Dessì - Marinellivenerdì 4 marzo 2011
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×