JavaRush /Blog Java /Random-ES /¿Existe alguna diferencia entre Kotlin y Java?
Paul Soia
Nivel 26
Kiyv

¿Existe alguna diferencia entre Kotlin y Java?

Publicado en el grupo Random-ES
Hola a todos. Quiero contarles algunas cosas básicas sobre el lenguaje Kotlin, que serán útiles para los principiantes. Da la casualidad de que ahora será difícil entrar en el desarrollo de Android con un solo lenguaje: la mayoría de los proyectos nuevos comienzan a escribirse en Kotlin, la mayoría de los proyectos ya preparados están escritos en Java. ¿Existe alguna diferencia entre Kotlin y Java?  - 1Actualmente tengo 4 proyectos en marcha: dos en Kotlin y dos en Java (uno principal grande y tres pequeños para uso interno). Cuando la empresa decidió escribir nuevos proyectos en Kotlin, esta decisión me pareció extraña. ¿Por qué mezclar diferentes idiomas? Dejar que otra persona escriba en Kotlin, ¿por qué lo necesitamos? Pero no había salida, así que decidí probar un nuevo idioma y comencé a estudiarlo. El primer código, por supuesto, fue escrito enteramente en estilo Java, lo que contribuyó aún más al malentendido: ¿por qué necesito un nuevo lenguaje? Pero a medida que lo usé, encontré más y más ventajas y ahora (he estado escribiendo en Kotlin durante casi 2 años) puedo decir que Kotlin es más conveniente en el desarrollo de Android. Quiero mostrar algunos matices que no serán obvios para alguien que decidió comenzar a aprender Kotlin después de Java. Permítanme recordarles también que Android usa Java 8, siendo la versión actual 14. Entonces, primero: Variables : Java:
Int a = 1;
String s = "test";
Kotlin:
val a = 1
var b = 2
val c: Int
val d = "test"
Hay dos tipos de variables en Kotlin: val (solo lectura) y var (lectura-escritura). Se recomienda utilizar val siempre que sea posible. No es necesario declarar el tipo de una variable si la variable ya ha sido inicializada. Segundo: declaraciones de cambio if/else : ¿Con qué frecuencia utiliza esta cadena de declaraciones en Java?
if (вариант 1)
{...}
else if (вариант 2)
{...}
...
else
{...}
O así:
switch(выражениеДляВыбора) {
        case (significado 1):
                Код1;
                break;
        case (significado 2):
                Код2;
                break;
...
        case (significado N):
                КодN;
                break;
        default:
                КодВыбораПоУмолчанию;
                break;
        }
En Kotlin, el operador when se usa para tales expresiones (aunque también se puede usar if/else):
val x = 5
val result = when(x) {
        0, 1 -> "cool"
        2 -> "bad"
        5 -> "normal"
        else -> "error"
}
System.out.println(result)
Aquí no solo repasamos la cadena de condiciones, sino que también asignamos inmediatamente la expresión completa a la variable de resultado, lo que nos ahorró bastantes líneas de código. Pero aún así, si solo tienes dos opciones en una rama, te recomiendo usar el if...else habitual. La construcción será más corta solo entre tres opciones. Sigamos adelante: Constructores . Es un cuento de hadas aquí. Simplemente compare el código en Java y Kotlin. Java:
public class Person {

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

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Kotlin:
class Person(private val firstName: String,
             private val lastName: String,
             private var age: Int) {
}
Puede parecer que algo quedó sin terminar en el código Kotlin. Pero no, son dos códigos idénticos en diferentes idiomas. Vamos a resolverlo un poco. En Kotlin, el constructor se puede escribir directamente en el cuerpo del nombre de la clase (pero si quieres, puedes hacerlo a la antigua usanza, como en Java). Entonces, hemos escrito tres variables, en Java hemos creado un constructor, captadores y un definidor para la variable de edad. En Kotlin, como recordamos, la variable val es de solo lectura y, por lo tanto, el configurador para estas variables no está disponible (Kotlin implementa getter-setters bajo el capó). La variable var le permite utilizar un definidor. Como resultado, escribimos casi en una línea lo mismo que tomó más de una docena de líneas en Java. Aquí recomiendo leer más sobre clases de datos en Kotlin. Pero eso no es todo en lo que son buenos los constructores de Kotlin. ¿Pero qué pasa si necesitas dos constructores? ¿Y si son tres? En Java se vería así:
public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

public Person(String firstName) {
        this.firstName = firstName;
    }
Nada complicado, tantos diseñadores como fuera necesario, eso es lo que hicieron. En Kotlin puedes arreglártelas con un solo constructor. ¿Cómo? Es simple: valores predeterminados.
class Person(private val firstName: String,
             private val lastName: String? = null,
             private var age: Int = 5) {
}
Asignamos valores predeterminados en el constructor y ahora llamarlos se verá así:
Person(firstName = "Elon", lastName = "Mask", age = 45)
Person(firstName = "Elon", age = 45)
Person(firstName = "Elon", lastName = "Mask")
Puede surgir la pregunta: ¿qué es esto?
private val lastName: String? = null
¿Cuáles son estos otros signos de interrogación? Sí, si el valor puede ser nulo, entonces se establece ?. También hay una opción como esta !!(si la variable no puede aceptar nulo). Léalo usted mismo, es todo sencillo. Y pasamos al siguiente punto. Extensiones . Esta es una herramienta muy interesante en Kotlin que no está disponible en Java. A veces en un proyecto utilizamos métodos de plantilla que se repiten en muchas clases. Por ejemplo, así:
Toast.makeText(this, "hello world :)", Toast.LENGTH_SHORT).show();
En Kotlin podemos extender una clase:
fun Context.toast(message: CharSequence) = Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
Y luego úselo así durante todo el proyecto:
context?.toast("hello world")
Hicimos una extensión para la clase Contexto. Y ahora, dondequiera que esté disponible el contexto, estará disponible su nuevo método de brindis. Esto se puede hacer para cualquier clase: String, Fragment, sus clases personalizadas, no hay restricciones. Y el último punto que veremos es Trabajar con cadenas . Aquí todo es sencillo. En Java está escrito así:
String s = "friends";
int a = 5;
System.out.println("I have" + a + s + "!");
Es más fácil en Kotlin:
val s = "friends"
val a = 5
println("I have $a $s!")
Estos son los matices con los que me topé al comienzo de aprender Kotlin, espero que esto te ayude.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION