SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Intro to Kotlin
15.10.2015@Infinum Dino Sulić & Tomislav Homan
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Java on Android - the bad parts
● Java 7 was out 2011. - partial support 2013.
● Java 8 was out 2014. - no support announced in the near future
● Null references
● Covariant arrays
● Raw types
● SAM types
● Checked exceptions
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Alternatives to Java
● Xtend - Nice try, but very hard to work with in practice because
of IDE support
● Scala - We are engineers with deadlines, not scientists. Also 80k
methods
● Groovy - Very nice, but not type safe and adds over 30k
methods. IMHO best alternative - to our alternative :)
● Closure, etc, etc…
● Kotlin
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Advantages of Kotlin (I)
● Modern statically typed, object oriented language that borrows
many ideas from functional languages
● Fast learning curve - inspired by Scala and C#. Scaled down
Scala :)
● Meant to be used for building large software systems
● Engineered to be highly interoperable with Java - you can use
existing code base w/o (many) problems
Advantages of Kotlin (II)
● The team behind it is JetBrains, creators of IntelliJ which is
Android Studio based on. Also has some contributions from
James Strachan - creator of Groovy
● Significantly more concise and readable than Java, which
means it’s easier to maintain
● Lightweight - Kotlin stdlib has 8k methods
● If it means something to someone - it also compiles to
Javascript
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
(Possible) disadvantages (I)
● Code generation - After a long struggle works with, for now,
limited support - Dagger 2 works
● Mocking and testing - managed to run AndroidTestCase with
Mockito, but no serious testing done
● IDE was still bit unstable few months ago, but it seems fine now
and it can only get better. But still be patient for now
(Possible) disadvantages (II)
● Java could break when using immutable collections returned
from Kotlin code
● New language that still evolves - teams need to establish code
conventions - still no "Effective Kotlin" :)
● Interoperability with new Jack and Jill compiler - should be all
right, but we have to monitor the situation
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Features
Selection of features compared to
Java
First thing that one will notice is function declaration includes
keyword fun
Functions (I)
Parameter types are defined in Scala (Or Swift) way
Functions (II)
Default parameters come in handy
Functions (III)
Named parameters as a good substitution for builders
Functions (IV)
Functions are first-class Kotlin citizens
Functions (V)
Lambdas on Android? Not using Java
Functions (VI)
Lambdas on Android? Kotlin has them
Functions (VII)
Nice Retrofit example - cumbersome using Java
Functions (VIII)
Nice Retrofit example - pretty decent using Kotlin
Functions (IX)
Utility methods vs. extension functions
Functions (X)
Kotlin inferes types
Types (I)
It is difficult to write “final”. Kotlin makes it easier with val keyword
Types (II)
Java fields become Kotlin property. No need for getter / setters
unless you want to override them
Properties (I)
If you have the need for some validation…
Properties (II)
...you can still override accessors and access backing field
Properties (III)
Nothing to say here
Null safety (I)
You have to explicitly use nullable type if you want to allow nulls
Null safety (II)
If you use nulls though, safe calls, Elvis and smart casts are here to
help
Null safety (III)
Explicit vs. smart casts
Casting
In order to make this business logic right….
Data classes (I)
You have to do some work
Data classes (II)
In order to make this business logic right….
Data classes (III)
...you use data modifier
Data classes (IV)
Typical data repository
Collections (I)
Some business logic
Collections (II)
And lots of error prone work
Collections (III)
Same typical repository
Collections (IV)
Some business logic. Collections are really immutable
Collections (V)
But much less work
Collections (VI)
Just one more example...
Various (I)
...how Kotlin gets some things better
Various (II)
Out of scope
● Generics - variance, covariance, contravariance
● Annotations
● Reflection
● Operator overloading
● Type-safe builders
● Dynamic types
● Java interop
● …and lot more
● http://kotlinlang.org/docs/reference/
Content
● Java on Android - the bad parts
● Alternatives to Java
● Advantages of Kotlin
● (Possible) disadvantages
● Features
● …
● Migration to Kotlin
Migration to Koltin
● https://kotlinlang.org/docs/tutorials/kotlin-android.html
● Use convert code option - but check thoroughly afterwards
● Use clean code option after upgrading Kotlin version
● KotlinFrontEndException
● > sudo find . -name ".DS_Store" -depth -exec rm {} ;
● This list was much longer few months ago
Intro to kotlin

Weitere ähnliche Inhalte

Was ist angesagt?

Kotlin Language powerpoint show file
Kotlin Language powerpoint show fileKotlin Language powerpoint show file
Kotlin Language powerpoint show fileSaurabh Tripathi
 
Kotlin vs Java | Edureka
Kotlin vs Java | EdurekaKotlin vs Java | Edureka
Kotlin vs Java | EdurekaEdureka!
 
Android Development with Kotlin, Part 1 - Introduction
Android Development with Kotlin, Part 1 - IntroductionAndroid Development with Kotlin, Part 1 - Introduction
Android Development with Kotlin, Part 1 - IntroductionAndreas Jakl
 
Introduction to Android Develpment
Introduction to Android DevelpmentIntroduction to Android Develpment
Introduction to Android DevelpmentNikhilPawar932560
 
Kotlin InDepth Tutorial for beginners 2022
Kotlin InDepth Tutorial for beginners 2022Kotlin InDepth Tutorial for beginners 2022
Kotlin InDepth Tutorial for beginners 2022Simplilearn
 
Data Persistence in Android with Room Library
Data Persistence in Android with Room LibraryData Persistence in Android with Room Library
Data Persistence in Android with Room LibraryReinvently
 
Elements of Java Language
Elements of Java Language Elements of Java Language
Elements of Java Language Hitesh-Java
 
Rapid Web API development with Kotlin and Ktor
Rapid Web API development with Kotlin and KtorRapid Web API development with Kotlin and Ktor
Rapid Web API development with Kotlin and KtorTrayan Iliev
 
Introduction to Kotlin for Android developers
Introduction to Kotlin for Android developersIntroduction to Kotlin for Android developers
Introduction to Kotlin for Android developersMohamed Wael
 
Introduction to kotlin and OOP in Kotlin
Introduction to kotlin and OOP in KotlinIntroduction to kotlin and OOP in Kotlin
Introduction to kotlin and OOP in Kotlinvriddhigupta
 
Android MVVM architecture using Kotlin, Dagger2, LiveData, MediatorLiveData
Android MVVM architecture using Kotlin, Dagger2, LiveData, MediatorLiveDataAndroid MVVM architecture using Kotlin, Dagger2, LiveData, MediatorLiveData
Android MVVM architecture using Kotlin, Dagger2, LiveData, MediatorLiveDataWaheed Nazir
 

Was ist angesagt? (20)

Kotlin Language powerpoint show file
Kotlin Language powerpoint show fileKotlin Language powerpoint show file
Kotlin Language powerpoint show file
 
Kotlin
KotlinKotlin
Kotlin
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
Kotlin vs Java | Edureka
Kotlin vs Java | EdurekaKotlin vs Java | Edureka
Kotlin vs Java | Edureka
 
Introduction to Kotlin - Android KTX
Introduction to Kotlin - Android KTXIntroduction to Kotlin - Android KTX
Introduction to Kotlin - Android KTX
 
Android Development with Kotlin, Part 1 - Introduction
Android Development with Kotlin, Part 1 - IntroductionAndroid Development with Kotlin, Part 1 - Introduction
Android Development with Kotlin, Part 1 - Introduction
 
Kotlin on android
Kotlin on androidKotlin on android
Kotlin on android
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
Introduction to Kotlin
Introduction to KotlinIntroduction to Kotlin
Introduction to Kotlin
 
Introduction to Android Develpment
Introduction to Android DevelpmentIntroduction to Android Develpment
Introduction to Android Develpment
 
Kotlin - Better Java
Kotlin - Better JavaKotlin - Better Java
Kotlin - Better Java
 
Kotlin
KotlinKotlin
Kotlin
 
Kotlin InDepth Tutorial for beginners 2022
Kotlin InDepth Tutorial for beginners 2022Kotlin InDepth Tutorial for beginners 2022
Kotlin InDepth Tutorial for beginners 2022
 
Data Persistence in Android with Room Library
Data Persistence in Android with Room LibraryData Persistence in Android with Room Library
Data Persistence in Android with Room Library
 
Elements of Java Language
Elements of Java Language Elements of Java Language
Elements of Java Language
 
Rapid Web API development with Kotlin and Ktor
Rapid Web API development with Kotlin and KtorRapid Web API development with Kotlin and Ktor
Rapid Web API development with Kotlin and Ktor
 
Introduction to Kotlin for Android developers
Introduction to Kotlin for Android developersIntroduction to Kotlin for Android developers
Introduction to Kotlin for Android developers
 
Introduction to kotlin and OOP in Kotlin
Introduction to kotlin and OOP in KotlinIntroduction to kotlin and OOP in Kotlin
Introduction to kotlin and OOP in Kotlin
 
Kotlin
KotlinKotlin
Kotlin
 
Android MVVM architecture using Kotlin, Dagger2, LiveData, MediatorLiveData
Android MVVM architecture using Kotlin, Dagger2, LiveData, MediatorLiveDataAndroid MVVM architecture using Kotlin, Dagger2, LiveData, MediatorLiveData
Android MVVM architecture using Kotlin, Dagger2, LiveData, MediatorLiveData
 

Ähnlich wie Intro to 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 DevelopmentAdam Magaña
 
Modern Programming Languages - An overview
Modern Programming Languages - An overviewModern Programming Languages - An overview
Modern Programming Languages - An overviewAyman Mahfouz
 
Kotlin - A Programming Language
Kotlin - A Programming Language Kotlin - A Programming Language
Kotlin - A Programming Language Mobio Solutions
 
Exploring Kotlin language basics for Android App development
Exploring Kotlin language basics for Android App developmentExploring Kotlin language basics for Android App development
Exploring Kotlin language basics for Android App developmentJayaprakash R
 
Kotlin vs Java • Bapusaheb Patil • TechieAid Talk
Kotlin vs Java • Bapusaheb Patil • TechieAid TalkKotlin vs Java • Bapusaheb Patil • TechieAid Talk
Kotlin vs Java • Bapusaheb Patil • TechieAid TalkBapusaheb Patil
 
Is this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin languageIs this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin languageAntonis Lilis
 
Introduction_to_Kotlin.pptx
Introduction_to_Kotlin.pptxIntroduction_to_Kotlin.pptx
Introduction_to_Kotlin.pptxHARSHITJAIN068
 
The Journey of Craftmanship – Kotlin in Action
The Journey of Craftmanship – Kotlin in ActionThe Journey of Craftmanship – Kotlin in Action
The Journey of Craftmanship – Kotlin in Actionraditya gumay
 
MOOC_PRESENTATION_KOTLIN[1].pptx
MOOC_PRESENTATION_KOTLIN[1].pptxMOOC_PRESENTATION_KOTLIN[1].pptx
MOOC_PRESENTATION_KOTLIN[1].pptxkamalkantmaurya1
 
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...mCloud
 
Everything You Were Taught About Java Is Wrong
Everything You Were Taught About Java Is WrongEverything You Were Taught About Java Is Wrong
Everything You Were Taught About Java Is WrongTim Boudreau
 
A short introduction to the Kotlin language for Java developers
A short introduction to the Kotlin language for Java developersA short introduction to the Kotlin language for Java developers
A short introduction to the Kotlin language for Java developersAntonis Lilis
 
Effective Scala: Programming Patterns
Effective Scala: Programming PatternsEffective Scala: Programming Patterns
Effective Scala: Programming PatternsVasil Remeniuk
 
26 top angular 8 interview questions to know in 2020 [www.full stack.cafe]
26 top angular 8 interview questions to know in 2020   [www.full stack.cafe]26 top angular 8 interview questions to know in 2020   [www.full stack.cafe]
26 top angular 8 interview questions to know in 2020 [www.full stack.cafe]Alex Ershov
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Jérôme Petazzoni
 
Lightning talk: Kotlin
Lightning talk: KotlinLightning talk: Kotlin
Lightning talk: KotlinEvolve
 

Ähnlich wie Intro to kotlin (20)

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
 
Modern Programming Languages - An overview
Modern Programming Languages - An overviewModern Programming Languages - An overview
Modern Programming Languages - An overview
 
Kotlin - A Programming Language
Kotlin - A Programming Language Kotlin - A Programming Language
Kotlin - A Programming Language
 
Kotlin
KotlinKotlin
Kotlin
 
Exploring Kotlin language basics for Android App development
Exploring Kotlin language basics for Android App developmentExploring Kotlin language basics for Android App development
Exploring Kotlin language basics for Android App development
 
Kotlin vs Java • Bapusaheb Patil • TechieAid Talk
Kotlin vs Java • Bapusaheb Patil • TechieAid TalkKotlin vs Java • Bapusaheb Patil • TechieAid Talk
Kotlin vs Java • Bapusaheb Patil • TechieAid Talk
 
Is this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin languageIs this Swift for Android? A short introduction to the Kotlin language
Is this Swift for Android? A short introduction to the Kotlin language
 
Introduction_to_Kotlin.pptx
Introduction_to_Kotlin.pptxIntroduction_to_Kotlin.pptx
Introduction_to_Kotlin.pptx
 
The Journey of Craftmanship – Kotlin in Action
The Journey of Craftmanship – Kotlin in ActionThe Journey of Craftmanship – Kotlin in Action
The Journey of Craftmanship – Kotlin in Action
 
MOOC_PRESENTATION_KOTLIN[1].pptx
MOOC_PRESENTATION_KOTLIN[1].pptxMOOC_PRESENTATION_KOTLIN[1].pptx
MOOC_PRESENTATION_KOTLIN[1].pptx
 
moocs_ppt.pptx
moocs_ppt.pptxmoocs_ppt.pptx
moocs_ppt.pptx
 
Groovy android
Groovy androidGroovy android
Groovy android
 
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...
Developers’ mDay u Banjoj Luci - Duško Bajić, Kotlin User Group Bosnia – Kotl...
 
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ć
 
Everything You Were Taught About Java Is Wrong
Everything You Were Taught About Java Is WrongEverything You Were Taught About Java Is Wrong
Everything You Were Taught About Java Is Wrong
 
A short introduction to the Kotlin language for Java developers
A short introduction to the Kotlin language for Java developersA short introduction to the Kotlin language for Java developers
A short introduction to the Kotlin language for Java developers
 
Effective Scala: Programming Patterns
Effective Scala: Programming PatternsEffective Scala: Programming Patterns
Effective Scala: Programming Patterns
 
26 top angular 8 interview questions to know in 2020 [www.full stack.cafe]
26 top angular 8 interview questions to know in 2020   [www.full stack.cafe]26 top angular 8 interview questions to know in 2020   [www.full stack.cafe]
26 top angular 8 interview questions to know in 2020 [www.full stack.cafe]
 
Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?Docker and Go: why did we decide to write Docker in Go?
Docker and Go: why did we decide to write Docker in Go?
 
Lightning talk: Kotlin
Lightning talk: KotlinLightning talk: Kotlin
Lightning talk: Kotlin
 

Kürzlich hochgeladen

OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 

Kürzlich hochgeladen (20)

OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 

Intro to kotlin

  • 1. Intro to Kotlin 15.10.2015@Infinum Dino Sulić & Tomislav Homan
  • 2. Content ● Java on Android - the bad parts ● Alternatives to Java ● Advantages of Kotlin ● (Possible) disadvantages ● Features ● … ● Migration to Kotlin
  • 3. Content ● Java on Android - the bad parts ● Alternatives to Java ● Advantages of Kotlin ● (Possible) disadvantages ● Features ● … ● Migration to Kotlin
  • 4. Java on Android - the bad parts ● Java 7 was out 2011. - partial support 2013. ● Java 8 was out 2014. - no support announced in the near future ● Null references ● Covariant arrays ● Raw types ● SAM types ● Checked exceptions
  • 5. Content ● Java on Android - the bad parts ● Alternatives to Java ● Advantages of Kotlin ● (Possible) disadvantages ● Features ● … ● Migration to Kotlin
  • 6. Alternatives to Java ● Xtend - Nice try, but very hard to work with in practice because of IDE support ● Scala - We are engineers with deadlines, not scientists. Also 80k methods ● Groovy - Very nice, but not type safe and adds over 30k methods. IMHO best alternative - to our alternative :) ● Closure, etc, etc… ● Kotlin
  • 7. Content ● Java on Android - the bad parts ● Alternatives to Java ● Advantages of Kotlin ● (Possible) disadvantages ● Features ● … ● Migration to Kotlin
  • 8. Advantages of Kotlin (I) ● Modern statically typed, object oriented language that borrows many ideas from functional languages ● Fast learning curve - inspired by Scala and C#. Scaled down Scala :) ● Meant to be used for building large software systems ● Engineered to be highly interoperable with Java - you can use existing code base w/o (many) problems
  • 9. Advantages of Kotlin (II) ● The team behind it is JetBrains, creators of IntelliJ which is Android Studio based on. Also has some contributions from James Strachan - creator of Groovy ● Significantly more concise and readable than Java, which means it’s easier to maintain ● Lightweight - Kotlin stdlib has 8k methods ● If it means something to someone - it also compiles to Javascript
  • 10. Content ● Java on Android - the bad parts ● Alternatives to Java ● Advantages of Kotlin ● (Possible) disadvantages ● Features ● … ● Migration to Kotlin
  • 11. (Possible) disadvantages (I) ● Code generation - After a long struggle works with, for now, limited support - Dagger 2 works ● Mocking and testing - managed to run AndroidTestCase with Mockito, but no serious testing done ● IDE was still bit unstable few months ago, but it seems fine now and it can only get better. But still be patient for now
  • 12. (Possible) disadvantages (II) ● Java could break when using immutable collections returned from Kotlin code ● New language that still evolves - teams need to establish code conventions - still no "Effective Kotlin" :) ● Interoperability with new Jack and Jill compiler - should be all right, but we have to monitor the situation
  • 13. Content ● Java on Android - the bad parts ● Alternatives to Java ● Advantages of Kotlin ● (Possible) disadvantages ● Features ● … ● Migration to Kotlin
  • 14. Features Selection of features compared to Java
  • 15. First thing that one will notice is function declaration includes keyword fun Functions (I)
  • 16. Parameter types are defined in Scala (Or Swift) way Functions (II)
  • 17. Default parameters come in handy Functions (III)
  • 18. Named parameters as a good substitution for builders Functions (IV)
  • 19. Functions are first-class Kotlin citizens Functions (V)
  • 20. Lambdas on Android? Not using Java Functions (VI)
  • 21. Lambdas on Android? Kotlin has them Functions (VII)
  • 22. Nice Retrofit example - cumbersome using Java Functions (VIII)
  • 23. Nice Retrofit example - pretty decent using Kotlin Functions (IX)
  • 24. Utility methods vs. extension functions Functions (X)
  • 26. It is difficult to write “final”. Kotlin makes it easier with val keyword Types (II)
  • 27. Java fields become Kotlin property. No need for getter / setters unless you want to override them Properties (I)
  • 28. If you have the need for some validation… Properties (II)
  • 29. ...you can still override accessors and access backing field Properties (III)
  • 30. Nothing to say here Null safety (I)
  • 31. You have to explicitly use nullable type if you want to allow nulls Null safety (II)
  • 32. If you use nulls though, safe calls, Elvis and smart casts are here to help Null safety (III)
  • 33. Explicit vs. smart casts Casting
  • 34. In order to make this business logic right…. Data classes (I)
  • 35. You have to do some work Data classes (II)
  • 36. In order to make this business logic right…. Data classes (III)
  • 37. ...you use data modifier Data classes (IV)
  • 40. And lots of error prone work Collections (III)
  • 42. Some business logic. Collections are really immutable Collections (V)
  • 43. But much less work Collections (VI)
  • 44. Just one more example... Various (I)
  • 45. ...how Kotlin gets some things better Various (II)
  • 46. Out of scope ● Generics - variance, covariance, contravariance ● Annotations ● Reflection ● Operator overloading ● Type-safe builders ● Dynamic types ● Java interop ● …and lot more ● http://kotlinlang.org/docs/reference/
  • 47. Content ● Java on Android - the bad parts ● Alternatives to Java ● Advantages of Kotlin ● (Possible) disadvantages ● Features ● … ● Migration to Kotlin
  • 48. Migration to Koltin ● https://kotlinlang.org/docs/tutorials/kotlin-android.html ● Use convert code option - but check thoroughly afterwards ● Use clean code option after upgrading Kotlin version ● KotlinFrontEndException ● > sudo find . -name ".DS_Store" -depth -exec rm {} ; ● This list was much longer few months ago