$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Programación Funcional con Scala
Search
Rebecca
September 25, 2013
Programming
0
46
Programación Funcional con Scala
Una charla por Quito Lambda
Rebecca
September 25, 2013
Tweet
Share
More Decks by Rebecca
See All by Rebecca
A Tale of Two Feature Flags
rsliter
0
400
Other Decks in Programming
See All in Programming
クラウドに依存しないS3を使った開発術
simesaba80
0
170
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
640
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
140
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
310
開発に寄りそう自動テストの実現
goyoki
2
1.4k
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
650
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
220
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
470
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
280
チームをチームにするEM
hitode909
0
400
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
110
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
94k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
30
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Embracing the Ebb and Flow
colly
88
4.9k
Designing for Timeless Needs
cassininazir
0
93
GraphQLとの向き合い方2022年版
quramy
50
14k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
870
Product Roadmaps are Hard
iamctodd
PRO
55
12k
RailsConf 2023
tenderlove
30
1.3k
WENDY [Excerpt]
tessaabrams
8
35k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
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! !