• Save
Scala presentationjune112011
Upcoming SlideShare
Loading in...5
×
 

Scala presentationjune112011

on

  • 3,474 views

presented for JUG-C monthly meetup

presented for JUG-C monthly meetup

Statistics

Views

Total Views
3,474
Slideshare-icon Views on SlideShare
2,788
Embed Views
686

Actions

Likes
3
Downloads
0
Comments
1

5 Embeds 686

http://www.jugchennai.in 662
url_unknown 17
http://www.linkedin.com 5
http://paper.li 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Concise and interesting presentation.
    How is Scala catching up in India?
    Do we have a large number of people using Scala?
    Rao, Xenovus
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Scala presentationjune112011 Scala presentationjune112011 Presentation Transcript

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