packagenl.devnology.workshopimportjava.util._classLearnALanguage(today: Calendar) extendsDevnology{ defwelcome(participants: List[Participant]) {participants.foreach(p => println("welcome" + p))  }  def facilitators() = {  Facilitator("SoemirnoKartosoewito")  ::   Facilitator("Jan Willem Tulp") :: Nil  }}
What’s the plan?Setup development environment (Eclipse + Scalaplugin)Form pair-programming pairsExplanation of basic concepts and syntaxLabs, labs, labs...... and of course: share knowledge!
Euh...Scala?Scala runs on JVM and .Net VMintegrates 100% with existing librarieshybrid language: both functional and OOstatically typed“everything is an object”...Immutability, Currying, Tuples, Closures, Higher Order Functions, etc....
Scala in the enterprise
Run Scala as...Interactive / REPL (Read Eval Print Loop): the scala command starts an interactive shellAs scriptCompiled: scalac command compiles Scala codeSee: http://www.scala-lang.org/node/166
Variables, Values & Type Inferencevarmsg = "welcome to ..." // msg is mutablemsg += " Devnology" msg = 3 // compiler error
Variables, Values & Type Inferencevalmsg = "welcome to ..." // msg is immutablemsg += " Devnology" // compiler errorval n : Int = 3 // explicit type declarationvalname : String = "John"
Functionsdef min(x: Int, y: Int) = if (x < y) x else y// equivalent:def invert(x: Int) = -x // last statement is return valuedef invert(x: Int) : Int = { return –x }Unit can be considered as java’s voidWatch out!def invert(x: Int) { // will return Unit, = is absent  -x}
Every operation is a function call1 + 2    is the same as1.+(2)“to” is not a keyword:  for (i <- 0 to 10) print(i)map containsKey ‘a’   is the same as      map.containsKey(‘a’)
Listsvalscores = List(1, 2, 3) // immutablevalextraScores: List[Int] = 4 :: 5 :: 6 :: Nil// allScores = List(1, 2, 3, 4, 5, 6)// scores = List(1, 2, 3)// extraScores = List(4, 5, 6)valallScores = scores ::: extraScoresvalevenMoreScores = 7 :: allScoresNil is synonym for empty list
Foreachvalscores = List(1, 2, 3)// equivalentscores.foreach((n: Int) => println(n))scores.foreach(n => println(n))scores.foreach(println)
For comprehensionsvalscores = List(1, 2, 3)for (s <- scores)println(s)for (s <- scores if s > 1)println(s)
Arraysvalnames = Array("John", "Jane")names(0) = "Richard" // Arrays are mutableval cities = new Array[String](2)cities(0) = "Amsterdam"cities(1) = "Rotterdam"for (i <- 0 to 1)println(cities(i))
Mapsvaltowns = Map("John" -> "Amsterdam", "Jane" -> "Rotterdam") // default immutable Mapvar a = towns("John") // returns "Amsterdam"a = towns get "John”// returns Some(Amsterdam)a = towns get "John"get // returns "Amsterdam"var r = towns("Bill") // throws NoSuchElementExceptionr = towns get "Bill”// returns Nonetowns.update("John", "Delft") // returns a new Map
Classes & Constructorsclass Person(name: String, age: Int) {if (age < 0) thrownewIllegalArgumentExceptiondefsayHello() { println("Hello, " + name) }}class Person(name: String, age: Int) {require (age >= 0)defsayHello() { println("Hello, " + name) }}
Classes & Constructorsclass Person(name: String, age: Int) {def this(name: String) = this(name, 21) // auxiliarydef this(age: Int) = this(“John”, age) // auxiliarydef this() = this(“John”, 21) // auxiliary}
Classes & Constructorsclass Person(name: String, age: Int)...val p = new Person("John", 33)val a = p.age// compiler errorp.name = "Richard" // compiler errorclass Person(var name: String, val age: Int)
Companion Objects// must be declared in same file as Person classobject Person {defprintName = println("John")}valp = Person // Singleton is also an objectPerson.printName// similar to static methods in Java/C#
Traitstrait Student {varage = 10;  def greet() = {"Hello teacher!"  }  def study(): String // abstract method}
Extending Traitsclass FirstGrader extends Student {  override def greet() = {"Hello amazing teacher!"  }  override def study(): String = {“I am studying really hard!"  }}
Trait Mixin// compiler error: abstract function study from trait Student is not implementedvaljohn = new Person with StudenttraitSimpleStudent {def greet() = "Hello amazing teacher!"}// this is okval john = new Person withSimpleStudentprintln(john.greet())
Scala Applicationobject Person  def main(args: Array[String]) { // define a main method    for (arg <- args)println("Hello " + arg)  }}// or extend Application traitobject Person extends Application {   for (name <- List("John", "Jane")) println("Hello " + name)}
Pattern Matchingvalcolor = if (args.length > 0) args(0) else ""valfruit match {case"red"=>"apple"case"orange" =>"orange"case"yellow" =>"banana"case_ => "yuk!"}
Case Classescase class Var(name: String) extendsExprval v = Var("sum")adds a Factory method with the name of the classall parameters implicitly get a val prefix, so they are maintained as fields“natural” implementation of toString, hashCode and equalsbig advantage: support pattern matching
Exceptionstry {args(0).toFloat} catch {  case ex: NumberFormatException => println("Oops!")}
Tuplesvalpair = ("John", 28) // Tuple2[String, Int]println(pair._1)println(pair._2)def divProd(x: Int, y:Int) = (x / y, x * y)valdp = divProd(10, 2)println(pair._1) // 5println(pair._2) // 20
LABS!!Resources:http://www.scala-lang.org/apihttp://scala-tools.org/scaladocs/scala-library/2.7.1/http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugeeshttp://blogs.sun.com/sundararajan/entry/scala_for_java_programmers
THANK YOU!

More Related Content

PPT
Php Chapter 2 3 Training
PDF
Haxe: What Makes It Cool
PDF
The Death of Final Tagless
PDF
Scalaz 8: A Whole New Game
PPT
Scala for Java Developers
PDF
High Wizardry in the Land of Scala
PPTX
Practically Functional
PDF
PHP Unit 3 functions_in_php_2
Php Chapter 2 3 Training
Haxe: What Makes It Cool
The Death of Final Tagless
Scalaz 8: A Whole New Game
Scala for Java Developers
High Wizardry in the Land of Scala
Practically Functional
PHP Unit 3 functions_in_php_2

What's hot (20)

PDF
Scala Intro
PPTX
Scala Back to Basics: Type Classes
PDF
Anonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
PPTX
Intro to Functional Programming in Scala
PDF
Demystifying functional programming with Scala
PPTX
PHP Functions & Arrays
PDF
Introduction To Scala
KEY
Scala for ruby programmers
PPTX
Object-Oriented Programming with PHP (part 1)
PPTX
Scala fundamentals
PDF
Refactoring Functional Type Classes
PPTX
Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...
PDF
First-Class Patterns
PDF
A bit about Scala
PPTX
Introduction in php part 2
PPT
Scala uma poderosa linguagem para a jvm
PDF
O CPAN tem as ferramentas que você precisa para fazer TDD em Perl, o Coding D...
PDF
Sorting arrays in PHP
PDF
Being functional in PHP
PDF
Scala for Jedi
Scala Intro
Scala Back to Basics: Type Classes
Anonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
Intro to Functional Programming in Scala
Demystifying functional programming with Scala
PHP Functions & Arrays
Introduction To Scala
Scala for ruby programmers
Object-Oriented Programming with PHP (part 1)
Scala fundamentals
Refactoring Functional Type Classes
Php mysql classes in navi-mumbai,php-mysql course provider-in-navi-mumbai,bes...
First-Class Patterns
A bit about Scala
Introduction in php part 2
Scala uma poderosa linguagem para a jvm
O CPAN tem as ferramentas que você precisa para fazer TDD em Perl, o Coding D...
Sorting arrays in PHP
Being functional in PHP
Scala for Jedi
Ad

Viewers also liked (6)

PDF
Cercapaz compendio de_oientaciones para la paz
PDF
Handboek KVO
PPTX
Great marketing can save the world
PDF
(a hopefully fairly painless introduction to) Linked Open Data
PDF
Onderzoek onderpresteren 'motiveren leidt tot beter presteren'
PDF
Eindverslag stage Wellness Center Maassluis
Cercapaz compendio de_oientaciones para la paz
Handboek KVO
Great marketing can save the world
(a hopefully fairly painless introduction to) Linked Open Data
Onderzoek onderpresteren 'motiveren leidt tot beter presteren'
Eindverslag stage Wellness Center Maassluis
Ad

Similar to Scala: Devnology - Learn A Language Scala (20)

PPT
Scala presentation by Aleksandar Prokopec
ODP
Scala introduction
PPTX
A Brief Intro to Scala
PPTX
Scala en
PPT
JBUG 11 - Scala For Java Programmers
PPTX
Scala - where objects and functions meet
PDF
Scala for Java Developers (Silicon Valley Code Camp 13)
PPT
Scala introduction
PPTX
Softshake 2013: 10 reasons why java developers are jealous of Scala developers
PDF
ハイブリッド言語Scalaを使う
ODP
PPTX
Scala in a Java 8 World
PPTX
Qcon2011 functions rockpresentation_scala
PDF
PPT
Scala presentationjune112011
PDF
Pragmatic Real-World Scala (short version)
PDF
Pragmatic Real-World Scala
PDF
Scala collections api expressivity and brevity upgrade from java
PDF
Scala or functional programming from a python developer's perspective
PPT
SDC - Einführung in Scala
Scala presentation by Aleksandar Prokopec
Scala introduction
A Brief Intro to Scala
Scala en
JBUG 11 - Scala For Java Programmers
Scala - where objects and functions meet
Scala for Java Developers (Silicon Valley Code Camp 13)
Scala introduction
Softshake 2013: 10 reasons why java developers are jealous of Scala developers
ハイブリッド言語Scalaを使う
Scala in a Java 8 World
Qcon2011 functions rockpresentation_scala
Scala presentationjune112011
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala
Scala collections api expressivity and brevity upgrade from java
Scala or functional programming from a python developer's perspective
SDC - Einführung in Scala

Recently uploaded (20)

PPTX
Internet of Everything -Basic concepts details
PPTX
AI-driven Assurance Across Your End-to-end Network With ThousandEyes
PDF
The-Future-of-Automotive-Quality-is-Here-AI-Driven-Engineering.pdf
PDF
Connector Corner: Transform Unstructured Documents with Agentic Automation
PPTX
Module 1 Introduction to Web Programming .pptx
PDF
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
PDF
SaaS reusability assessment using machine learning techniques
PDF
Planning-an-Audit-A-How-To-Guide-Checklist-WP.pdf
PDF
Electrocardiogram sequences data analytics and classification using unsupervi...
PPTX
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
PDF
Aug23rd - Mulesoft Community Workshop - Hyd, India.pdf
PPTX
SGT Report The Beast Plan and Cyberphysical Systems of Control
PPTX
Training Program for knowledge in solar cell and solar industry
PDF
Transform-Your-Supply-Chain-with-AI-Driven-Quality-Engineering.pdf
PDF
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
PDF
Early detection and classification of bone marrow changes in lumbar vertebrae...
PDF
LMS bot: enhanced learning management systems for improved student learning e...
PDF
Transform-Your-Factory-with-AI-Driven-Quality-Engineering.pdf
PDF
A symptom-driven medical diagnosis support model based on machine learning te...
PDF
Rapid Prototyping: A lecture on prototyping techniques for interface design
Internet of Everything -Basic concepts details
AI-driven Assurance Across Your End-to-end Network With ThousandEyes
The-Future-of-Automotive-Quality-is-Here-AI-Driven-Engineering.pdf
Connector Corner: Transform Unstructured Documents with Agentic Automation
Module 1 Introduction to Web Programming .pptx
The-2025-Engineering-Revolution-AI-Quality-and-DevOps-Convergence.pdf
SaaS reusability assessment using machine learning techniques
Planning-an-Audit-A-How-To-Guide-Checklist-WP.pdf
Electrocardiogram sequences data analytics and classification using unsupervi...
GROUP4NURSINGINFORMATICSREPORT-2 PRESENTATION
Aug23rd - Mulesoft Community Workshop - Hyd, India.pdf
SGT Report The Beast Plan and Cyberphysical Systems of Control
Training Program for knowledge in solar cell and solar industry
Transform-Your-Supply-Chain-with-AI-Driven-Quality-Engineering.pdf
CXOs-Are-you-still-doing-manual-DevOps-in-the-age-of-AI.pdf
Early detection and classification of bone marrow changes in lumbar vertebrae...
LMS bot: enhanced learning management systems for improved student learning e...
Transform-Your-Factory-with-AI-Driven-Quality-Engineering.pdf
A symptom-driven medical diagnosis support model based on machine learning te...
Rapid Prototyping: A lecture on prototyping techniques for interface design

Scala: Devnology - Learn A Language Scala

  • 1. packagenl.devnology.workshopimportjava.util._classLearnALanguage(today: Calendar) extendsDevnology{ defwelcome(participants: List[Participant]) {participants.foreach(p => println("welcome" + p)) } def facilitators() = { Facilitator("SoemirnoKartosoewito") :: Facilitator("Jan Willem Tulp") :: Nil }}
  • 2. What’s the plan?Setup development environment (Eclipse + Scalaplugin)Form pair-programming pairsExplanation of basic concepts and syntaxLabs, labs, labs...... and of course: share knowledge!
  • 3. Euh...Scala?Scala runs on JVM and .Net VMintegrates 100% with existing librarieshybrid language: both functional and OOstatically typed“everything is an object”...Immutability, Currying, Tuples, Closures, Higher Order Functions, etc....
  • 4. Scala in the enterprise
  • 5. Run Scala as...Interactive / REPL (Read Eval Print Loop): the scala command starts an interactive shellAs scriptCompiled: scalac command compiles Scala codeSee: http://www.scala-lang.org/node/166
  • 6. Variables, Values & Type Inferencevarmsg = "welcome to ..." // msg is mutablemsg += " Devnology" msg = 3 // compiler error
  • 7. Variables, Values & Type Inferencevalmsg = "welcome to ..." // msg is immutablemsg += " Devnology" // compiler errorval n : Int = 3 // explicit type declarationvalname : String = "John"
  • 8. Functionsdef min(x: Int, y: Int) = if (x < y) x else y// equivalent:def invert(x: Int) = -x // last statement is return valuedef invert(x: Int) : Int = { return –x }Unit can be considered as java’s voidWatch out!def invert(x: Int) { // will return Unit, = is absent -x}
  • 9. Every operation is a function call1 + 2 is the same as1.+(2)“to” is not a keyword: for (i <- 0 to 10) print(i)map containsKey ‘a’ is the same as map.containsKey(‘a’)
  • 10. Listsvalscores = List(1, 2, 3) // immutablevalextraScores: List[Int] = 4 :: 5 :: 6 :: Nil// allScores = List(1, 2, 3, 4, 5, 6)// scores = List(1, 2, 3)// extraScores = List(4, 5, 6)valallScores = scores ::: extraScoresvalevenMoreScores = 7 :: allScoresNil is synonym for empty list
  • 11. Foreachvalscores = List(1, 2, 3)// equivalentscores.foreach((n: Int) => println(n))scores.foreach(n => println(n))scores.foreach(println)
  • 12. For comprehensionsvalscores = List(1, 2, 3)for (s <- scores)println(s)for (s <- scores if s > 1)println(s)
  • 13. Arraysvalnames = Array("John", "Jane")names(0) = "Richard" // Arrays are mutableval cities = new Array[String](2)cities(0) = "Amsterdam"cities(1) = "Rotterdam"for (i <- 0 to 1)println(cities(i))
  • 14. Mapsvaltowns = Map("John" -> "Amsterdam", "Jane" -> "Rotterdam") // default immutable Mapvar a = towns("John") // returns "Amsterdam"a = towns get "John”// returns Some(Amsterdam)a = towns get "John"get // returns "Amsterdam"var r = towns("Bill") // throws NoSuchElementExceptionr = towns get "Bill”// returns Nonetowns.update("John", "Delft") // returns a new Map
  • 15. Classes & Constructorsclass Person(name: String, age: Int) {if (age < 0) thrownewIllegalArgumentExceptiondefsayHello() { println("Hello, " + name) }}class Person(name: String, age: Int) {require (age >= 0)defsayHello() { println("Hello, " + name) }}
  • 16. Classes & Constructorsclass Person(name: String, age: Int) {def this(name: String) = this(name, 21) // auxiliarydef this(age: Int) = this(“John”, age) // auxiliarydef this() = this(“John”, 21) // auxiliary}
  • 17. Classes & Constructorsclass Person(name: String, age: Int)...val p = new Person("John", 33)val a = p.age// compiler errorp.name = "Richard" // compiler errorclass Person(var name: String, val age: Int)
  • 18. Companion Objects// must be declared in same file as Person classobject Person {defprintName = println("John")}valp = Person // Singleton is also an objectPerson.printName// similar to static methods in Java/C#
  • 19. Traitstrait Student {varage = 10; def greet() = {"Hello teacher!" } def study(): String // abstract method}
  • 20. Extending Traitsclass FirstGrader extends Student { override def greet() = {"Hello amazing teacher!" } override def study(): String = {“I am studying really hard!" }}
  • 21. Trait Mixin// compiler error: abstract function study from trait Student is not implementedvaljohn = new Person with StudenttraitSimpleStudent {def greet() = "Hello amazing teacher!"}// this is okval john = new Person withSimpleStudentprintln(john.greet())
  • 22. Scala Applicationobject Person def main(args: Array[String]) { // define a main method for (arg <- args)println("Hello " + arg) }}// or extend Application traitobject Person extends Application { for (name <- List("John", "Jane")) println("Hello " + name)}
  • 23. Pattern Matchingvalcolor = if (args.length > 0) args(0) else ""valfruit match {case"red"=>"apple"case"orange" =>"orange"case"yellow" =>"banana"case_ => "yuk!"}
  • 24. Case Classescase class Var(name: String) extendsExprval v = Var("sum")adds a Factory method with the name of the classall parameters implicitly get a val prefix, so they are maintained as fields“natural” implementation of toString, hashCode and equalsbig advantage: support pattern matching
  • 25. Exceptionstry {args(0).toFloat} catch { case ex: NumberFormatException => println("Oops!")}
  • 26. Tuplesvalpair = ("John", 28) // Tuple2[String, Int]println(pair._1)println(pair._2)def divProd(x: Int, y:Int) = (x / y, x * y)valdp = divProd(10, 2)println(pair._1) // 5println(pair._2) // 20