Top Banner
Scala for the doubters Max Klyga
47

Scala for the doubters. Максим Клыга

Aug 12, 2015

Download

Software

Alina Dolgikh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Scala for the doubters. Максим Клыга

Scala for the doubtersMax Klyga

Page 2: Scala for the doubters. Максим Клыга

–James Gosling

“If����������� ������������������  I����������� ������������������  were����������� ������������������  to����������� ������������������  pick����������� ������������������  a����������� ������������������  language����������� ������������������  to����������� ������������������  use����������� ������������������  today����������� ������������������  other����������� ������������������  than����������� ������������������  Java,����������� ������������������  it����������� ������������������  

would����������� ������������������  be����������� ������������������  Scala.”����������� ������������������  

Page 3: Scala for the doubters. Максим Клыга

Scala

Page 4: Scala for the doubters. Максим Клыга

–James Iry, “A Brief, Incomplete, and Mostly Wrong History of Programming Languages”

“A����������� ������������������  drunken����������� ������������������  Martin����������� ������������������  Odersky����������� ������������������  sees����������� ������������������  a����������� ������������������  Reese's����������� ������������������  Peanut����������� ������������������  Butter����������� ������������������  Cup����������� ������������������  ad����������� ������������������  featuring����������� ������������������  somebody's����������� ������������������  peanut����������� ������������������  butter����������� ������������������  getting����������� ������������������  on����������� ������������������  somebody����������� ������������������  else's����������� ������������������  

chocolate����������� ������������������  and����������� ������������������  has����������� ������������������  an����������� ������������������  idea.����������� ������������������  He����������� ������������������  creates����������� ������������������  Scala,����������� ������������������  a����������� ������������������  language����������� ������������������  that����������� ������������������  unifies����������� ������������������  constructs����������� ������������������  from����������� ������������������  both����������� ������������������  object����������� ������������������  oriented����������� ������������������  and����������� ������������������  functional����������� ������������������  languages.����������� ������������������  This����������� ������������������  pisses����������� ������������������  off����������� ������������������  both����������� ������������������  groups����������� ������������������  and����������� ������������������  each����������� ������������������  promptly����������� ������������������  

declares����������� ������������������  jihad.”����������� ������������������  

Page 5: Scala for the doubters. Максим Клыга

Scala

OOP FP

Page 6: Scala for the doubters. Максим Клыга
Page 7: Scala for the doubters. Максим Клыга

Lightweight syntax

object Main extends Application { val phonebook = Map( "Alice" -> "212-34-56", "Bob" -> "265-43-21" ) phonebook += ("Carl" -> "298-76-54") println(phonebook("Alice"))

for (i <- 1 to 10) { println(i) } }

Scala

Page 8: Scala for the doubters. Максим Клыга

Lightweight syntax

public class Person {   private String firstName;   private String lastName;   String getFirstName() { return firstName; }   void setFirstName(String firstName) { this.firstName = firstName; }   String getLastName() { return lastName; }   void setLastName(String lastName) { this.lastName = lastName; }   int hashCode() { .... }   boolean equals(Object o) { .... } }

Java

Page 9: Scala for the doubters. Максим Клыга

Lightweight syntax

case class Person(var firstName:String, var lastName:String)

Scala

Page 10: Scala for the doubters. Максим Клыга

Lightweight syntax

boolean hasUpperCase = false; for (int i = 0; i < name.length(); ++i) { if (Character.isUpperCase(name.charAt(i))) { hasUpperCase = true; break; } }

Java

Page 11: Scala for the doubters. Максим Клыга

Lightweight syntax

val hasUpperCase = name.exists(_.isUpperCase)

Scala

Page 12: Scala for the doubters. Максим Клыга

Lightweight syntax

Predicate<Character> isUpperCase = new Predicate<Character>() { public Character apply(Character ch) { return Character.isUpperCase(ch); } }; boolean hasUpperCase = Iterables.any(Lists.charactersOf(name), isUpperCase);

Java + Guava

Page 13: Scala for the doubters. Максим Клыга

Lightweight syntax

Predicate<Character> isUpperCase = (ch) -> Character.isUpperCase(ch);

boolean hasUpperCase = Iterables.any(Lists.charactersOf(name), isUpperCase);

Java 8 + Guava

Page 14: Scala for the doubters. Максим Клыга

Lightweight syntax

boolean hasUpperCase = name.chars().anyMatch((ch) -> Character.isUpperCase(ch));

Java 8

Page 15: Scala for the doubters. Максим Клыга

Lightweight syntax

boolean hasUpperCase = name.chars().anyMatch((ch) -> Character.isUpperCase(ch));

Java 8

Scala

val hasUpperCase = name.exists(_.isUpperCase)

Page 16: Scala for the doubters. Максим Клыга

LambdasJava 8

•Can only access final variables •Cannot mutate variables in outer scope

Scala

•Can access any variables •Can mutate any accessible variables

Page 17: Scala for the doubters. Максим Клыга

TraitsJava 8

•Can define default methods in interfaces (Java 9 allows private methods)

•“Diamond” inheritance is forbidden

Scala

•No restrictions on method implementation •Method invocation chain determined by inheritance order

Page 18: Scala for the doubters. Максим Клыга

Composable

Everything is an expression

Page 19: Scala for the doubters. Максим Клыга

Composable

var x:Int if (…) { x = 10 } else { x = 0 }

Page 20: Scala for the doubters. Максим Клыга

Composable

val x = if (…) { 10 } else { 0 }

Page 21: Scala for the doubters. Максим Клыга

Composable

var x = List[Int]() for (i <- 1 to 10) { x = i :: x }

Page 22: Scala for the doubters. Максим Клыга

Composable

var x = for (i <- 1 to 10) { yield i }

Page 23: Scala for the doubters. Максим Клыга

Composable

Everything is an expression

if for while try match

Page 24: Scala for the doubters. Максим Клыга

Composable

Things nest

Page 25: Scala for the doubters. Максим Клыга

Composableimport com.dull.lib

class Eggs { import org.cool.lib

def bacon { import org.other.cool.lib … } }

Page 26: Scala for the doubters. Максим Клыга

Composableclass Eggs { def bacon { def inner(…) { def innerer { … } … } … } }

Page 27: Scala for the doubters. Максим Клыга

Pattern matchingabstract class ChatProtocol case class Message(userId:Int, text:String) case class Join(userId:Int, name:String) case class Leave(userId:Int)

command match { case Message(id, text) => println(s"${users(id)}: ${text}") case Join(id, name) => { users += (id, name) println(s"${name} joined") } case Leave(id) => { println(s"${users(id)} left") users -= id } }

Page 28: Scala for the doubters. Максим Клыга

REPLJava 9 will finally get it too

Page 29: Scala for the doubters. Максим Клыга
Page 30: Scala for the doubters. Максим Клыга

–Alan Perlis

“Syntactic����������� ������������������  sugar����������� ������������������  causes����������� ������������������  cancer����������� ������������������  of����������� ������������������  the����������� ������������������  semi-colons.”����������� ������������������  

Page 31: Scala for the doubters. Максим Клыга
Page 32: Scala for the doubters. Максим Клыга
Page 33: Scala for the doubters. Максим Клыга
Page 34: Scala for the doubters. Максим Клыга

Implicits

• Conversions

• Extension methods via Rich Interface Pattern

• Remove boilerplate code

Page 35: Scala for the doubters. Максим Клыга

Implicits

• Conversions

• Extension methods via Rich Interface Pattern

• Remove boilerplate code

Page 36: Scala for the doubters. Максим Клыга

Generic code

• Partial application

• Variance annotations

• Implicits

• Macros

Page 37: Scala for the doubters. Максим Клыга

With great power comes great responsibility

Page 38: Scala for the doubters. Максим Клыга

Sleep of reason produces monsters

Page 39: Scala for the doubters. Максим Клыга

Operator overloading abuse

val intermediateHandler = (:/(host, port) /  target <<? params >:> identity)

https://github.com/dispatch/reboot

def root = jsonObj | jsonArray

def jsonObj = "{" ~> repsep(objEntry, ",") <~ "}" ^^ { case vals:List[_] => JSONObject(Map(vals:_*)) }

def jsonArray = "[" ~> repsep(value, ",") <~ "]" ^^ { case vals:List[_] => JSONArray(vals) }

def objEntry = stringVal ~ (":" ~> value) ^^ { case x ~ y => (x, y) }

https://github.com/scala/scala-parser-combinators

Unicode operators in ScalaZ: ≠ ∋ ⇏ ★ ∅

Page 40: Scala for the doubters. Максим Клыга

Learning Scala will make you a better Java programmer

Page 41: Scala for the doubters. Максим Клыга

–Paul Graham

“you����������� ������������������  could����������� ������������������  get����������� ������������������  smarter����������� ������������������  programmers����������� ������������������  to����������� ������������������  work����������� ������������������  on����������� ������������������  a����������� ������������������  Python����������� ������������������  project����������� ������������������  than����������� ������������������  you����������� ������������������  could����������� ������������������  to����������� ������������������  work����������� ������������������  

on����������� ������������������  a����������� ������������������  Java����������� ������������������  project.”����������� ������������������  

Page 42: Scala for the doubters. Максим Клыга

The Python Paradox

Page 43: Scala for the doubters. Максим Клыга

The Scala Paradox

Page 44: Scala for the doubters. Максим Клыга
Page 45: Scala for the doubters. Максим Клыга

Java ❤ Scala

Page 46: Scala for the doubters. Максим Клыга

Java ❤ Scala

• Scala Maven plugin - http://davidb.github.io/scala-maven-plugin/

Page 47: Scala for the doubters. Максим Клыга

Questions

Max Klyga@Neku42