expressões lambda (Java < 8); • Sem Stream API (Java < 8); • Caused by: java.lang.NullPointerException: Deveria ter mais item nessa lista. at Slide2.java:4 (Java > 0) Problemas com Java
= sum(a, b) println(“a + b = ${sum}”) println(“a + b = $sum”) println(“a + b = ${a + b}”) println(“a + b = ${sum(a, b)}”) int a = 1; int b = 2; int sum = sum(a, b); sout(“a + b = ” + sum); souf(“a + b = %d\n”, sum); String.format(“a + b = %d\n”, sum); Kotlin templates JAVA templates Read-only
Calendar.getInstance() calendar.time = this calendar.add(Calendar.DAY_OF_MONTH, days) return calendar.time } Receiver type Optional default value setTime() getTime() The receiver val date = Date() val m1 = date.addDays() // add 1 day val m30 = date.addDays(30) // add 30 days val m20 = date.addDays(days = 20) // add 20 days No new Named arguments
calendar.time = this calendar.add(Calendar.DAY_OF_MONTH, days) return calendar.time } No default value val date = Date() val m1 = date.addDays(1) // add 1 day val m20 = date.addDays(days = 20) // add 20 days val m30 = date addDays 30 // add 30 days Call using spaces
calendar.time = this calendar.add(Calendar.DAY_OF_MONTH, days) return calendar.time } val date = Date() val m20 = date.plus(20) // add 20 days val m30 = date + 30 // add 30 days Using plus operator No default value
Range operator val years = (2017 downTo 2000) Infix function val worldCups = (1950..2017 step 4) Infix function val alphabetic = (‘A’..‘Z’) val yearsList = ((currentYear - 10)..(currentYear + 10)).toList()
error Mutable override fun equals(other: Any?): Boolean { if (other is User) { return this.id == other.id } return false } var name: String? = “Thiago” name = null // I love null val nullOrLength: Int? = name?.length Safe call Elvis operator val neverNull: Int = name?.length ?: -1 Smart cast Modificador Object
final Primary constructor data class User(val id: Int, val name: String) hashCode, equals, toString & copy data class User(val id: Int = 0, val name: String = “”) Default arguments open class Person(val id: Int, val name: String) class User(id: Int, name: String) : Person(id, name) No final No val/var extends/implements
for ((key, value) in mMap) { println(“$key -> $value”) } class User(val id: Int, val name: String) { operator fun component1(): Int { return id } operator fun component2(): String { return name } } Manual implementation
Manual cast class User(val map: Map<String, Any?>) { val id: Int? by map val name: String? by map } val user = User(mapOf( Pair(“id”, 1), “name” to “Thiago” )) Collection utility Pair infix operator Key, value representation
= a + b) Anonymous function Lambda expression view.setOnClickListener { Log.d(TAG, “View id: ${it.id}”) } val list = arrayListOf(1,2,3,4,5) .filter { num -> num > 3 } .reduce { a, b -> a + b } Implicit name
newList = ArrayList<T>() for (item in this) { if (predicate(item)) { newList.add(item) } } return newList } Higher-Order Modifier Generics val list = arrayListOf(1,2,3,4,5).filter { it > 3 } println(list) // [4, 5] Extension function