Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Programación Funcional con Scala
Search
Rebecca
September 25, 2013
Programming
50
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Programación Funcional con Scala
Una charla por Quito Lambda
Rebecca
September 25, 2013
More Decks by Rebecca
See All by Rebecca
A Tale of Two Feature Flags
rsliter
0
410
Other Decks in Programming
See All in Programming
SREの越境 / SRE Collaboration
y0hgi
2
280
Verilogで学ぶCPU自作入門.pdf
uyuki234
8
3.4k
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.9k
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
140
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
200
カツオ、ご期待ください
suneo3476
0
100
Workers Cache を知る
syumai
0
270
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
110
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
270
一人だけ、Kiroが静止する日
hideg
0
130
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
220
すこし踏み込む CancellationToken
htkym
2
1.1k
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
280
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
340
Deep Space Network (abreviated)
tonyrice
0
320
The Pragmatic Product Professional
lauravandoore
37
7.5k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
670
Evolving SEO for Evolving Search Engines
ryanjones
0
300
Writing Fast Ruby
sferik
630
63k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
490
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Transcript
PF! Rebecca Sliter, ThoughtWorks @rebeccasliter! con! Scala!
utiliza el JVM!
static-typed! utiliza el JVM!
static-typed! orientado a objetos! utiliza el JVM!
static-typed! orientado a objetos?! utiliza el JVM!
static-typed! orientado a objetos! utiliza el JVM!
static-typed! funcional! orientado a objetos! utiliza el JVM!
static-typed! funcional! orientado a objetos! objeto-funcional! utiliza el JVM!
funcional! Qué hace! a este lenguaje?!
Funciones de orden superior! Funciones que tienen otra función como
parametro!
Funciones de orden superior! Funciones que tienen otra función como
parametro! Funciones que retornan una función!
Funciones de orden superior! object Almuerzo {! "def main(args: Array[String])
{! " "println( apply( postre, 50) )! "}! ! "def apply(f: Int => String, v: Int) = f(v)! ! "def postre(x: Int) = “Comi “ + x.toString() + “ frutas.”! }! !
Funciones de orden superior! Comi 50 frutas.! object Almuerzo {!
"def main(args: Array[String]) {! " "println( apply( postre, 50) )! "}! ! "def apply(f: Int => String, v: Int) = f(v)! ! "def postre(x: Int) = “Comi “ + x.toString() + “ frutas.”! }! !
Evaluación estricta! scala> val a = b + 1; val
b = 2;! a: Int = 1! b: Int = 2! ! !
Evaluación estricta! perezosa! scala> lazy val a = b +
1; lazy val b = 2;! a: Int = <lazy>! b: Int = <lazy>! ! scala> a! res1: Int = 3! ! scala> b! res1: Int = 2! ! !
Currying! scala> def add(a: Int)(b: Int) = a + b!
add: (a: Int)(b: Int)Int! !
Currying! scala> def add(a: Int)(b: Int) = a + b!
add: (a: Int)(b: Int)Int! ! scala> add(5)(6)! res1: Int = 11! !
Currying! scala> def add(a: Int)(b: Int) = a + b!
add: (a: Int)(b: Int)Int! ! scala> add(5)(6)! res1: Int = 11! ! scala> val addTen = add(10)_! addTen: Int => Int = <function>! !
Currying! scala> def add(a: Int)(b: Int) = a + b!
add: (a: Int)(b: Int)Int! ! scala> add(5)(6)! res1: Int = 11! ! scala> val addTen = add(10)_! addTen: Int => Int = <function>! ! scala> addTen(6)! res2: Int = 16!
Combinadores Funcionales! scala> val numeros = List(1,2,3)! numeros: List[Int] =
List(1, 2, 3)! ! scala> numeros.map((i: Int) => i * 3))! res1: List[Int] = List(3, 6, 9)! ! !
Combinadores Funcionales! scala> val numeros = List(1,2,3)! numeros: List[Int] =
List(1, 2, 3)! ! scala> numeros.partition(_ +1 == 3))! res1: (List[Int], List[Int]) = (List(2),List(1, 3))! ! !
Tipado estático!
Tipado estático! *la inferencia de tipos!
Tipado estático! *la inferencia de tipos! scala> val x :
Int = 1 + 2! x: Int = 3! ! ! !
Tipado estático! *la inferencia de tipos! scala> val x :
Int = 1 + 2! x: Int = 3! ! ! ! scala> val x = 1 + 2! x: Int = 3! ! ! !
Cuando la inferencia no funciona…! scala> def factorial(n: Int) =
{! | if (n == 0) 1! | else n * factorial(n – 1)! | }! ! ! <console>:1: error: recursive method factorial needs result type! else n * factorial(n – 1)! " " " " ^! ! !
Cuando la inferencia no funciona…! scala> def factorial(n: Int) =
{! | if (n == 0) 1! | else n * factorial(n – 1)! | }! ! scala> def factorial(n: Int) : Int = {! | if (n == 0) 1! | else n * factorial(n – 1)! | }! Factorial: (n: Int)Int! ! !
orientado a objetos! funcional! objeto-funcional!
orientado a objetos! objeto-funcional! funcional!
orientado a objetos! Qué hace! a este lenguaje?!
Traits! Colecciones de fields y comportamientos que pueden extend o
mixin a sus clases. !
trait Pelicula {! "val tipo: String ! } ! !
Traits!
trait Pelicula {! "val tipo: String ! } ! !
class Comedia extends Pelicula {! "val tipo = “comedia”! }! ! Traits!
trait Pelicula {! "val tipo: String! } ! ! class
Comedia extends Pelicula with Tiempo {! "val tipo = “comedia”! "val longitud = 90! }! ! Traits! trait Tiempo {! "val longitud: Int! } ! !
Modules!
Recursos! Scala docs: docs.scala-lang.org! Simply Scala: simplyscala.com! Scala School: twitter.github.io/scala_school!
$ sbt console! !