SlideShare ist ein Scribd-Unternehmen logo
Dear otliners
Java Developers are Humans Too
@Vivek_Chanddru
Quick Check
A Kotlin Enthusiast
Rooting for Java Developers
Why is there so much hype?
• Unveiled on July, 2011 by JetBrains and released Feb, 2016
• Received First Class support at Google I/O 2017
• A much better Java
• Provides support similar to other modern languages
• A boon for Java programmers writing verbose code
Kotlin Adoption
Kotlin Adoption
Kotlin Adoption
We are here now
Kotlin Adoption
• Very soon, Kotlin is going to overtake Java (For Android)
• Libraries are popping up with Kotlin support
• New libraries are developed using Kotlin
• Sample apps and code are in Kotlin
• Medium is filled with wonders of Kotlin
Kotlin is growing and people
are Adopting it
So Why Bother about Java Developers?
Problems in Adopting Kotlin
• Have to learn an all new language 😫
• Team members not willing to learn a new language
• Company is not willing to spend time and money on R&D
• Fear of breaking what is already working fine
• Hard to find Kotlin experts to get the work done
Most of it is not their fault!
A lot of factors come into play that stops their adoption
What goes on in a Java developer's mind?
• The world is moving on leaving them behind
• See a new blog? It is in Kotlin
• An awesome library that they want? It is developed and
optimized for Kotlin
• Left with the default implementation of Kotlin
interoperability support
You can support them!
With very minimal work on your side
How Kotlin helps with interoperability
• Kotlin works out of box with Java (mostly)
• Java classes and methods can be used directly from Kotlin
• Kotlin classes and functions can be used from Java
• With very little effort, you can make Java developers’ life much
easier and write better looking code
Tips for Interoperability
The typical Do's and Don'ts
Think about access scopes
What you think is invisible is available in plain sight!
1
Visibility Modifiers - Kotlin
• Private fields in Kotlin stay private in Java
• Private top-level declarations turns out to be package-local
declarations
• Protected members in Java are accessible to other classes in same
package
• Internal members become public after some name-mangling
• Public stay public
Be mindful of the class name
Name the class to make more sense
2
fun calculateAge(dob: Date): Int {
//some magic happens here
return 42
}
Kotlin - AmazingUtils.kt
fun calculateAge(dob: Date): Int {
//some magic happens here
return 42
}
void runAgeDemo(Date date) {
AmazingUtilsKt

.calculateAge(date);
}
Kotlin - AmazingUtils.kt
Java
@file:JvmName("Utils")
fun calculateAge(dob: Date): Int {
//some magic happens here
return 42
}
Kotlin - AmazingUtils.kt
Utils.calculateAge(date);
void runAgeDemo(Date date) {
}
@file:JvmName("Utils")
fun calculateAge(dob: Date): Int {
//some magic happens here
return 42
}
Kotlin - AmazingUtils.kt
Java
@file:JvmName(“Utils")
@file:JvmMultifileClass
fun calculateAge(dob: Date): Int {
//some magic happens here
return 42
}
@file:JvmName("Utils")

@file:JvmMultifileClass
fun isEligibleToVote(age: Int): Boolean {
//some magic happens here
return age >= 18
}

A.kt
B.kt
void runAgeDemo(Date date) {
int age = Utils.calculateAge(date);
boolean isEligible = Utils.isEligibleToVote(age);
}
Java
Have fun() with names
Name the methods to make more sense
3
fun String?.isNullorEmpty(): Boolean {
return this != null && this.isEmpty()
}
Kotlin
Does not show the receiver type. Might want
function name to give more context
fun String?.isNullorEmpty(): Boolean {
return this != null && this.isEmpty()
}
Kotlin
void nullOrEmptyDemo(String s) {
boolean nullorEmpty =
Utils.isNullorEmpty(s);
}
Java
@file:JvmName("Utils")

@JvmName("isStringNullorEmpty")
fun String?.isNullorEmpty(): Boolean {
return this != null && this.isEmpty()
}
Kotlin
@file:JvmName("Utils")

@JvmName("isStringNullorEmpty")
fun String?.isNullorEmpty(): Boolean {
return this != null && this.isEmpty()
}
Gives more context on what the method is
and what it does.
Kotlin
void nullOrEmptyDemo(String s) {
boolean nullorEmpty =
Utils.isStringNullorEmpty(s);
}
Java
Rename the Accessors
Name the getters and setters the way you want
4
class Person {
var name: String? = null
var age: Int? = null
}
Kotlin
void personDemo(Person person) {
person.getName();
person.getAge();
person.setName("Vivek");
}
class Person {
var name: String? = null
var age: Int? = null
}
Java
Kotlin
var name: String? = null
@JvmName("getPersonName")
get() {
return field?.toLowerCase()
}
set(value) {
field = value?.toUpperCase()
}
var age: Int? = null
class Person {
}
Kotlin
class Person {
var name: String? = null
@JvmName("getPersonName")
get() {
return field?.toLowerCase()
}
set(value) {
field = value?.toUpperCase()
}
@get:JvmName("getpersonAge")
@set:JvmName("setPersonAge")
var age: Int? = null

}
Kotlin
void personDemo(Person person) {
person.getPersonName();
person.getpersonAge();
person.setName("Vivek");
}
class Person {
var name: String? = null
@JvmName("getPersonName")
get() {
return field?.toLowerCase()
}
set(value) {
field = value?.toUpperCase()
}
@get:JvmName("getpersonAge")
@set:JvmName("setPersonAge")
var age: Int? = null

}
Java
Kotlin
Never forget your Companions
Companion functions need a little tweak to look nice
5
class AmazingClass {
companion object {
fun simpleUtilFunction() {
//Do some magic here
}
}
}
Kotlin
void companionDemo() {
AmazingClass

.Companion

.simpleUtilFunction();
}
class AmazingClass {
companion object {
fun simpleUtilFunction() {
//Do some magic here
}
}
}
Kotlin
Java
class AmazingClass {
companion object {
fun simpleUtilFunction() {
//Do some magic here
}
}
}
@JvmStatic
Kotlin
void companionDemo() {
AmazingClass.simpleUtilFunction();
}
class AmazingClass {
companion object {
fun simpleUtilFunction() {
//Do some magic here
}
}
}
@JvmStatic
Kotlin
Java
Call properties by their names
There is no need of an accessor for everything
6
Accessing Properties by Name
• There are three scenarios where the properties of a
class can be accessed directly without getters and
setters from Java
• When the property is a `const`
• When the property is a `lateinit`
• When the property is annotated with `@JvmField`
class AmazingClass {
companion object {
const val BASE_URL_GOOGLE 

= "www.google.com"
val BASE_URL
= "www.droidcon.at"
}
}
Kotlin
void companionDemo() {
system.out.println(AmazingClass.BASE_URL_GOOGLE);

system.out.println(AmazingClass.Companion.getBASE_URL()
);

}
class AmazingClass {
companion object {
const val BASE_URL_GOOGLE 

= "www.google.com"
val BASE_URL
= "www.droidcon.at"
}
}
Kotlin
Java
void companionDemo() {
system.out.println(AmazingClass.BASE_URL_GOOGLE);

system.out.println(AmazingClass.Companion.getBASE_URL()
);

}
class AmazingClass {
companion object {
const val BASE_URL_GOOGLE 

= "www.google.com"
val BASE_URL
= "www.droidcon.at"
}
}
Kotlin
Java
class AmazingClass {
companion object {
const val BASE_URL_GOOGLE 

= "www.google.com"


val BASE_URL
= "www.droidcon.at"
}
}
@JvmField
Kotlin
void companionDemo() {
system.out.println(AmazingClass.BASE_URL_GOOGLE);

system.out.println(AmazingClass.BASE_URL);
);

}
class AmazingClass {
companion object {
const val BASE_URL_GOOGLE 

= "www.google.com"


val BASE_URL
= "www.droidcon.at"
}
}
@JvmField
Kotlin
Java


class LazyClass {

lateinit var mandatoryVariable: String


var optionalVariable: String? = null

}
Kotlin
Java

void propertyAccessDemo() {
LazyClass lazyClass = new LazyClass();
lazyClass.mandatoryVariable = "abcd";
lazyClass.setMandatoryVariable("vivek");
}


class LazyClass {

lateinit var mandatoryVariable: String


var optionalVariable: String? = null

}
Kotlin
Java

void propertyAccessDemo() {
LazyClass lazyClass = new LazyClass();
lazyClass.optionalVariable = "hello";
//not available
}


class LazyClass {

lateinit var mandatoryVariable: String


var optionalVariable: String? = null

}
Kotlin
fun() with defaults
Functions with default params are not straight-forward
7
fun increaseValue(
givenValue: Int,

increaseBy: Int = 1): Int {
return givenValue + increaseBy
}
Kotlin
fun increaseValue(
givenValue: Int,

increaseBy: Int = 1): Int {
return givenValue + increaseBy
}
Kotlin
void increaseValueDemo() {
DemoKt.increaseValue(60,1);
}
Java
fun increaseValue(
givenValue: Int,

increaseBy: Int = 1): Int {
return givenValue + increaseBy
}
Kotlin
void increaseValueDemo() {
DemoKt.increaseValue(60,1);
}
Java
DemoKt.increaseValue(60);
This is an error. No methods match such signature
fun increaseValue(
givenValue: Int,

increaseBy: Int = 1): Int {
return givenValue + increaseBy
}
Kotlin
@JvmOverloads
fun increaseValue(
givenValue: Int,

increaseBy: Int = 1): Int {
return givenValue + increaseBy
}
Kotlin
@JvmOverloads
fun increaseValue(
givenValue: Int,

increaseBy: Int = 1): Int {
return givenValue + increaseBy
}
Kotlin
@JvmOverloads
void intelligentMethodDemo() {
DemoKt.increaseValue(60,5);
DemoKt.increaseValue(60);
}
Java
Handle with care
Exceptions are your worst enemies! Never forget them!
8
fun writeBytes(bytes: ByteArray) {
val file = File(“file_path")
val fos = FileOutputStream(file)
fos.write(bytes)
fos.close()
}
Kotlin
This line is going to throw 

an exception
fun writeBytes(bytes: ByteArray) {
val file = File(“file_path")
val fos = FileOutputStream(file)
fos.write(bytes)
fos.close()
}
Kotlin
void exceptionDemo() {
byte[] bytes = new byte[];
DemoKt.writeBytes(bytes);
}
Java
Does not throw any compile time errors.
Silently crashes at Runtime
fun writeBytes(bytes: ByteArray) {
val file = File(“file_path")
val fos = FileOutputStream(file)
fos.write(bytes)
fos.close()
}
Kotlin
@Throws(IOException::class)
Document the exceptions that might
be thrown
fun writeBytes(bytes: ByteArray) {
val file = File(“file_path")
val fos = FileOutputStream(file)
fos.write(bytes)
fos.close()
}
Kotlin
@Throws(IOException::class)
void exceptionDemo() {
byte[] bytes = new byte[];
DemoKt.writeBytes(bytes);
}
Java
Shows a compile time error and provides an
option to surround with try catch block
Working with Function Types
Function types which return Unit might not be what you want
9
The pitfalls of Function Types
• Fan of higher order functions and lambdas?
• Kotlin higher-order functions are a very nice feature to use but should be used
carefully.
• If your function type returns `Unit`, then, when used from Java, it has to return
`Unit.INSTANCE` which is unidiomatic
• Alternatives are to use a SAM (Single Abstract Method) interface in Java or Kotlin
• This issue will soon be fixed in one of the Kotlin releases and until then, you can
use Function Types bearing in mind the inconveniences caused to Java consumers
fun lambdaExample(block: (Int) -> Unit) {
//do some magic
block(3)
}
Kotlin
fun lambdaExample(block: (Int) -> Unit) {
//do some magic
block(3)
}
Kotlin
DemoKt.lambdaExample(integer -> {
system.out.println(integer);
return Unit.INSTANCE;
});
DemoKt.lambdaExample(integer -> {
system.out.println(integer);
return null;
});
Java
interface Callback {
fun doSomething(value: Int)
}
fun lambdaExampleInterface(
callback: Callback) {
callback.doSomething(3)
}
Kotlin
We have a SAM interface
written in Kotlin
Java

void lambdaDemo() {
DemoKt.lambdaExampleInterface(
integer -> {
system.out.println(integer);
});
}
interface Callback {
fun doSomething(value: Int)
}
fun lambdaExampleInterface(
callback: Callback) {
callback.doSomething(3)
}
Kotlin
interface Callback {
fun doSomething(value: Int)
}
fun lambdaExampleInterface(
callback: Callback) {
callback.doSomething(3)
}
Kotlin
Kotlin

lambdaExampleInterface(object : Callback {
override fun doSomething(value: Int) {
//do something here
}
})
Java

interface Callback {
void doSomething(int value)
}
Kotlin

fun lambdaExampleInterface(
callback: Callback) {
callback.doSomething(3)
}
We have a SAM interface
written in Java
Java

interface Callback {
void doSomething(int value)
}
Kotlin

fun lambdaExampleInterface(
callback: Callback) {
callback.doSomething(3)
}
Java

void lambdaDemo() {
DemoKt.lambdaExampleInterface(
integer -> {
system.out.println(integer);
});
}
Java

interface Callback {
void doSomething(int value)
}
Kotlin

fun lambdaExampleInterface(
callback: Callback) {
callback.doSomething(3)
}
Kotlin

lamdaExampleInterface(Callback { it ->
//do something here
})
Exposing immutable collections
Java does not treat collections as immutable.
10
Collections - Handle with Care
• In Kotlin, collections are by default immutable (list, set, map etc)
• Meaning, you cannot add or modify values in the collection
• If a mutable version is required, the request should be explicit to
create a mutable version of the collection
• When exposing immutable collections through public APIs, Java
consumers can receive them and make changes to it, causing
inconsistency
fun getPersonList(): List<Person> {
val personList: List<Person> =
fetchPersonList()
return personList
}
Kotlin
fun getPersonList(): List<Person> {
val personList: List<Person> =
fetchPersonList()
return personList
}
Kotlin
void collectionDemo() {
DemoKt.getPersonList().add(
new Person("Vivek",30));
}
Java
fun getCurrentPersonList(): List<Person> {
val personList = getPersonList()
val currentPersonList =
mutableListOf<Person>()
Collections.copy(
currentPersonList
,personList)
return currentPersonList
}
Kotlin
fun getCurrentPersonList(): List<Person> {
val personList = getPersonList()
val currentPersonList =
mutableListOf<Person>()
Collections.copy(
currentPersonList
,personList)
return currentPersonList
}
Kotlin
void collectionDemo() {
DemoKt.getCurrentPersonList().add(
new Person("Vivek",30));
}
Java
Thank you!
Start shooting your questions my way

Weitere ähnliche Inhalte

Was ist angesagt?

Atlassian Groovy Plugins
Atlassian Groovy PluginsAtlassian Groovy Plugins
Atlassian Groovy Plugins
Paul King
 
Introduction to Kotlin - Android KTX
Introduction to Kotlin - Android KTXIntroduction to Kotlin - Android KTX
Introduction to Kotlin - Android KTX
Syed Awais Mazhar Bukhari
 
Koin Quickstart
Koin QuickstartKoin Quickstart
Koin Quickstart
Matthew Clarke
 
Android with kotlin course
Android with kotlin courseAndroid with kotlin course
Android with kotlin course
Abdul Rahman Masri Attal
 
Kotlin Language powerpoint show file
Kotlin Language powerpoint show fileKotlin Language powerpoint show file
Kotlin Language powerpoint show file
Saurabh Tripathi
 
Viva file
Viva fileViva file
Viva file
anupamasingh87
 
Getting Started With Kotlin
Getting Started With KotlinGetting Started With Kotlin
Getting Started With Kotlin
Gaurav sharma
 
Projects Valhalla, Loom and GraalVM at JUG Mainz
Projects Valhalla, Loom and GraalVM at JUG MainzProjects Valhalla, Loom and GraalVM at JUG Mainz
Projects Valhalla, Loom and GraalVM at JUG Mainz
Vadym Kazulkin
 
Eurosport's Kodakademi #1
Eurosport's Kodakademi #1Eurosport's Kodakademi #1
Eurosport's Kodakademi #1
Benjamin Baumann
 
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Victor Rentea
 
Introduction To Grails
Introduction To GrailsIntroduction To Grails
Introduction To Grails
Eric Berry
 
Invoke dynamite in Java EE with invoke dynamic
Invoke dynamite in Java EE with invoke dynamicInvoke dynamite in Java EE with invoke dynamic
Invoke dynamite in Java EE with invoke dynamic
Antoine Sabot-Durand
 
Android Architecture Components with Kotlin
Android Architecture Components with KotlinAndroid Architecture Components with Kotlin
Android Architecture Components with Kotlin
Adit Lal
 
Say Goodbye To Java: Getting Started With Kotlin For Android Development
Say Goodbye To Java: Getting Started With Kotlin For Android DevelopmentSay Goodbye To Java: Getting Started With Kotlin For Android Development
Say Goodbye To Java: Getting Started With Kotlin For Android Development
Adam Magaña
 
Java 201 Intro to Test Driven Development in Java
Java 201   Intro to Test Driven Development in JavaJava 201   Intro to Test Driven Development in Java
Java 201 Intro to Test Driven Development in Java
agorolabs
 
Add (Syntactic) Sugar To Your Java
Add (Syntactic) Sugar To Your JavaAdd (Syntactic) Sugar To Your Java
Add (Syntactic) Sugar To Your Java
Pascal-Louis Perez
 
Generics On The JVM (What you don't know will hurt you)
Generics On The JVM (What you don't know will hurt you)Generics On The JVM (What you don't know will hurt you)
Generics On The JVM (What you don't know will hurt you)
Garth Gilmour
 
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
DevelopIntelligence
 
Static or Dynamic Typing? Why not both?
Static or Dynamic Typing? Why not both?Static or Dynamic Typing? Why not both?
Static or Dynamic Typing? Why not both?
Mario Camou Riveroll
 
Kotlin
KotlinKotlin

Was ist angesagt? (20)

Atlassian Groovy Plugins
Atlassian Groovy PluginsAtlassian Groovy Plugins
Atlassian Groovy Plugins
 
Introduction to Kotlin - Android KTX
Introduction to Kotlin - Android KTXIntroduction to Kotlin - Android KTX
Introduction to Kotlin - Android KTX
 
Koin Quickstart
Koin QuickstartKoin Quickstart
Koin Quickstart
 
Android with kotlin course
Android with kotlin courseAndroid with kotlin course
Android with kotlin course
 
Kotlin Language powerpoint show file
Kotlin Language powerpoint show fileKotlin Language powerpoint show file
Kotlin Language powerpoint show file
 
Viva file
Viva fileViva file
Viva file
 
Getting Started With Kotlin
Getting Started With KotlinGetting Started With Kotlin
Getting Started With Kotlin
 
Projects Valhalla, Loom and GraalVM at JUG Mainz
Projects Valhalla, Loom and GraalVM at JUG MainzProjects Valhalla, Loom and GraalVM at JUG Mainz
Projects Valhalla, Loom and GraalVM at JUG Mainz
 
Eurosport's Kodakademi #1
Eurosport's Kodakademi #1Eurosport's Kodakademi #1
Eurosport's Kodakademi #1
 
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
Evolving a Clean, Pragmatic Architecture at JBCNConf 2019
 
Introduction To Grails
Introduction To GrailsIntroduction To Grails
Introduction To Grails
 
Invoke dynamite in Java EE with invoke dynamic
Invoke dynamite in Java EE with invoke dynamicInvoke dynamite in Java EE with invoke dynamic
Invoke dynamite in Java EE with invoke dynamic
 
Android Architecture Components with Kotlin
Android Architecture Components with KotlinAndroid Architecture Components with Kotlin
Android Architecture Components with Kotlin
 
Say Goodbye To Java: Getting Started With Kotlin For Android Development
Say Goodbye To Java: Getting Started With Kotlin For Android DevelopmentSay Goodbye To Java: Getting Started With Kotlin For Android Development
Say Goodbye To Java: Getting Started With Kotlin For Android Development
 
Java 201 Intro to Test Driven Development in Java
Java 201   Intro to Test Driven Development in JavaJava 201   Intro to Test Driven Development in Java
Java 201 Intro to Test Driven Development in Java
 
Add (Syntactic) Sugar To Your Java
Add (Syntactic) Sugar To Your JavaAdd (Syntactic) Sugar To Your Java
Add (Syntactic) Sugar To Your Java
 
Generics On The JVM (What you don't know will hurt you)
Generics On The JVM (What you don't know will hurt you)Generics On The JVM (What you don't know will hurt you)
Generics On The JVM (What you don't know will hurt you)
 
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
Whats New in Java 5, 6, & 7 (Webinar Presentation - June 2013)
 
Static or Dynamic Typing? Why not both?
Static or Dynamic Typing? Why not both?Static or Dynamic Typing? Why not both?
Static or Dynamic Typing? Why not both?
 
Kotlin
KotlinKotlin
Kotlin
 

Ähnlich wie Dear Kotliners - Java Developers are Humans too

Programming with Kotlin
Programming with KotlinProgramming with Kotlin
Programming with Kotlin
David Gassner
 
Having Fun with Kotlin Android - DILo Surabaya
Having Fun with Kotlin Android - DILo SurabayaHaving Fun with Kotlin Android - DILo Surabaya
Having Fun with Kotlin Android - DILo Surabaya
DILo Surabaya
 
Kotlin for Android Developers - 1
Kotlin for Android Developers - 1Kotlin for Android Developers - 1
Kotlin for Android Developers - 1
Mohamed Nabil, MSc.
 
Kotlin's Interoperability with Java
Kotlin's Interoperability with Java Kotlin's Interoperability with Java
Kotlin's Interoperability with Java
Big Nerd Ranch
 
Kotlin for Android Development
Kotlin for Android DevelopmentKotlin for Android Development
Kotlin for Android Development
Speck&Tech
 
Excuse me, sir, do you have a moment to talk about tests in Kotlin
Excuse me, sir, do you have a moment to talk about tests in KotlinExcuse me, sir, do you have a moment to talk about tests in Kotlin
Excuse me, sir, do you have a moment to talk about tests in Kotlin
leonsabr
 
Introduction to Koltin for Android Part I
Introduction to Koltin for Android Part I Introduction to Koltin for Android Part I
Introduction to Koltin for Android Part I
Atif AbbAsi
 
Intro to Kotlin
Intro to KotlinIntro to Kotlin
Intro to Kotlin
Magda Miu
 
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?Kotlin: Why Do You Care?
Kotlin: Why Do You Care?
intelliyole
 
Kotlin presentation
Kotlin presentation Kotlin presentation
Kotlin presentation
MobileAcademy
 
Android Application Development (1).pptx
Android Application Development (1).pptxAndroid Application Development (1).pptx
Android Application Development (1).pptx
adityakale2110
 
Kotlin Native - C / Swift Interop - ACCU Autmn 2019
Kotlin Native - C / Swift Interop - ACCU Autmn 2019Kotlin Native - C / Swift Interop - ACCU Autmn 2019
Kotlin Native - C / Swift Interop - ACCU Autmn 2019
Eamonn Boyle
 
Building Mobile Apps with Android
Building Mobile Apps with AndroidBuilding Mobile Apps with Android
Building Mobile Apps with Android
Kurt Renzo Acosta
 
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor BuzatovićJavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Kotlin
KotlinKotlin
Kotlin intro
Kotlin introKotlin intro
Kotlin intro
Elifarley Cruz
 
Oscon Java Testing on the Fast Lane
Oscon Java Testing on the Fast LaneOscon Java Testing on the Fast Lane
Oscon Java Testing on the Fast Lane
Andres Almiray
 
Be More Productive with Kotlin
Be More Productive with KotlinBe More Productive with Kotlin
Be More Productive with Kotlin
Brandon Wever
 
Kotlin for Android - Vali Iorgu - mRready
Kotlin for Android - Vali Iorgu - mRreadyKotlin for Android - Vali Iorgu - mRready
Kotlin for Android - Vali Iorgu - mRready
MobileAcademy
 
Kotlin wonderland
Kotlin wonderlandKotlin wonderland
Kotlin wonderland
Jedsada Tiwongvokul
 

Ähnlich wie Dear Kotliners - Java Developers are Humans too (20)

Programming with Kotlin
Programming with KotlinProgramming with Kotlin
Programming with Kotlin
 
Having Fun with Kotlin Android - DILo Surabaya
Having Fun with Kotlin Android - DILo SurabayaHaving Fun with Kotlin Android - DILo Surabaya
Having Fun with Kotlin Android - DILo Surabaya
 
Kotlin for Android Developers - 1
Kotlin for Android Developers - 1Kotlin for Android Developers - 1
Kotlin for Android Developers - 1
 
Kotlin's Interoperability with Java
Kotlin's Interoperability with Java Kotlin's Interoperability with Java
Kotlin's Interoperability with Java
 
Kotlin for Android Development
Kotlin for Android DevelopmentKotlin for Android Development
Kotlin for Android Development
 
Excuse me, sir, do you have a moment to talk about tests in Kotlin
Excuse me, sir, do you have a moment to talk about tests in KotlinExcuse me, sir, do you have a moment to talk about tests in Kotlin
Excuse me, sir, do you have a moment to talk about tests in Kotlin
 
Introduction to Koltin for Android Part I
Introduction to Koltin for Android Part I Introduction to Koltin for Android Part I
Introduction to Koltin for Android Part I
 
Intro to Kotlin
Intro to KotlinIntro to Kotlin
Intro to Kotlin
 
Kotlin: Why Do You Care?
Kotlin: Why Do You Care?Kotlin: Why Do You Care?
Kotlin: Why Do You Care?
 
Kotlin presentation
Kotlin presentation Kotlin presentation
Kotlin presentation
 
Android Application Development (1).pptx
Android Application Development (1).pptxAndroid Application Development (1).pptx
Android Application Development (1).pptx
 
Kotlin Native - C / Swift Interop - ACCU Autmn 2019
Kotlin Native - C / Swift Interop - ACCU Autmn 2019Kotlin Native - C / Swift Interop - ACCU Autmn 2019
Kotlin Native - C / Swift Interop - ACCU Autmn 2019
 
Building Mobile Apps with Android
Building Mobile Apps with AndroidBuilding Mobile Apps with Android
Building Mobile Apps with Android
 
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor BuzatovićJavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
JavaCro'14 - Is there Kotlin after Java 8 – Ivan Turčinović and Igor Buzatović
 
Kotlin
KotlinKotlin
Kotlin
 
Kotlin intro
Kotlin introKotlin intro
Kotlin intro
 
Oscon Java Testing on the Fast Lane
Oscon Java Testing on the Fast LaneOscon Java Testing on the Fast Lane
Oscon Java Testing on the Fast Lane
 
Be More Productive with Kotlin
Be More Productive with KotlinBe More Productive with Kotlin
Be More Productive with Kotlin
 
Kotlin for Android - Vali Iorgu - mRready
Kotlin for Android - Vali Iorgu - mRreadyKotlin for Android - Vali Iorgu - mRready
Kotlin for Android - Vali Iorgu - mRready
 
Kotlin wonderland
Kotlin wonderlandKotlin wonderland
Kotlin wonderland
 

Kürzlich hochgeladen

Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Recommendation System using RAG Architecture
Recommendation System using RAG ArchitectureRecommendation System using RAG Architecture
Recommendation System using RAG Architecture
fredae14
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 

Kürzlich hochgeladen (20)

Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Recommendation System using RAG Architecture
Recommendation System using RAG ArchitectureRecommendation System using RAG Architecture
Recommendation System using RAG Architecture
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 

Dear Kotliners - Java Developers are Humans too