Dopo 20 anni Java inizia a sentire il peso degli anni e la sua sintassi non sempre evolve come vorremmo, ma la JVM resta sempre un ambiente affidabile ed è già in produzione presso moltissime aziende. Negli ultimi anni sono usciti molti linguaggi basati sulla JVM, ma non tutti hanno avuto il successo sperato.
Kotlin ha già conquistato Android e ora potrebbe anche essere molto presente nelle nostre web application: una sintassi intuitiva e grandi aziende che lo supportano potrebbero dare la spinta definitiva verso il successo. Durante il talk vedremo le basi del linguaggio, perché è figo e svilupperemo una piccola applicazione con Spring Boot.
3. Chi sono
Mi chiamo Davide Cerbo e scrivo
codice brutto da quando avevo 7
anni, dal 2003 mi pagano per farlo.
4. C’era una volta OAK
Correva l’anno 1992 ed
iniziava Tangentopoli
5. C’era una volta OAK Java
Nasce nel 1995, in
America ha la patente
e da 12 mesi può bere
alcolici.
6. Il grande problema
Backward
compatibility
(L’arte di rompere la tua applicazione perché le
altre evolvono e la tua non può.)
JDK 1.0 (21 gennaio 1996)
JDK 1.1 (19 febbraio 1997)
J2SE 1.2 (8 dicembre 1998)
J2SE 1.3 (8 maggio 2000)
J2SE 1.4 (6 febbraio 2002)
J2SE 5.0 (30 settembre 2004)
Java SE 6 (11 dicembre 2006)
Java SE 7 (28 luglio 2011)
Java SE 8 (18 marzo 2014)
Tutte compatibili!
9. Kotlin is a statically-typed programming
language that runs on the Java Virtual Machine
and also can be compiled to JavaScript source
code or uses the LLVM compiler infrastructure.
14. Fun fun functions
fun hello(name: String, city : String = "Salerno") =
println("Ciao $name da $city")
hello(name=”Davide”)
hello(city=”Salerno”, name=”Valentina”)
Int.multiply(x:int) = this * 5
infix Int.multiply(x:int) = this * 5
tailrec fun factorial(accumulator: Int, n: Int): Int = if (n
== 1) accumulator else factorial(accumulator * n, n - 1)
15. Nella vita ci vuole Class?
open class Person(val name: String) {
init { println(“init…”) }
open fun speak() { println("Hi $name!") }
infix fun and(o: Person) = "Hi ${o.name} & ${this.name}"
}
Person(“Davide”) and Person(“Valentina”)
16. Equals, hashCode, toString e copy, mai più!
data class User(val name: String, val age: Int)
val davide = User(“Davide”, 35)
val davideJunior = davide.copy(age=0)
val (name, age) = davide
println("$name $age years old")
18. Lambda
arrayOf("ciao", "davide").forEach { println("Hello $it!") }
val doubled = ints.map { value -> value * 2 }
val doubled = ints.map { it * 2 }
class Customer(name: String) : Person(name) {
fun forEach(action: (line: Char) -> Unit) =
name.forEach(action)
fun hello(action: (line: String) -> String) =
"Hello ${action.invoke(name)}"
}
19. Tu dimmi quando, quando...
fun describe(obj: Any): String = when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
describe(Person(“davide”))
20. Null è sicuro
var test:String = "ciao"
test = null
var test:String? = "ciao"
test = null
println(test?.length)
println(test!!.length)
val davide = User(test, 35)
val davide = User(test ?: "Mino", 35)