Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ANDROID + SCALA
Iniciando o desenvolvimento	

Programação Reativa Funcional
AGENDA
• Por que Scala no Android?	

• Build System (SBT)	

• Scaloid	

• Macroid	

• FRP: RxJava + Scala vs. Scala.Rx	

•...
POR QUE…
…Scala no Android?
FUN & BYE BYE BOILERPLATE
• Diversão!!! =]	

• Todas as vantagens do Scala sobre o Java	

• Sintaxe limpa para o paradigma...
FRP: JAVAVS. SCALA
EditText message = (EditText)findViewById(R.id.message);
final TextView charCount = (TextView)findViewB...
ESTAMOS EM 2014!
ESTAMOS EM 2014!
Mas ainda com return
SBT
• Padrão para o Scala	

• Convention over configuration	

• Plugin maduro (02/2012) para Android:	

• https://github.co...
GRADLE + ANDROID
• Manter a estrutura exata do projeto Android
Studio	

• Plugin muito novo (02/2014) para Scala	

• https...
CRIANDO UM PROJETO
• Conforme recomendação do android-sdk-plugin,
usamos IntelliJ, criamos uma aplicação Android	

• Movem...
build.sbt
// so we can use keywords from Android, such as 'Android' and 'proguardOptions'
import android.Keys._
import and...
project/plugins.sbt
addSbtPlugin("com.hanhuy.sbt" % "android-sdk-plugin" % "1.2.17")
!
addSbtPlugin("com.github.mpeltonen"...
SCALOID
• Biblioteca para Android em Scala	

• Facilitar a vida tirando bastante boilerplate	

• Sugere a criação de layou...
SCALOID: EXEMPLOS
Button send = (Button)findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
@Ove...
SCALOID: LAYOUT
new SVerticalLayout {
STextView("Sign in").textSize(24.5 sp).<<.marginBottom(25 dip).>>
STextView("ID")
SE...
MACROID
• Mesma ideia do layout em Scala	

• Implementado com macros	

• Ferramentas para ligar ao código da aplicação	

•...
MACROID: LAYOUT
l[LinearLayout](
// set button caption
w[Button] <~ text("Click me"),
!
// set text and hide for the time ...
FRP FTW!
• Comportamento do app é escrito de maneira declarativa	

• Ganhos tradicionais do paradigma funcional	

• Ações ...
FRAMEWORKS DE FRP
• RxJava + Scala	

• https://github.com/Netflix/RxJava	

• Java puro	

• Funciona no Android sem Scala	

...
FRP:APLICAÇÃO
• Tudo o que for assíncrono	

• Eventos de UI	

• Acesso serviços locais / remotos	

• Quase tudo em um app…
CODE! CODE! CODE!
DIFICULDADES
• Não consegui integrar o “run” do IntelliJ com o comando do SBT	

• Sempre que alguma lib for trocada, é nec...
PERGUNTAS?
OBRIGADO!
TRABALHE COM SCALA
A Pinuts está contratando	

Quer trabalhar com scala?	

Fale comigo!
André Luiz Carvalho	

andre@pinuts...
Upcoming SlideShare
Loading in …5
×

Scala no Android

0 views

Published on

Iniciando o desenvolvimento em Scala no Android.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Scala no Android

  1. 1. ANDROID + SCALA Iniciando o desenvolvimento Programação Reativa Funcional
  2. 2. AGENDA • Por que Scala no Android? • Build System (SBT) • Scaloid • Macroid • FRP: RxJava + Scala vs. Scala.Rx • Dificuldades
  3. 3. POR QUE… …Scala no Android?
  4. 4. FUN & BYE BYE BOILERPLATE • Diversão!!! =] • Todas as vantagens do Scala sobre o Java • Sintaxe limpa para o paradigma reativo funcional, que requer funções de ordem superior • Diminuir código “boilerplate” necessário no Android
  5. 5. FRP: JAVAVS. SCALA EditText message = (EditText)findViewById(R.id.message); final TextView charCount = (TextView)findViewById(R.id.char_count); Events.text(message).subscribe(new Action1<String>() { @Override public void call(String str) { charCount.setText(String.valueOf(str.length())); } }); val message = find[EditText](R.id.message) val charCount = find[TextView](R.id.char_count) Events.text(message).subscribe((str: String) => charCount.setText(str.length.toString)) Java Scala
  6. 6. ESTAMOS EM 2014!
  7. 7. ESTAMOS EM 2014! Mas ainda com return
  8. 8. SBT • Padrão para o Scala • Convention over configuration • Plugin maduro (02/2012) para Android: • https://github.com/pfn/android-sdk-plugin • Compatível com estrutura Ant ou Gradle
  9. 9. GRADLE + ANDROID • Manter a estrutura exata do projeto Android Studio • Plugin muito novo (02/2014) para Scala • https://github.com/saturday06/gradle-android-scala-plugin • Não funcionou nos meus testes
  10. 10. CRIANDO UM PROJETO • Conforme recomendação do android-sdk-plugin, usamos IntelliJ, criamos uma aplicação Android • Movemos o módulo app para a raiz • Criamos o build.sbt e 
 project/plugings.sbt • Apagamos os arquivos gradle*
  11. 11. build.sbt // so we can use keywords from Android, such as 'Android' and 'proguardOptions' import android.Keys._ import android.Dependencies.{apklib,aar} ! android.Plugin.androidBuild ! name := "Reactive" ! platformTarget in Android := "android-19" ! versionCode in Android := Some(7) ! versionName in Android := Some(“1.0") ! proguardOptions in Android ++= Seq( "-dontobfuscate", "-dontoptimize", "-dontwarn android.**", "-dontwarn com.android.**" ) ! libraryDependencies ++= Seq( "org.scaloid" %% "scaloid" % "3.2.1-8", "com.android.support" % "appcompat-v7" % "19.1.0" )
  12. 12. project/plugins.sbt addSbtPlugin("com.hanhuy.sbt" % "android-sdk-plugin" % "1.2.17") ! addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0") project/build.properties sbt.version=0.13.1
  13. 13. SCALOID • Biblioteca para Android em Scala • Facilitar a vida tirando bastante boilerplate • Sugere a criação de layouts em Scala • Eu não gosto desse approach, por enquanto • Muitos implicits
  14. 14. SCALOID: EXEMPLOS Button send = (Button)findViewById(R.id.send); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(SecondActivity.this, "Clique!", Toast.LENGTH_SHORT).show(); } }); val send = find[Button](R.id.send) send.onClick(toast("Clique!")) Java sem Scaloid Scala com Scaloid
  15. 15. SCALOID: LAYOUT new SVerticalLayout { STextView("Sign in").textSize(24.5 sp).<<.marginBottom(25 dip).>> STextView("ID") SEditText() STextView("Password") SEditText() inputType TEXT_PASSWORD SButton("Sign in") this += new SLinearLayout { SButton("Help") SButton("Sign up") } }.padding(20 dip)
  16. 16. MACROID • Mesma ideia do layout em Scala • Implementado com macros • Ferramentas para ligar ao código da aplicação • UI Actions, Tweaks etc… • Melhor pensado que o Scaloid para interface • Mesmo assim não tem feedback imediato na IDE http://macroid.github.io/
  17. 17. MACROID: LAYOUT l[LinearLayout]( // set button caption w[Button] <~ text("Click me"), ! // set text and hide for the time being w[TextView] <~ text("Hello!") <~ hide ! // set layout orientation ) <~ vertical
  18. 18. FRP FTW! • Comportamento do app é escrito de maneira declarativa • Ganhos tradicionais do paradigma funcional • Ações processadas através de funções • Estado intimamente ligado à UI • Funções puras são mais fáceis de testar que objetos
  19. 19. FRAMEWORKS DE FRP • RxJava + Scala • https://github.com/Netflix/RxJava • Java puro • Funciona no Android sem Scala • Baseado em stream de eventos • Bindings para Scala • Scala.Rx • https://github.com/lihaoyi/scala.rx • Scala puro • Funciona em Scala.JS • Baseado em valores • Projeto de um homem só
  20. 20. FRP:APLICAÇÃO • Tudo o que for assíncrono • Eventos de UI • Acesso serviços locais / remotos • Quase tudo em um app…
  21. 21. CODE! CODE! CODE!
  22. 22. DIFICULDADES • Não consegui integrar o “run” do IntelliJ com o comando do SBT • Sempre que alguma lib for trocada, é necessário rodar o sbt gen-idea • Problemas com o Proguard • Ele é necessário inclusive em DEBUG • Problemas de método / classe não encontrada ao rodar requerem um sbt clean
  23. 23. PERGUNTAS?
  24. 24. OBRIGADO!
  25. 25. TRABALHE COM SCALA A Pinuts está contratando Quer trabalhar com scala? Fale comigo! André Luiz Carvalho andre@pinuts.com.br @alcarv RH da Pinuts rh@pinuts.com.br

×