Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Scala presentationjune112011


Published on

presented for JUG-C monthly meetup

Published in: Technology

Scala presentationjune112011

  1. 1. Introducing Scala By Prasanna Kumar JUG-C group meetup 11 June 2011
  2. 2. About me <ul><li>Java programmer turned Scala “enthusiast” </li></ul><ul><li>Started (learning) with scala very recently :-) </li></ul><ul><ul><li>Explored almost all the workaround to setup development environment for Scala </li></ul></ul><ul><li>Committer of Kandash project </li></ul><ul><ul><ul><li>- Kanban dashboard application </li></ul></ul></ul><ul><li>Reach me </li></ul><ul><li>Email : [email_address] </li></ul><ul><li>Twitter : @prassee </li></ul><ul><li>Blog : </li></ul>
  3. 3. Topic Covered <ul><li>What is Scala? </li></ul><ul><li>Why Scala? </li></ul><ul><li>Basics of Scala </li></ul><ul><li>Scala development environment </li></ul><ul><ul><li>(a small demo with Intellij IDEA & SBT) </li></ul></ul><ul><li>Scala Frameworks </li></ul><ul><li>Learning Resources </li></ul><ul><li>Recent News / updates </li></ul><ul><li>Questions ? </li></ul>
  4. 4. What is Scala
  5. 5. Brief History <ul><li>A JVM language </li></ul><ul><ul><li>Source code compiled in to .class file which can be deployed in to any JVM / Container </li></ul></ul><ul><ul><li>Blend of OOP and Functional OP </li></ul></ul><ul><li>Invented by Martin Odersky & Team </li></ul><ul><ul><li>Key developer behind Generics in Java </li></ul></ul><ul><ul><li>Created functional language called pizza </li></ul></ul><ul><ul><li>Under the incubation of EPFL </li></ul></ul><ul><ul><ul><li>(École Polytechnique Fédérale de Lausanne) ??? </li></ul></ul></ul>
  6. 6. Motivations <ul><li>Considered as the Java of the Feature !!!!!!!!! </li></ul><ul><li>Has many good features already which are much awaited or still under development in Java 7 , 8 ... etc </li></ul><ul><li>Increasingly becoming popular language </li></ul>
  7. 7. Who is using
  8. 8. Why Scala ? <ul><li>Comparatively less code (Less chance of introducing defects) </li></ul><ul><li>Modular code – (coz of imperative & functional model) </li></ul><ul><li>Maintainable code (easy to extend) </li></ul><ul><li>Less side effects (by following functional & less state agonistic code) </li></ul><ul><li>Seamless integration with Java </li></ul><ul><ul><li>Existing java code can be used in Scala – vice versa </li></ul></ul>
  9. 9. Basics of Scala
  10. 10. Hello World – first Scala program !!! object HelloWorld { def main(args: Array[String]) { println(&quot;Hello World&quot;) } } object HelloWorld e xtends Application { // no need of main method println(&quot;Hello World&quot;) } Output: Hello World
  11. 11. Programming Constructs
  12. 12. Variables Scala has two types of variables var & val Var – read write Val – read only Type inference val i=23 // inferred to int val str = “string” // inferred to int scala> val array: Array[String] = new Array(5) array: Array[String] = Array(null, null, null, null, null) scala> array = new Array(2) <console>:5: error: reassignment to val array = new Array(2)
  13. 13. Conditional Statements <ul><li>If statement follows the same syntax as with java , however if statements are expressions by themselves </li></ul><ul><ul><li>// normal usage </li></ul></ul><ul><ul><li>if(1>2) { </li></ul></ul><ul><li>println(&quot;1 is greater&quot;) </li></ul><ul><li>} else { </li></ul><ul><li>println(&quot;2 is greater&quot;) </li></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>// usage of if stmt as expressions </li></ul></ul><ul><ul><li>val xpr = if(1>2) { 1 } else { 2 } </li></ul></ul><ul><ul><li>println(&quot;result of if expr is &quot;+xpr) </li></ul></ul>
  14. 14. Loops <ul><li>For loops </li></ul><ul><ul><li>Much comprehended than java -> more flexibility </li></ul></ul><ul><ul><li>and functional agonistic </li></ul></ul><ul><ul><li>def forTest() { </li></ul></ul><ul><ul><li>val list = List(1,2,3,4) </li></ul></ul><ul><ul><li>for(valus<- list) { </li></ul></ul><ul><ul><li>print(valus) </li></ul></ul><ul><ul><li>// prints 1 2 3 4 </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>// prints 1 2 3 4 </li></ul></ul><ul><ul><li>list.foreach(print(_)) </li></ul></ul><ul><ul><li>// conditional if stmts inside for </li></ul></ul><ul><ul><li>for(numbs <- list if(numbs > 2)) { </li></ul></ul><ul><ul><li>println(&quot;numbers greater than 2 &quot; +numbs) </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>// multiple if stmts inside for </li></ul></ul><ul><ul><li>for(nums <- list if(nums >1); if(nums<4)) { </li></ul></ul><ul><ul><li>println(&quot;Filtered numbers&quot; + nums) </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>
  15. 15. While and do-While <ul><li>While loop also share the same syntax of java (or any other imperative language) </li></ul><ul><li>// while stmt </li></ul><ul><li>var a =0 </li></ul><ul><li>while(a<10) { </li></ul><ul><li>a =a +1 </li></ul><ul><li>println(a) </li></ul><ul><li>} </li></ul><ul><li>// do while stmt </li></ul><ul><li>var count = 0 </li></ul><ul><li>do { count += 1 println(count) </li></ul><ul><li>} while (count < 10) </li></ul>
  16. 16. First Class in Scala <ul><li>The first scala class </li></ul><ul><ul><li>// class declaration with default constructor </li></ul></ul><ul><ul><li>class Rational(n:Int,d:Int) { </li></ul></ul><ul><ul><li>val num = n // public by default </li></ul></ul><ul><ul><li>val den = d </li></ul></ul><ul><ul><li>/* auxillary constructor definitions */ </li></ul></ul><ul><ul><li>def this(n:Int) = this(n,1) // auxiallry constructor </li></ul></ul><ul><ul><li>/* method definitions */ </li></ul></ul><ul><ul><li>def +(that:Rational):Rational = new Rational(num*that.den + den*that.num ,den*that.den) </li></ul></ul><ul><ul><li>def +(i:Int):Rational = new Rational(num * i,den) </li></ul></ul><ul><ul><li>// override key word is mandatory while overridding methods </li></ul></ul><ul><ul><li>override def toString = num + &quot;/&quot; + den </li></ul></ul><ul><ul><li>} </li></ul></ul>
  17. 17. Named & Default Parameters <ul><li>Parameters can be given default values </li></ul><ul><li>class Rational(n:Int,d:Int = 1) { </li></ul><ul><ul><li>...... </li></ul></ul><ul><ul><li>...... </li></ul></ul><ul><li>} </li></ul><ul><li>Rational(2) // use of default param </li></ul><ul><li>Rational(d=4,n=7) // order of param has changed still no impact due to named param </li></ul><ul><li>Avoid creating overloaded method (but only when necessary) </li></ul>
  18. 18. Case classes <ul><li>Scala's approach of pattern matching </li></ul><ul><li>very flexible </li></ul><ul><li>Elegant syntax </li></ul><ul><li>No need to create objects </li></ul><ul><li>Classes prefixed with 'case' keyword </li></ul><ul><li>case class Java(vers:String) { </li></ul><ul><li>override def version: String = &quot;1.6&quot; </li></ul><ul><li>// no need of braces for single line </li></ul><ul><li>} </li></ul><ul><li>// usage </li></ul><ul><li>case class Scala(vers:String) { </li></ul><ul><li>override def version: String = &quot;2.9.0&quot; </li></ul><ul><li>// no need of braces for single line </li></ul><ul><li>} </li></ul><ul><li>for (languages <- list) { </li></ul><ul><li>languages match { </li></ul><ul><li>case Java(&quot;1.6&quot;) => { </li></ul><ul><li>println(languages.version) </li></ul><ul><li>} </li></ul><ul><li>case Scala(&quot;2.9&quot;) => { </li></ul><ul><li>println(languages.version) </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  19. 19. Companion classes <ul><li>Scala's approach to static methods </li></ul><ul><li>Unlike Java Scala doesn't have static keyword </li></ul><ul><li>Classes can be created with the keyword 'object' methods inside such classes can be accessed without creating objects </li></ul><ul><li>object Printer { </li></ul><ul><li>def print(file:File) { </li></ul><ul><li>println(&quot;printing file&quot;) </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>Companion classes are those which shares the name of the originating class and has to exist in the same source file </li></ul><ul><li>Can be useful for creating factory classes </li></ul>
  20. 20. Traits <ul><li>Scala's approach to Interfaces (as in Java) </li></ul><ul><li>Unlike Java, Scala's traits can have implementation </li></ul><ul><li>Like final keyword in java Scala provides a key word called 'sealed' to define classes and traits to prevent inheritance. </li></ul><ul><li>- sealed class StringUtils { </li></ul><ul><li>… .... </li></ul><ul><li>} </li></ul><ul><li>trait IntSet { </li></ul><ul><li>def contains(x: Int): Boolean </li></ul><ul><li>def notContains(x: A) = !contains(x) </li></ul><ul><li>def add(x: Int): IntSet </li></ul><ul><li>} </li></ul><ul><li>object EmptySet extends IntSet { </li></ul><ul><li>def contains(x: Int): Boolean = false </li></ul><ul><li>def add(x: Int): IntSet = new NonEmptySet(x, EmptySet, EmptySet) </li></ul><ul><li>} </li></ul><ul><li>class NonEmptySet(elem: Int, left: IntSet, right: IntSet) extends IntSet { </li></ul><ul><li>def contains(x: Int): Boolean = if (x < elem) left contains x else if (x > elem) right contains x else true </li></ul><ul><li>def add(x: Int): IntSet = if (x < elem) new NonEmptySet(elem, left add x, right) else if (x > elem) new NonEmptySet(elem, left, right add x) else this </li></ul><ul><li>} </li></ul>
  21. 21. Packages <ul><li>// unlike java import stmts are relative to java </li></ul><ul><li>// and independent of physical location </li></ul><ul><li>package org { </li></ul><ul><li>package jugc { </li></ul><ul><li>import scalatweet.Tweeter </li></ul><ul><li>// imports are relative </li></ul><ul><li>class TweeterClient { </li></ul><ul><li>val tweeter = new Tweeter(); </li></ul><ul><li>tweeter.findAllMyTweets(&quot;prassee&quot;) </li></ul><ul><li>} </li></ul><ul><li>package scala { </li></ul><ul><li>class ComClass1 { </li></ul><ul><li>def whereIam = &quot;org.jugc.scala.ComClass1&quot; </li></ul><ul><li>}}}} </li></ul><ul><li>package org.jugc.scala { </li></ul><ul><li>class ComClass2 { </li></ul><ul><li>def whereIam = &quot;org.jugc.scala.ComClass2&quot; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>package org.jugc.scalatweet { </li></ul><ul><li>class Tweeter { </li></ul><ul><li>def findAllMyTweets(userId: String): List[String] = List(&quot;gave a presentation on scala&quot;, &quot;blogged about scala&quot;) </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  22. 22. Exception Handling <ul><li>package org.jugc.scalatweet { </li></ul><ul><li>import{FileNotFoundException, FileReader} </li></ul><ul><li>class Tweeter { </li></ul><ul><li>def findAllMyTweets(userId: String): List[String] = List(&quot;gave a presentation on scala&quot;, &quot;blogged about scala&quot;) </li></ul><ul><li>def post(tweet:String) { </li></ul><ul><li>} </li></ul><ul><li>def postTweet() { </li></ul><ul><li>try { </li></ul><ul><li>val f = new FileReader(&quot;input.txt&quot;) </li></ul><ul><li> </li></ul><ul><li>} catch { </li></ul><ul><li>case ex:FileNotFoundException => { </li></ul><ul><li>throw new TweetPostException() </li></ul><ul><li>} </li></ul><ul><li>case ex:Exception => // handle exception thwow </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>class TweetPostException extends Exception { </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  23. 23. Scala's Type Heirachy
  24. 24. Setting up development environment <ul><li>Scala has plugins for </li></ul><ul><ul><li>Eclipse </li></ul></ul><ul><ul><li>Netbeans </li></ul></ul><ul><ul><li>Intellij IDEA </li></ul></ul><ul><ul><li>All the above have SBT integration (good news) !!! </li></ul></ul><ul><li>Case Study </li></ul><ul><li>Intellij IDEA </li></ul><ul><ul><li>Community edition (still a good IDE for kick starting with Scala development) </li></ul></ul><ul><ul><ul><li>(Not promoting IDEA in anyway) </li></ul></ul></ul><ul><ul><li>Over to demo session !!!! </li></ul></ul><ul><ul><li>Or </li></ul></ul><ul><ul><li>refer to my latest blog post </li></ul></ul><ul><ul><li>- Eclipse looks promising !!!!!! </li></ul></ul><ul><ul><li>My suggestion is to consider all the above 3 IDE's for development </li></ul></ul>
  25. 25. Frameworks <ul><li>There are lot of frameworks for Scala (like java) </li></ul><ul><li>Scala test – Unit testing </li></ul><ul><li>Specs - BDD </li></ul><ul><li>Akka - concurrency </li></ul><ul><li>Junit integration (seamless) </li></ul><ul><li>Lift for web 2.0 </li></ul><ul><li>Scalatra – templating engine </li></ul><ul><li>....... </li></ul><ul><li>A lot more !!!!!!! </li></ul>
  26. 26. Learning Resources <ul><li>Books </li></ul>The most prominent books for learning scala - from the source More books to come ......
  27. 27. Learning Resources <ul><li>Blogs </li></ul><ul><ul><li> </li></ul></ul><ul><ul><li> </li></ul></ul><ul><ul><li> </li></ul></ul><ul><ul><li>Create a blog for yourself </li></ul></ul><ul><ul><li>Tweet about it !!! </li></ul></ul><ul><ul><li>JUG-C google groups !!! </li></ul></ul><ul><li>Effective use of Stack Overflow </li></ul><ul><ul><li>Ask questions </li></ul></ul><ul><ul><li>Answering questions </li></ul></ul><ul><ul><ul><li>Quuick response </li></ul></ul></ul><ul><ul><ul><li>Professional community </li></ul></ul></ul><ul><ul><ul><li>Open to opinions </li></ul></ul></ul>
  28. 28. Learning levels <ul><li>Have levels for your self while learning the language this really helps !!!! </li></ul><ul><li>Level A1: Beginning application programmer </li></ul><ul><li>Java-like statements and expressions: standard operators, method calls, conditionals, loops, try/catch </li></ul><ul><li>class, object, def, val, var, import, package </li></ul><ul><li>Infix notation for method calls </li></ul><ul><li>Simple closures </li></ul><ul><li>Collections with map, filter, etc </li></ul><ul><li>for-expressions </li></ul><ul><li>Level A2: Intermediate application programmer </li></ul><ul><li>Pattern matching </li></ul><ul><li>Trait composition </li></ul><ul><li>Recursion, in particular tail recursion </li></ul><ul><li>XML literals </li></ul><ul><li>Level A3: Expert application programmer </li></ul><ul><li>Folds, i.e. methods such as foldLeft, foldRight </li></ul><ul><li>Streams and other lazy data structures </li></ul><ul><li>Actors </li></ul><ul><li>Combinator parsers </li></ul><ul><li>Level L1: Junior library designer </li></ul><ul><li>Type parameters </li></ul><ul><li>Traits </li></ul><ul><li>Lazy vals </li></ul><ul><li>Control abstraction, currying </li></ul><ul><li>By-name parameters </li></ul><ul><li>Level L2: Senior library designer </li></ul><ul><li>Variance annotations </li></ul><ul><li>Existential types (e.g., to interface with Java wildcards) </li></ul><ul><li>Self type annotations and the cake pattern for dependency injection </li></ul><ul><li>Structural types (aka static duck typing) </li></ul><ul><li>Defining map/flatmap/withFilter for new kinds of for-expressions </li></ul><ul><li>Extractors </li></ul><ul><li>Level L3: Expert library designer </li></ul><ul><li>Early initializers </li></ul><ul><li>Abstract types </li></ul><ul><li>Implicit definitions </li></ul><ul><li>Higher-kinded types </li></ul>
  29. 29. Recent News updates <ul><li>Typesafe </li></ul><ul><ul><li>A company formed by Martin odersky and Jonas boner (Akka) </li></ul></ul><ul><ul><li>Launched a Typesafe stack </li></ul></ul><ul><ul><ul><li>A scala development stack – opensource !!! </li></ul></ul></ul><ul><ul><li>James Gosling !!! - inventor of java honoured with the post of member of advisory board </li></ul></ul><ul><ul><li>Lot of updates coming on </li></ul></ul><ul><li>Cloud foundry </li></ul><ul><ul><li>Launched by VMWare </li></ul></ul><ul><ul><li>Announed a PaaS service </li></ul></ul><ul><ul><li>Included support for Scala </li></ul></ul><ul><ul><ul><li> </li></ul></ul></ul><ul><li>JUG-C Initiatives </li></ul><ul><ul><li>Scalatweet a lift based web app under development </li></ul></ul><ul><ul><li>@scalatweet </li></ul></ul><ul><ul><li>Open for community participation </li></ul></ul>
  30. 30. Questions ?
  31. 31. Thank you !!!!!