SlideShare a Scribd company logo
1 of 65
Download to read offline
Engineering Team Lead, Sharethrough

@kelleyrobinson
Demystifying Scala
Kelley Robinson
Demystifying Scala
📍Lausanne
Engineering Team Lead, Sharethrough
@kelleyrobinson
Demystifying Scala
Kelley Robinson
Engineering Team Lead, Sharethrough
@kelleyrobinson
Kelley Robinson
DEMYSTIFYING SCALA @KELLEYROBINSON
Why Scala
How to get started
Introduction to Scala
DEMYSTIFYING SCALA @KELLEYROBINSON
Why Scala
How to get started
Introduction to Scala
Ina Garten a.k.a.
The Barefoot Contessa
DEMYSTIFYING SCALA @KELLEYROBINSON
Syntax Intro
DEMYSTIFYING SCALA @KELLEYROBINSON
“How easy is that?”.isEmpty
// Boolean = false
val chefs = List("Ina", "Martha", "Giada")
// List[String] = List(Ina, Martha, Giada)
chefs(0)
// String = Ina
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
def isStoreBoughtFine(yourName: String): Boolean = {


val areYouAnyoneButIna = yourName != "Ina Garten"



areYouAnyoneButIna
}
Many ways to write a function...
DEMYSTIFYING SCALA @KELLEYROBINSON
def isStoreBoughtFine(yourName: String): Boolean = {


yourName != "Ina Garten"
}
Many ways to write a function...
DEMYSTIFYING SCALA @KELLEYROBINSON
def isStoreBoughtFine(yourName: String): Boolean =


yourName != "Ina Garten"
Many ways to write a function...
DEMYSTIFYING SCALA @KELLEYROBINSON
def isStoreBoughtFine(yourName: String) =


yourName != "Ina Garten"
Many ways to write a function...
DEMYSTIFYING SCALA @KELLEYROBINSON
def isStoreBoughtFine(yourName: String): Boolean =


"Ina Garten”
// error: type mismatch;
// found : String
// required: Boolean
Types provide safety
DEMYSTIFYING SCALA @KELLEYROBINSON
def isStoreBoughtFine(yourName: String): Boolean
// ok
isStoreBoughtFine(“Kelley")
// oh no!
isStoreBoughtFine(42)
// error: type mismatch;
// found : Int(42)
// required: String
Calling a function
DEMYSTIFYING SCALA @KELLEYROBINSON
val barefootContessa = "Ina Garten”


val barefootContessa = "Kelley Robinson"

// <console> error: barefootContessa is already defined
val yasKween = barefootContessa.toUpperCase
println(barefootContessa)
// Ina Garten
Data is immutable by default
DEMYSTIFYING SCALA @KELLEYROBINSON
Scala in a Nutshell
Object-Oriented
Meets Functional
Have the best of both worlds.
@KELLEYROBINSONDEMYSTIFYING SCALA
DEMYSTIFYING SCALA @KELLEYROBINSON
Functional Programming
DEMYSTIFYING SCALA @KELLEYROBINSON
FP: Everything is an expression
• think in values, not side-effects
• statement is an expression with Unit return type
FP: Avoid Side Effects
Changes outside of function scope
Modifies state
Not predictable
DEMYSTIFYING SCALA @KELLEYROBINSON
FP: Referential
transparency
An expression can be replaced by
its value without changing the
program behavior
DEMYSTIFYING SCALA @KELLEYROBINSON
FP: Immutable data
Avoid modifying state
DEMYSTIFYING SCALA @KELLEYROBINSON
FP: Expressions
The programmer benefits
Understanding
Predictability
Unit testing
DEMYSTIFYING SCALA @KELLEYROBINSON
SEAMLESS JAVA INTEROP TYPE INFERENCE CONCURRENCY & DISTRIBUTION
TRAITS PATTERN MATCHING HIGHER-ORDER FUNCTIONS
Scala in a Nutshell
DEMYSTIFYING SCALA @KELLEYROBINSON
Seamless Java Interop
All the benefits of the Java
Virtual Machine (JVM)
@KELLEYROBINSONDEMYSTIFYING SCALA
Type Inference
Let the type system
work for you
DEMYSTIFYING SCALA @KELLEYROBINSON
Traits
Flexible interfaces
@KELLEYROBINSONDEMYSTIFYING SCALA
DEMYSTIFYING SCALA @KELLEYROBINSON
trait CelebrityChef



trait FoodNetworkStar extends CelebrityChef {

val showName: String

}



trait BestSellingAuthor {

val bookName: String

}



object InaGarten extends FoodNetworkStar

with BestSellingAuthor {

val bookName: String = "Cooking for Jeffrey"

val showName: String = "Barefoot Contessa"

}
DEMYSTIFYING SCALA @KELLEYROBINSON
trait CelebrityChef



trait FoodNetworkStar extends CelebrityChef

object InaGarten extends FoodNetworkStar with BestSellingAuthor
object RoyChoi extends CelebrityChef
def learnToCook(instructor: CelebrityChef) = { ... }
Pattern Matching
“Switch” on steroids
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
def matchTest(x: Int): String =
x match {

case 1 => "one"

case 2 => "two"

case _ => "many"

}
println(matchTest(3))
// “many”
Pattern Matching
DEMYSTIFYING SCALA @KELLEYROBINSON
sealed trait Ingredient

case object Produce extends Ingredient

case object Meat extends Ingredient

case object DryGood extends Ingredient



def storageLocation(i: Ingredient): String =
i match {

case Produce => "Refrigerator"

case Meat => "Freezer"

case DryGood => "Pantry"

}
Pattern Matching
Higher-order
Functions
Be expressive and succinct
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
trait Ingredient { val shelfLife: Int }
Scala
val ingredients: Array[Ingredient]

val (eatNow, eatLater) = ingredients.partition(i => i.shelfLife < 7)
Java
List<Ingredient> ingredients;

List<Ingredient> eatNow = new ArrayList<Ingredient>(ingredients.size());

List<Ingredient> eatLater = new ArrayList<Ingredient>(ingredients.size());

for (Ingredient ingredient : ingredient) {

if (ingredient.getShelfLife() < 7)

eatNow.add(ingredient);

else

eatLater.add(ingredient);

}
DEMYSTIFYING SCALA @KELLEYROBINSON
trait Ingredient { val shelfLife: Int }
Scala
val ingredients: Array[Ingredient]

val (eatNow, eatLater) = ingredients.partition(i => i.shelfLife < 7)
Partition takes a function as its argument
def partition(p: Int => Boolean)
DEMYSTIFYING SCALA @KELLEYROBINSON
These are equivalent
partition(i => i.shelfLife < 7)
partition(_.shelfLife < 7)
underscore is a convenience operator
DEMYSTIFYING SCALA @KELLEYROBINSON
Why Scala
How to get started
Introduction to Scala
DEMYSTIFYING SCALA
http://downloads.typesafe.com/website/casestudies/Sharethrough-Case-Study-v1.0.pdf
@KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
“Sharethrough developers were quickly
productive with Scala, which can be
attributed to their familiarity with Java,
Scala’s expressiveness and lack of
boilerplate code.”
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA
https://twitter.com/kelleyrobinson/status/820426791433039872
@KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
https://meta.plasm.us/posts/2015/07/11/roll-your-own-scala/
Flexibility
requires
discipline
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA
https://twitter.com/chanian/status/462103684281671681
@KELLEYROBINSON
Sad truths
about Scala
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
Scala Functional Spectrum
Java Haskell
Sad truths about Scala
DEMYSTIFYING SCALA @KELLEYROBINSON
Sad truths about Scala
DEMYSTIFYING SCALA
Sad truths about Scala
@KELLEYROBINSON
// source code yikes
object Task {

implicit val taskInstance:
Nondeterminism[Task] with Catchable[Task]
with MonadError[({type λ[α,β] =
Task[β]})#λ,Throwable] = new
Nondeterminism[Task] with Catchable[Task]
with MonadError[({type λ[α,β] =
Task[β]})#λ,Throwable] { ... }
}
DEMYSTIFYING SCALA @KELLEYROBINSON
These are equivalent
partition(i => i.shelfLife < 7)
partition(_.shelfLife < 7)
underscore is a convenience operator
DEMYSTIFYING SCALA @KELLEYROBINSON
Symbolic operators
// this is valid code
def @*%--@&#&(foo: String): String = foo
// exists for this purpose
def +(s1: String, s2: String): String = s1.concat(s2)
“Modern” Functional
Programming is
cluttered with jargon
Sad truths about Scala
DEMYSTIFYING SCALA @KELLEYROBINSON
Scala is still
pretty awesome
DEMYSTIFYING SCALA @KELLEYROBINSON
Scala is still
pretty awesome
• Powerful
• Flexible
• Creative
DEMYSTIFYING SCALA @KELLEYROBINSON
DEMYSTIFYING SCALA @KELLEYROBINSON
Why Scala
How to get started
Introduction to Scala
Scala REPL
Core Language
https://www.scala-lang.org/download/install.html
@KELLEYROBINSONDEMYSTIFYING SCALA
DEMYSTIFYING SCALA @KELLEYROBINSON
Functional
Programming
Principles in Scala
Scala Center + Coursera
https://www.coursera.org/learn/progfun1
Scala Exercises
47 Degrees
https://www.scala-exercises.org/scala_tutorial/terms_and_types
@KELLEYROBINSONDEMYSTIFYING SCALA
ScalaBridge
Introductory programming
workshops for underrepresented
groups
• Curriculum is free and open source
• Teaching is a great way to learn
https://scalabridge.gitbooks.io/curriculum/content/setup/setup.html
$
@KELLEYROBINSONDEMYSTIFYING SCALA
• Don’t be intimidated
• Have fun
• Be disciplined
@KELLEYROBINSONDEMYSTIFYING SCALA
Thank You!
@kelleyrobinson
hello@krobinson.me

More Related Content

Similar to Demystifying Scala

Selenium-online-training
Selenium-online-trainingSelenium-online-training
Selenium-online-training
Raghav Arora
 
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with ScalaBuilding Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
WO Community
 

Similar to Demystifying Scala (20)

Selenium-online-training
Selenium-online-trainingSelenium-online-training
Selenium-online-training
 
Refactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 RecapRefactoring to Scala DSLs and LiftOff 2009 Recap
Refactoring to Scala DSLs and LiftOff 2009 Recap
 
Learn scala and it's componenents learn it
Learn scala and it's componenents learn itLearn scala and it's componenents learn it
Learn scala and it's componenents learn it
 
A Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to ScalaA Brief, but Dense, Intro to Scala
A Brief, but Dense, Intro to Scala
 
Scala in a wild enterprise
Scala in a wild enterpriseScala in a wild enterprise
Scala in a wild enterprise
 
Property-Based Testing for Services
Property-Based Testing for ServicesProperty-Based Testing for Services
Property-Based Testing for Services
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
slides-students-C03.pdf
slides-students-C03.pdfslides-students-C03.pdf
slides-students-C03.pdf
 
Why Functional Programming So Hard?
Why Functional Programming So Hard?Why Functional Programming So Hard?
Why Functional Programming So Hard?
 
Database Refactoring With Liquibase
Database Refactoring With LiquibaseDatabase Refactoring With Liquibase
Database Refactoring With Liquibase
 
Agile Database Development with Liquibase
Agile Database Development with LiquibaseAgile Database Development with Liquibase
Agile Database Development with Liquibase
 
What’s New in Rails 5.0?
What’s New in Rails 5.0?What’s New in Rails 5.0?
What’s New in Rails 5.0?
 
Scala final ppt vinay
Scala final ppt vinayScala final ppt vinay
Scala final ppt vinay
 
Scala Programming Introduction
Scala Programming IntroductionScala Programming Introduction
Scala Programming Introduction
 
Free The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own DomainFree The Enterprise With Ruby & Master Your Own Domain
Free The Enterprise With Ruby & Master Your Own Domain
 
Scala active record
Scala active recordScala active record
Scala active record
 
WHY JAVASCRIPT FUNCTIONAL PROGRAMMING IS SO HARD?
WHY JAVASCRIPT FUNCTIONAL PROGRAMMING IS SO HARD? WHY JAVASCRIPT FUNCTIONAL PROGRAMMING IS SO HARD?
WHY JAVASCRIPT FUNCTIONAL PROGRAMMING IS SO HARD?
 
Devoxx
DevoxxDevoxx
Devoxx
 
Scala in a nutshell
Scala in a nutshellScala in a nutshell
Scala in a nutshell
 
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with ScalaBuilding Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
 

More from Kelley Robinson

More from Kelley Robinson (20)

Protecting your phone verification flow from fraud & abuse
Protecting your phone verification flow from fraud & abuseProtecting your phone verification flow from fraud & abuse
Protecting your phone verification flow from fraud & abuse
 
Preventing phone verification fraud (SMS pumping)
Preventing phone verification fraud (SMS pumping)Preventing phone verification fraud (SMS pumping)
Preventing phone verification fraud (SMS pumping)
 
Auth on the web: better authentication
Auth on the web: better authenticationAuth on the web: better authentication
Auth on the web: better authentication
 
WebAuthn
WebAuthnWebAuthn
WebAuthn
 
Introduction to Public Key Cryptography
Introduction to Public Key CryptographyIntroduction to Public Key Cryptography
Introduction to Public Key Cryptography
 
2FA in 2020 and Beyond
2FA in 2020 and Beyond2FA in 2020 and Beyond
2FA in 2020 and Beyond
 
Identiverse 2020 - Account Recovery with 2FA
Identiverse 2020 - Account Recovery with 2FAIdentiverse 2020 - Account Recovery with 2FA
Identiverse 2020 - Account Recovery with 2FA
 
Designing customer account recovery in a 2FA world
Designing customer account recovery in a 2FA worldDesigning customer account recovery in a 2FA world
Designing customer account recovery in a 2FA world
 
Introduction to SHAKEN/STIR
Introduction to SHAKEN/STIRIntroduction to SHAKEN/STIR
Introduction to SHAKEN/STIR
 
Intro to SHAKEN/STIR
Intro to SHAKEN/STIRIntro to SHAKEN/STIR
Intro to SHAKEN/STIR
 
PSD2, SCA, WTF?
PSD2, SCA, WTF?PSD2, SCA, WTF?
PSD2, SCA, WTF?
 
Building a Better Scala Community
Building a Better Scala CommunityBuilding a Better Scala Community
Building a Better Scala Community
 
BSides SF - Contact Center Authentication
BSides SF - Contact Center AuthenticationBSides SF - Contact Center Authentication
BSides SF - Contact Center Authentication
 
Communication @ Startups
Communication @ StartupsCommunication @ Startups
Communication @ Startups
 
Contact Center Authentication
Contact Center AuthenticationContact Center Authentication
Contact Center Authentication
 
Authentication Beyond SMS
Authentication Beyond SMSAuthentication Beyond SMS
Authentication Beyond SMS
 
BSides PDX - Threat Modeling Authentication
BSides PDX - Threat Modeling AuthenticationBSides PDX - Threat Modeling Authentication
BSides PDX - Threat Modeling Authentication
 
SIGNAL - Practical Cryptography
SIGNAL - Practical CryptographySIGNAL - Practical Cryptography
SIGNAL - Practical Cryptography
 
2FA Best Practices
2FA Best Practices2FA Best Practices
2FA Best Practices
 
Practical Cryptography
Practical CryptographyPractical Cryptography
Practical Cryptography
 

Recently uploaded

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ssuser89054b
 
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.ppt
MsecMca
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
ankushspencer015
 
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Recently uploaded (20)

Intro To Electric Vehicles PDF Notes.pdf
Intro To Electric Vehicles PDF Notes.pdfIntro To Electric Vehicles PDF Notes.pdf
Intro To Electric Vehicles PDF Notes.pdf
 
Intze Overhead Water Tank Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank  Design by Working Stress - IS Method.pdfIntze Overhead Water Tank  Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank Design by Working Stress - IS Method.pdf
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leap
 
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
(INDIRA) Call Girl Meerut Call Now 8617697112 Meerut Escorts 24x7
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
 
Unit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfUnit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdf
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced LoadsFEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - V
 
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPT
 
Design For Accessibility: Getting it right from the start
Design For Accessibility: Getting it right from the startDesign For Accessibility: Getting it right from the start
Design For Accessibility: Getting it right from the start
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.ppt
 
Bhosari ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For ...
Bhosari ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For ...Bhosari ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For ...
Bhosari ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For ...
 
Block diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.pptBlock diagram reduction techniques in control systems.ppt
Block diagram reduction techniques in control systems.ppt
 
AKTU Computer Networks notes --- Unit 3.pdf
AKTU Computer Networks notes ---  Unit 3.pdfAKTU Computer Networks notes ---  Unit 3.pdf
AKTU Computer Networks notes --- Unit 3.pdf
 
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...Booking open Available Pune Call Girls Pargaon  6297143586 Call Hot Indian Gi...
Booking open Available Pune Call Girls Pargaon 6297143586 Call Hot Indian Gi...
 
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Ramesh Nagar Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar  ≼🔝 Delhi door step de...
Call Now ≽ 9953056974 ≼🔝 Call Girls In New Ashok Nagar ≼🔝 Delhi door step de...
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torque
 

Demystifying Scala