Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
kotlin [2024/12/29 13:21] enric_mieza_sanchez [Nullable Objects i Safe Functions] |
kotlin [2025/01/07 19:10] (actual) enric_mieza_sanchez |
||
---|---|---|---|
Línia 1: | Línia 1: | ||
+ | ~~REVEAL~~ | ||
====== Kotlin ====== | ====== Kotlin ====== | ||
Línia 50: | Línia 51: | ||
^ | ^ | ||
</ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== Inferència de tipus ===== | ||
<WRAP tip> | <WRAP tip> | ||
Línia 56: | Línia 61: | ||
La novetat respecte de Java és la **inferència de tipus**, que permet que el compilador conegui el tipus de la variable mitjançant la seva inicialització. | La novetat respecte de Java és la **inferència de tipus**, que permet que el compilador conegui el tipus de la variable mitjançant la seva inicialització. | ||
</ | </ | ||
+ | |||
+ | Una definició explícita d'una variable (juntament amb una assignació): | ||
+ | <code kotlin> | ||
+ | >>> | ||
+ | >>> | ||
+ | res14: kotlin.Double = 33.3 | ||
+ | </ | ||
+ | |||
+ | Kotlin admet definicions per **inferència del tipus**: | ||
+ | <code kotlin> | ||
+ | >>> | ||
+ | >>> | ||
+ | res20: kotlin.Double = 33.3 | ||
+ | </ | ||
+ | |||
+ | La inferència de tipus ajuda a que el codi sigui menys verbós que Java. Per exemple, per instanciar objectes: | ||
+ | <code kotlin> | ||
+ | var b = Button() | ||
+ | </ | ||
+ | |||
+ | Enlloc del que podria ser en Java: | ||
+ | <code java> | ||
+ | Button b = new Button(); | ||
+ | </ | ||
\\ | \\ | ||
- | ===== Nullable | + | ===== Nullable i Non-Nullable Objects |
- | Kotlin intenta evitar errors de Java en //runtime// com el típic '' | + | Kotlin intenta evitar errors de Java en //runtime// com el típic '' |
<WRAP info> | <WRAP info> | ||
- | '' | + | '' |
</ | </ | ||
- | Per defecte els tipus son //not-nullable// (Ex: '' | + | Per defecte els tipus son //non-nullable// (Ex: '' |
<code kotlin> | <code kotlin> | ||
>>> | >>> | ||
>>> | >>> | ||
res87: kotlin.Int = 1 | res87: kotlin.Int = 1 | ||
- | >>> | + | >>> |
error: null can not be a value of a non-null type Int | error: null can not be a value of a non-null type Int | ||
- | a=null | + | a = null |
- | ^ | + | ^ |
</ | </ | ||
Línia 85: | Línia 114: | ||
</ | </ | ||
- | Això ens porta a certs " | + | ===== Què fa el compilador amb els nulls? ===== |
+ | Disposar de variables // | ||
+ | <WRAP prewrap> | ||
<code kotlin> | <code kotlin> | ||
>>> | >>> | ||
Línia 94: | Línia 125: | ||
^ | ^ | ||
</ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
- | ==== Safe call ==== | + | ===== Safe call ?. ===== |
- | Com es pot veure, l' | + | Com es pot veure, l' |
<code kotlin> | <code kotlin> | ||
>>> | >>> | ||
Línia 114: | Línia 148: | ||
</ | </ | ||
- | ==== Operador !! ==== | + | ===== Operador !! ===== |
- | Finalment, | + | Igualment |
<code kotlin> | <code kotlin> | ||
Línia 128: | Línia 162: | ||
\\ | \\ | ||
+ | ===== Elvis Operator ?: ===== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | L' | ||
+ | <code kotlin> | ||
+ | >>> | ||
+ | >>> | ||
+ | 0 | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | <WRAP tip> | ||
+ | L' | ||
+ | </ | ||
+ | |||
+ | ==== Equivalent en Java ==== | ||
+ | En Java, caldria fer un codi com aquest: | ||
+ | <code java> | ||
+ | String name = null; | ||
+ | if( name == null ) { | ||
+ | System.out.println(0); | ||
+ | } else { | ||
+ | System.out.println( name.length() ); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Tot i que també hi ha l' | ||
+ | <code java> | ||
+ | String name = null; | ||
+ | int length = (name != null) ? name.length() : 0; | ||
+ | System.out.println(length); | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== lateinit ===== | ||
+ | '' | ||
+ | |||
+ | Per exemple: | ||
+ | <code kotlin> | ||
+ | lateinit var x: String // Variable de tipus String que no s'ha inicialitzat | ||
+ | fun main() { | ||
+ | val y = fes_coses_variades() // realitza diverses accions i inicialitza x | ||
+ | println(x) // Imprimeix el valor de la variable x | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <WRAP tip> | ||
+ | '' | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ====== Objectes ===== | ||
+ | |||
+ | Els constructors es defineixen amb la paraula '' | ||
+ | |||
+ | Les **variables i funcions estàtiques** dins de classes son variables que estan definides abans d' | ||
+ | |||
+ | En Kotlin es defineixen dins l' | ||
+ | |||
+ | <code kotlin> | ||
+ | class MyClass { | ||
+ | private val a = 1 | ||
+ | | ||
+ | constructor(valor: | ||
+ | this.a = valor | ||
+ | } | ||
+ | |||
+ | companion object { | ||
+ | private val myStaticVar = 10 | ||
+ | | ||
+ | fun myStaticFunction() { | ||
+ | // ... | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||