Resumen de los puntos de conocimiento de Koltin

1. Concatenación de cadenas

java:
String firstName = "Amit";String lastName = "Shekhar";String message = "My name is: "+ firstName + " " + lastName;
kotlin
val firstName = "Amit"val lastName = "Shekhar"val message = "My name is: $firstName $lastName"

2. Nueva línea

• Java
String text = "First Line\n" +
              "Second Line\n" +
"Third Line";
• Kotlin
val text = """ |First Line |Second Line |Third 

3. Expresiones ternarias

• Java
		String text = x > 5 ? "x > 5" : "x <= 5";
• Kotlin
val text = if (x > 5)
              "x > 5"
else "x <= 5"

4. Operadores

• java
final int andResult = a & b;final int orResult = a | b;final int xorResult = a ^ b;finalintrightShift=a>>2;finalintleftShift =a<<2;finalintunsignedRightShift = a >>> 2;
• Kotlin
  val andResult = a and bval orResult = a or bval xorResult = a xor bval rightShift = a shr 2val leftShift = a shl 2val unsignedRightShift = a ushr 2

5. Tipo sentencia y conversión (declarativa)

• Java
if (object instanceof Car) {
Car car = (Car) object;}

• Kotlin
if (object is Car) {var car = object as Car}

6. Juicio de tipo y conversión (implícito)

• Java

if (object instanceof Car) {
   Car car = (Car) object;
}
• Kotlin
if (object is Car) {
var car = object // 聪明的转换
}

7. Plantilla de cadena

Kotlin 中引入了字符串模版,方便字符串的拼接,可以用$符号拼接变量和表达式
/** kotlin 字符串模版,可以用$符号拼接变量和表达式* */fun testString2() { val strings = arrayListOf("abc", "efd", "gfg")
println("First content is $strings")
println("First content is ${strings[0]}")
println("First content is ${if (strings.size > 0) strings[0] else "null"}") 
/** Kotlin 中,美元符号$是特殊字符,在字符串中不能直接显示,必须经过转义,方法 1 是用反斜杠, 方法二是${'$'}* */fun testString3() {
    println("First content is \$strings")
    println("First content is ${'$'}strings")
}

8. Tres citas


    public void testString1() {
        String str1 = "abc";
        String str2 = "line1\n" +
"line2\n" +
                "line3";
        String js = "function myFunction()\n" +
"{\n" +
                "    document.getElementById(\"demo\").innerHTML=\"My First
JavaScript Function\";\n" +
                "}";
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(js);
    }
/** kotlin 对字符串的加强,三个引号"""中可以包含换行、反斜杠等等特殊字符* */fun testString() {
val str1 = "abc"
val str2 = """line1\n line2 line3 """ val js = """ function myFunction()
{            document.getElementById("demo").innerHTML="My First JavaScript
    
kotlin 除了有单个双引号的字符串,还对字符串的加强,引入了三个引号,"""中可以包含换
行、反斜杠等等特殊字符:
 
Function";
}        """.trimIndent()
println(str1)
    println(str2)
    println(js)
}

9. La instrucción let simplifica el acceso a pares de objetos anulables

• prototipo de función let:

inline fun <T, R> T.let(block: (T) -> R): R = block(this)

• La función let toma por defecto el objeto actual como el parámetro it del cierre, y el valor devuelto es la última línea de la función, o
se especifica return.
El código anterior también se puede ejecutar con la sentencia ?.let, como se muestra a continuación:
/* * A través de la sentencia let, después de ?.let, si está vacía, no habrá operación, y solo cuando no esté vacía ,
se ejecutará el siguiente let operar* */

 user?.let {
 it.name
 it.age
 it.toString()
 }

A través de la instrucción let, después de ?.let, si está vacío, no habrá operación, y solo cuando no esté vacío, se ejecutará la
operación después de let.

10.¿Operador Elvis?: simplificar el manejo de valores nulos

Si el valor puede estar vacío, el manejo de valores nulos puede ser engorroso, como este:

/** Manejo de valores nulos* */

fun testElvis(input: String?, user: User?) {
 val a: Int?
 if (input == null) {
 a = -1
 } else {
 a = input?.length
 }
 if (user == null) {
 var newOne = User()
 newOne.save()
 } else {
 user.save()
 }
}

El operador Elvis ?: puede simplificar las operaciones anteriores. El símbolo ?: solo realizará el siguiente procesamiento cuando el lado izquierdo del símbolo esté vacío, y no habrá
operación si no está vacío. Justo lo contrario de ?.let, por ejemplo, podemos usar dos líneas de código para simplificar la operación anterior:
/** * Elvis operator?: Simplifica el manejo de valores nulos*/

fun testElvis2(input: String?, user: User?) {
 val b = input?.length ?: -1;
 user?.save() ?: User().save()
}

11. Tipos anulables y no anulables

En Java, hay excepciones verificadas y excepciones no verificadas. NullPointerException es una excepción no verificada, lo que significa que NullPointerException no necesita ser capturada explícitamente. A menudo, durante el tiempo de ejecución, el programa puede informar una NullPointerException y luego bloquearla. Kotlin es una excepción eficiente y lenguaje seguro, intenta detectar el problema del puntero nulo explícitamente en la etapa de compilación y mantiene el problema en la etapa de compilación, lo que hace que el programa sea más robusto.
• Los tipos en Kotlin se dividen en tipos que aceptan valores NULL y tipos que no aceptan valores NULL, a través de ? El representante puede estar vacío, sin? Representa no anulable

fun testNullType() {
 val a: String = "aa"
 /* * a 是非空类型,下面的给 a 赋值为 null 将会编译不通过 * */
 // a = null
 a.length
 /* * ?声明是可空类型,可以赋值为 null * */
 var b: String? = "bb"
 b = null

 /* * b 是可空类型,直接访问可空类型将编译不通过,需要通过?.或者!!.来访问 * */
 // b.length
 b?.length
 b!!.length
}

• Para un tipo que no acepta valores NULL: si asigna directamente un objeto que posiblemente acepta valores NULL a un tipo que no acepta valores NULL, fallará
en tiempo de compilación
• Para un tipo que acepta valores NULL: ¿Pasa? Declare que el acceso directo no se puede compilar al acceder a este tipo, y debe
pasar ?. o !!.
o ?. Esto significa que si el tipo está vacío, devolverá nulo y no se realizarán operaciones posteriores. no vacío,
devolverá Irá a acceder al método o propiedad correspondiente
o!!.. Significa que si el tipo está vacío, se lanzará una NullPointerException, y si no está vacío,
se accederá , por lo tanto, esto solo se usa en muy pocos escenarios específicos. El símbolo
significa que el programa no maneja este caso de excepción, y lanzará
NullPointerException como código Java. Y el siguiente código no debe aparecer en el código, lo que hará que el código sea
poco legible y si hay una excepción de puntero nulo, no podemos averiguar de inmediato dónde está vacío:

 /* * 不推荐这样的写法:链式的连续用!!. * */
 val user = User()
 user!!.name!!.subSequence(0,5)!!.length

Correspondiente a un tipo anulable, cada acceso a él debe traer ?.juicio

val user: User? = User()
 /* * 每次访问都用用?.判断 * */
 user?.name
 user?.age
 user?.toString()
但这样多了很多代码,kotlin 做了一些优化,
 /* * 或者提前判断是否为空,如果不为空在这个分支里会自动转化为非空类型就可以直接访问了
* */
 if (user != null) {
 user.name
 user.age
 user.toString()
 }

Use if para juzgar si el tipo está vacío de antemano. Si no está vacío, se convertirá automáticamente en un tipo no vacío en esta rama y se puede acceder directamente.

Supongo que te gusta

Origin blog.csdn.net/github_37610197/article/details/125398335
Recomendado
Clasificación