Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Yo también quiero usar Kotlin

Bruno Aybar
September 23, 2017

Yo también quiero usar Kotlin

Bruno Aybar

September 23, 2017
Tweet

More Decks by Bruno Aybar

Other Decks in Technology

Transcript

  1. public class Usuario{
 private String nombre;
 private final String apellido;


    } val / var class Usuario{
 var nombre: String val apellido: String
 }
  2. public class Usuario{
 private String nombre;
 private final String apellido;


    } val / var class Usuario{
 var nombre: String val apellido: String
 }
  3. public class Usuario{
 private String nombre;
 private String apellido;
 }

    Null Safety null nombre.equals(“hola”) NullPointerException!!!
  4. Null Safety class Usuario{
 var nombre: String = “Bruno” val

    apellido: String? = null
 } apellido?.equals(“Aybar”) ✔
  5. public class Usuario{
 private String nombre;
 private String apellido;
 private

    int edad;
 
 public Usuario(String nombre, String apellido, int edad) {
 this.nombre = nombre;
 this.apellido = apellido;
 this.edad = edad;
 }
 public Usuario(int edad) { this.edad = edad; }
 public Usuario() { } @Override public boolean equals(Object obj) {
 if(obj instanceof Usuario) {
 Usuario otro = (Usuario) obj;
 return nombre.equals(otro.getNombre()) && 
 apellido.equals(otro.getApellido()) 
 && edad == otro.getEdad();
 }else
 return false;
 } @Override public boolean hash(Object obj) {
 ...
 } @Override public boolean toString() {
 ...
 }
 
 public String getNombre() { return nombre; }
 
 public void setNombre(String nombre) {this.nombre = nombre; }
 
 public String getApellido() { return apellido; }
 
 public void setApellido(String apellido) {this.apellido = apellido; }
 
 public int getEdad() { return edad; }
 
 public void setEdad(int edad) { this.edad = edad; } 
 } Data classes
  6. Data classes public class Usuario{
 private String nombre;
 private String

    apellido;
 private int edad;
 
 public Usuario(String nombre, String apellido, int edad) {
 this.nombre = nombre;
 this.apellido = apellido;
 this.edad = edad;
 }
 public Usuario(int edad) { this.edad = edad; }
 public Usuario() { } @Override public boolean equals(Object obj) {
 if(obj instanceof Usuario) {
 Usuario otro = (Usuario) obj;
 return nombre.equals(otro.getNombre()) && 
 apellido.equals(otro.getApellido()) 
 && edad == otro.getEdad();
 }else
 return false;
 } @Override public boolean hash(Object obj) {
 ...
 } @Override public boolean toString() {
 ...
 }
 
 public String getNombre() { return nombre; }
 
 public void setNombre(String nombre) {this.nombre = nombre; }
 
 public String getApellido() { return apellido; }
 
 public void setApellido(String apellido) {this.apellido = apellido; }
 
 public int getEdad() { return edad; }
 
 public void setEdad(int edad) { this.edad = edad; } 
 } data class User(nombre: String,
 apellido: String,
 edad: Int)
  7. Funciones de Extensión fun Context.isTablet(): Boolean {
 val xlarge =

    (resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE
 val large = (resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE
 return xlarge || large
 }
  8. Funciones de Extensión fun Context.isTablet(): Boolean {
 val xlarge =

    (resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE
 val large = (resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE
 return xlarge || large
 }
  9. Funciones de Extensión fun Context.isTablet(): Boolean {
 val xlarge =

    (resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE
 val large = (resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE
 return xlarge || large
 } override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState) if(getContext.isTablet()){ ... } } MainFragment.kt
  10. Kotlin Android Extensions <?xml version="1.0" encoding="utf-8"?>
 <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android">
 
 <TextView


    android:id="@+id/myTextView"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"/>
 
 
 </android.support.v4.widget.NestedScrollView> activity_main.xml
  11. Kotlin Android Extensions <?xml version="1.0" encoding="utf-8"?>
 <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android">
 
 <TextView


    android:id="@+id/myTextView"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"/>
 
 
 </android.support.v4.widget.NestedScrollView> import kotlinx.android.synthetic.main.activity_main.* activity_main.xml MainActivity.xml override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) myTextView.text = “Hola mundo!” }
  12. Operadores private void obtenerNombres(List<User> usuarios){
 List<String> nombres = new ArrayList<>();


    for(User user : user)
 nombres.add(user.getNombre());
 return nombres;
 }
  13. Operadores private void obtenerNombres(List<User> usuarios){
 List<String> nombres = new ArrayList<>();


    for(User user : user)
 nombres.add(user.getNombre());
 return nombres;
 } fun obtenerNombres(usuarios: List<Usuario>) = usuarios.map{ it.nombre} fun List<Usuario>.obtenerNombres() = map{ user -> user.nombre } • Map • Filter • Sorted • Reduce • Etc
  14. .java .kt public class Usuario {
 void foo() {
 new

    Android();
 }
 } Usuario.java class Android{
 fun getUser() = Usuario()
 } Android.kt
  15. Recomendaciones Empezar haciendo pruebas ¡No es necesario transformar todo a

    Kotlin! ¡No es necesario que todo esté en Kotlin!
  16. Recomendaciones Empezar haciendo pruebas ¡No es necesario transformar todo a

    Kotlin! ¡No es necesario que todo esté en Kotlin!
  17. Recomendaciones Empezar haciendo pruebas ¡No es necesario que todo esté

    en Kotlin! Feedback en el equipo ¡No es necesario transformar todo a Kotlin!
  18. Recomendaciones Empezar haciendo pruebas ¡No es necesario que todo esté

    en Kotlin! Establecer guías ¡No es necesario transformar todo a Kotlin! Feedback en el equipo