0

Um exemplo de Eficiência Industrial do Kotlin em relação ao Java

Guilherme Neto
Guilherme Neto

Em algum momento você que ja programou em Java, com toda certeza, já teve que fazer classes que servem simplesmente para representar um conjunto de dados na forma de um modelo, e nada mais. São as famosas classes Models / POJOs

Geralmente tais classes não possuem nada de especial, apenas alguns atributos: um construtor que os inicializa, métodos getters e setters e, algumas vezes, sobrescrevem os métodos equals(), hashcode() e toString().

Apesar de simples, em Java as mesmas tendem a ficar muito grandes por conta da verbosidade da linguagem. 

Abaixo temos um exemplo de uma classe que representa um usuário em Java:

public class JavaUser {

    private String id;
    private String firstName;
    private String lastName;
    private int age;

    public JavaUser(final String id, final String firstName, final String lastName, final int age) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(final String id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(final String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(final String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(final int age) {
        this.age = age;
    }

    @Override
    public boolean equals(final Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        final JavaUser javaUser = (JavaUser) o;

        if (age != javaUser.age) return false;
        if (id != null ? !id.equals(javaUser.id) : javaUser.id != null) return false;
        if (firstName != null ? !firstName.equals(javaUser.firstName) : javaUser.firstName != null) return false;
        return lastName != null ? lastName.equals(javaUser.lastName) : javaUser.lastName == null;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
        result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "JavaUser{" +
                "id='" + id + '\'' +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", age=" + age +
                '}';
    }
}


Kotlin possui um tipo especial de classes que pode ser utilizado especialmente para estes casos. São as chamadas data classes

Utilizando esta funcionalidade, o código equivalente em Kotlin pode ser visto abaixo:

data class KotlinUser(var id: String,
                      var firstName: String,
                      var lastName: String,
                      var age: Int)

Como podemos perceber, a classe escrita em Kotlin é muito mais simples, mais rápida de escrever e também mais simples de ler, uma vez que não é recheada de código desnecessário que atrapalha a leitura. 

Por padrão, data classes já possuem uma implementação útil de equals(), hashCode() e toString(), que usa como parâmetros as propriedades definidas no construtor da classe e, por isso, não é necessário re-implementar estes métodos. 

Além disso, data classes também possuem um método copy(), que serve para criar cópias de uma instância alterando apenas determinados atributos. 

Suponha, por exemplo, que você queira criar um novo usuário, com os mesmos atributos de um usuário já existente, mas alterando apenas a idade. É simples fazer isto utilizando este método:

fun newUser(newAge: Int, oldUser: KotlinUser): KotlinUser {
    return oldUser.copy(age = newAge)
}


0
0

Comentários (0)

Passei parte de minha vida trabalhando como comerciante e tambem agricultor

Brasil