Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Introdução a Scala

Aprendendo os conceitos básicos da linguagem Scala, by @jcranky - jcranky.com - youtube.com/jcrankydev
by

Paulo Siqueira

on 1 October 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Introdução a Scala

Scala
Estaticamente tipada
Orientada a Objetos e Funcional
Roda em cima da JVM
tipos inferidos!
linguagem de script
REPL
compilada
Scala - como usar?
estrutura e sintaxe da linguagem
read
eval
print
loop
arquivo .scala
-> ou shell script, ver 'man scala'
comandos 'top level' no arquivo
-> super poder: acesso à todas
as bibliotecas
Java
e
Scala
Ferramentas de build
sbt - scala build tool
-> ótimo para misturar Java e Scala
Actors
-> concorrência sem thread locking
-> prefira objetos imutáveis
Testing
IDEs
Pattern Matching,
case classes e "A Volta do Switch"
Scala Collections
Extra: frameworks web
http://scalagwt.gogoego.com/
REST? Jersey? REST-easy?
closures
implicits
Martin Odersky
EPFL, Suíça
Java Generics, javac ... e Scala!
traits: "interface com código"
ou
blocos para compor sua aplicação
Norbert
Actors + Traits
Integração Java -Scala
http://sna-projects.com/norbert/
Scala / Lift
web site / mobile site / REST API
Kestrel, fila de mensagens
"It grew with us for a number of months,
and then, at a certain point, it just hit a wall"
Alex Payne, API Lead, Twitter
https://github.com/robey/kestrel
JRebel ?
Lista já antiga com outros casos de sucesso:
-> http://www.scala-lang.org/node/1658
Projetos OpenSource:
http://opensource.imageworks.com/
Scala Migrations: upgrades e rollbacks
de database schemas
Algumas características:
passando blocos de código "por aí"
convertendo tipos e "adicionando"
funcionalidades em APIs existentes
Intro by @jcranky
jcranky.com
youtube.com/jcrankydev
List, Set, Map

operações comuns:
->foreach, map, filter... e par
Links e etc
site oficial: www.scala-lang.org

scala-br - lista de discussão em português:
http://groups.google.com/group/scala-br
mailbox
scalatra: https://github.com/scalatra/scalatra
http://code.google.com/p/scala-migrations/
https://github.com/twitter
http://twitter.github.com/scala_school/
val x
: Int
= 99
val nome
: String
= "JCranky"
val x = 99
val nome = "JCranky"
import java.io.File
val home = new File(".")
home.list foreach println
def using[A <: {def close(): Unit}, B](param: A)(
f: A => B
): B =
try {

f(param)
} finally {

param.close
}
grupo de usuários scala de SP:

http://scaladores.com.br
http://youtube.com/scaladores
Core Scala - curso na Globalcode

Tópicos:
- Scala
- Akka 2
- Play Framework 2

mais informações: http://www.globalcode.com.br/treinamentos/cursos/core-scala
TDC 2012 e 2013:
-> trilha Scala !!

(aguardem 2014!)
"cluster management and workload distribution"
Rogue: "A Lift/MongoDB query DSL"
https://github.com/foursquare/rogue
"A distributed, fault-tolerant graph database"
-> https://github.com/twitter/flockdb

"A flexible sharding framework for creating eventually-consistent distributed datastores"
-> https://github.com/twitter/gizzard
Extraído do Akka:

class ActorSystem
class ExtendedActorSystem extends ActorSystem
Extraído da Lojinha (simplificado):

def login = Action { request =>
Ok(html.login(loginForm))
}
scala> val x = 99
x: Int = 99

scala> val nome = "paulo"
nome: String = paulo
scala -cp joda-time-1.6.2.jar

import org.joda.time.DateTime
val date = new DateTime
date.getDayOfMonth
No maven, por exemplo:

scala-maven-plugin
+
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
variáveis e
constantes
imports e packages
ifs e loops
métodos e funções
exceptions
arrays
Extraído da Lojinha:

var
itemBids =
new ItemBids(bidDAO.all(itemId), item)
Também da Lojinha:

val
bidDAO = DAOFactory.bidDAO
import play.api.libs.concurrent.
Akka
import akka.actor.
_
import models.dao.
{DAOFactory, Item, User}
import java.util.
{Collection => JavaCol}
// Lojinha
package controllers
package controllers.admin
// alternativa
package controllers
{
package admin
{
// suas classes

}
}
var url:
String = _
if
(ambiente == "homologação")
url = "url-homologação"
else
url = "url-produção"
while(true) {
// loop infinito
}

do {
// mais um loop infinito
} while (true)
for (
i <- 1 to 10
) {
println(i)
}
-> "for comprehensions"
->
1 to 10
gera uma coleção
-> o
for
pode percorrer qualquer coleção
val url =

if
(ambiente == "homologação") "url-homologação"

else
"url-produção"
class Calculadora {
def soma(x: Int, y: Int) = x + y
def subtrai(x: Int, y: Int) = x - y
}
da Lojinha:

class FeedGenerator {
def allItemsFeed(baseURL: String): NodeSeq = {
// implementação
}
}
classes e objetos
class FeedGenerator
(itemDAO: ItemDAO)
{
// métodos e atributos
}

-> poderia ter
val
ou
var
no itemDAO
do Akka:

class AkkaException
(message: String, cause: Throwable)
extends
RuntimeException
(message, cause)
with Serializable {


def this
(msg: String) = this(msg, null)
}
da API do Scala (simplificado):

object Source {
def fromFile(name: String) =
// implementação
}
val src = Source.fromFile("arquivo")
val a = Array(1, 2, 3, 4, 5)
a.foreach(println)
val cnpj =

try {
jsonObj.get("cnpj").toString

} catch {
case e: JSONException =>
throw new IllegalArgumentException("cadê o cnpj?")

}
case class User(id: Int, email: String, name: String, password: String)
val connection = DriverManager.getConnection(url, user, passwd)
using
(connection) {
conn
=>
// implementação acessando o BD com o
conn
}
1 to 10 -> 1.to(10)
do Akka:

-> Actor
-> ActorLogging
do Play Framework

-> Controller
-> Results
-> Status
etc
bidDAO.highest(itemId)
match
{

case
Some(bid)
=>
Ok(bid.value.toString)

case
None
=>
NotFound
}
JCranky:

youtube: http://youtube.com/jcrankydev
github: https://github.com/jcranky
site: http://jcranky.com
twitter: http://twitter.com/jcranky
Full transcript