![Page 1: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/1.jpg)
Introduction to Kotlin for Android App Development
Hardik Trivedi
![Page 2: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/2.jpg)
Hardik Trivedi● I am a computer program writer
● Works at Globant, Pune, IN
● An active community speaker
● Co-author of an upcoming book "Kotlin Blueprints"
● I love writing tech blogs
● I am mentor for college graduates and professionals and
consultant to companies
About MeEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
![Page 3: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/3.jpg)
What is Kotlin?Email: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
● Statically typed object oriented language
● Targets JVM, Android and even JavaScript
● Can do anything which Java can.
● Combines Object Oriented and Functional Programming
features.
● But it’s not Functional language.
● Developed and maintained by JetBrains
● Open source
● Released under Apache 2 OSS License
![Page 4: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/4.jpg)
Why Kotlin?Email: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
Drastically reduce the amount of
boilerplate code.
Concise
Avoid entire classes of errors
such as Null pointer exception
Safe
100% interoperable with Java. Support
for Android, Browser and
Native
Interoperable
Excellent tooling support from
JetBrains
Tool-friendly
![Page 5: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/5.jpg)
Why Kotlin?Email: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
Drastically reduce the amount of
boilerplate code.
Concise
Avoid entire classes of errors
such as Null pointer exception
Safe
100% interoperable with Java. Support
for Android, Browser and
Native
Interoperable
Excellent tooling support from
JetBrains
Tool-friendly
![Page 6: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/6.jpg)
Why Kotlin?Email: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
Drastically reduce the amount of
boilerplate code.
Concise
Avoid entire classes of errors
such as Null pointer exception
Safe
100% interoperable with Java. Support
for Android, Browser and
Native
Interoperable
Excellent tooling support from
JetBrains
Tool-friendly
![Page 7: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/7.jpg)
Why Kotlin?Email: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
Drastically reduce the amount of
boilerplate code.
Concise
Avoid entire classes of errors
such as Null pointer exception
Safe
100% interoperable with Java. Support
for Android, Browser and
Native
Interoperable
Excellent tooling support from
JetBrains
Tool-friendly
![Page 8: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/8.jpg)
Why Kotlin?Email: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
● Stuck between Java 6 and 7
● No Lambdas, No Streams
● Inability to add methods in platform APIs, have to use Utils
for that
● Loads of NullPointerException
● For Android, it’s Nullability everywhere
● For Android, it loves ceremonies of API
● Need of modern and smart coding language
![Page 9: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/9.jpg)
Kotlin used by industry giantsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
![Page 10: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/10.jpg)
Getting StartedEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
● Kotlin is shipped with IntelliJ IDEA 15
● Plugin for Eclipse Luna or greater version. Setup Link
● Try online IDE http://try.kotlinlang.org/
● Android Studio 3.0 is released and Kotlin is by default supported. No other
setup required. Download Android Studio 3.0
● To use Kotlin with the older versions or below Android Studio 3.0, we need to
manually install the latest Kotlin Plugin. Setup Link
![Page 11: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/11.jpg)
Syntax Crash CourseCompile some Kotlin in mind
![Page 12: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/12.jpg)
Object Declaration and InitializationEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// Immediate assignment
val num: Int = 10
// Implicitly inferred String type
val pName = "Hardik Trivedi"
// Explicit type declaration
var personList:List<String> = ArrayList()
// use underscores to make number constants more readable
val creditCardNumber = 1234_5678_9012_3456L
![Page 13: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/13.jpg)
val vs varEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// Immutable
“Anything which will not change is val”
// Mutable
“If value will be changed with time use var”
![Page 14: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/14.jpg)
If as expressionEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
/* if branches can be blocks, and the last
expression is the value of a block */
val max = if (a > b) {
println("a is greater than b")
a
}
else {
println("a is not greater than b")
b
}
// As expression
val max = if (a > b) a else b
![Page 15: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/15.jpg)
When functionEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// when replaces the switch operator of C, Java-like languages.
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
when (x) {
in 1,2 -> print("X is either 1 or 2")
in validNumbers -> print("x is valid")
in 10..20 -> print("x is inside the range")
else -> print("none of the above")
}
![Page 16: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/16.jpg)
LoopsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// for loop iterates through anything that provides an iterator.
val list = listOf("Optimus Prime", "Bumblebee", "Ironhide")
// Simple for loop
for (item in list) {
println(item)
}
// De structured
for ((index, value) in list.withIndex()) {
println("the element at $index is $value")
}
![Page 17: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/17.jpg)
FunctionsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
//Functions in Kotlin are declared using the fun keyword
fun sum(a: Int, b: Int): Int {
return a + b
}
/*When a function returns a single expression, the curly braces can be omitted and
the body is specified after a = symbol*/
fun sum(a: Int, b: Int, c: Int) = a + b + c
// Function with default argument
fun sum(a: Int, b: Int, c: Int, d: Int = 0) = a + b + c + d
![Page 18: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/18.jpg)
Data classesEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
data class Country(val name: String, val capital: String)
//Code
val india=Country("India","New Delhi")
val norway=Country(capital = "Oslo",name = "Norway")
val (name,capital)=india
println(india.toString())
println(norway.toString())
println("$name ,$capital")
//Output
Country(name=India, capital=New Delhi)
Country(name=Norway, capital=Oslo)
India ,New Delhi
![Page 19: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/19.jpg)
Null SafetyEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
No more NullPointerException
Kotlin's type system is aimed to eliminate NullPointerException from our code.
![Page 20: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/20.jpg)
Null SafetyEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
var a: String = "abc"
a = null // compilation error
var b: String? = "abc"
b = null // ok
/* Now, if you call a method or access a property on a, it's guaranteed not to
cause an NPE, so you can safely say */
val l = a.length
val l = b.length//error: 'b' can be null NOW WHAT TO DO?
![Page 21: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/21.jpg)
Null SafetyEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
/* You can explicitly check if b is null, and handle the two options separately */
val l = if (b != null) b.length else -1
//Your second option is the safe call operator, written ?.
val length=b?.length
/* To perform a certain operation only for non-null values, you can use the safe call
operator together with let */
val listWithNulls: List<String?> = listOf("A", null)
for (item in listWithNulls) {
item?.let { println(it) } // prints A and ignores null
}
![Page 22: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/22.jpg)
ExtensionsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// Extension function
fun Date.isTuesday(): Boolean {
return getDay() == 2
}
// Somewhere in code
val date=Date()
println(date.isTuesday())
/* Similarly to functions, Kotlin supports extension properties */
val <T> List<T>.lastIndex: Int
get() = size - 1
![Page 23: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/23.jpg)
LambdasEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// Lambdas provides implementation of functional interface (which has single
abstract method-SAM)
button.setOnClickListener(v -> { doSomething() })
// Lambdas other usage
forecastResult.list.forEachIndexed { index, forecast ->
with(forecast) {
println("For index $index value is ${forecast.toString()}")
}
}
![Page 24: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/24.jpg)
Higher order functionsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
● Higher order functions are those which accepts functions as a parameter or
returns the function.fun Int.perform(other: Int, func: (Int, Int) -> Int): Int {
return func(this, other)
}
// Output
println(10.perform(20, { a, b -> a + b }))
println(10.perform(20) { a, b -> a - b })
println(10.perform(20, { a, b -> a * b }))
println(10.perform(20) { a, b -> a / b })
![Page 25: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/25.jpg)
Lazy or LateEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
● Lazy object gets initialised only while it’s first usage. And will remain always immutable. It’s a Lambda function.
override val toolbar by lazy { find<Toolbar>(R.id.toolbar) }
● It’s just a late initialisation with non null type. It remains mutable. Used when object is initialised by Dependency Injection or setUp method of unit test case
lateinit var mockLoanCalculator: LoanCalculator
@Before
public void setUp() throws Exception {
mockLoanCalculator = mock(LoanCalculator::class.java)
}
![Page 26: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/26.jpg)
Let and applyEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
/**
* Calls the specified function [block] with `this` value as its argument and returns
its result.
*/
val result = person.let { it.age * 2 }
/**
* Calls the specified function [block] with `this` value as its receiver and returns
`this` value.
*/
supportActionBar?.apply {
setDisplayHomeAsUpEnabled(true)
setDisplayShowHomeEnabled(true)
}
![Page 27: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/27.jpg)
Wow momentsSee Kotlin in Action !!!
![Page 28: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/28.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// Possible only if it's Java 8
public interface InterfaceA {
default void defaultMethod(){
System.out.println("Interface A
default method");
}
}
interface ToolbarManager {
fun initToolbar() {
toolbar.inflateMenu(R.menu.main_menu)
toolbar.setOnMenuItemClickListener {
// Your code
true
}
}
}
Java Kotlin
![Page 29: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/29.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
private String readInputStream(InputStream is) throws
Exception {
String line = null;
StringBuilder sb = new StringBuilder();
BufferedReader bufferedReader = new
BufferedReader(new InputStreamReader(is));
while ((line = bufferedReader.readLine()) != null)
{
sb.append(line);
}
bufferedReader.close();
return sb.toString();
}
val inputAsString =
is.bufferedReader().use
{ it.readText() }
// defaults to UTF-8
Java Kotlin
![Page 30: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/30.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
Button clickButton = (Button)
findViewById(R.id.clickButton);
clickButton.setOnClickListener( new
OnClickListener() {
@Override
public void onClick(View v) {
***Do what you want with the
click here***
}
});
import
kotlinx.android.synthetic.main.activity_
detail.*
clickButton.setOnClickListener {
***Do what you want with the click
here***
}
Java Kotlin
![Page 31: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/31.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
button.setVisibility(View.VISIBLE)
button.setVisibility(View.GONE)
fun View.visible() {
this.visibility = View.VISIBLE
}
fun View.gone() {
this.visibility = View.GONE
}
button.visible()
textView.gone()
Java Kotlin
![Page 32: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/32.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
public class MySingleton {
private static MySingleton myObj;
private MySingleton(){
}
public static MySingleton getInstance(){
if(myObj == null){
myObj = new MySingleton();
}
return myObj;
}
}
object MySingleton {
var num: Int = 0
fun domeSomeThing() {
println("Kotlin is awesome!!!")
}
}
Java Kotlin
![Page 33: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/33.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
SharedPreferences sharedpreferences =
getSharedPreferences(mypreference,
Context.MODE_PRIVATE);
email.setText(sharedpreferences.getStrin
g(Email, ""));
SharedPreferences.Editor editor =
sharedpreferences.edit();
editor.putString("email",
editor.apply();
private var email: String by
DelegatedPreference(this, "email", "")
email="[email protected]"
txtEmail.text=email
Java Kotlin
![Page 34: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/34.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
Movie movie = moviesList.get(position);
holder.title.setText(movie.getTitle());
holder.genre.setText(movie.getGenre());
holder.year.setText(movie.getYear());
Movie movie = moviesList[position]
with(movie) {
holder.title.text=title
holder.genre.text=genre
holder.year.text=year
}
Java Kotlin
![Page 35: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/35.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
private class GetWeatherTask extends
AsyncTask<String, Void, Forecast> {
protected Forecast doInBackground(String
zipCode) {
return WeatherAPI().execute(zipCode);
}
protected void onPostExecute(Forecast
result) {
showData(result);
}
}
new GetWeatherTask().execute(380015);
fun loadWeatherData() = async(UI) {
val waiter = bg {
WeatherApi(zipCode).execute() }
showData(waiter.await())
}
Java Kotlin
![Page 36: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/36.jpg)
Wow momentsEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
Intent intent = Intent(this,BActivity.class)
intent.putExtra("id", 5)
intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)
startActivity(intentFor<SomeOtherActivity>("id" to 5).singleTop())
Java
Kotlin
![Page 37: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/37.jpg)
Smart CastEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// Java style
if (obj instanceof TextArea) {
((TextArea)obj).append("some data");
} else {
// Do something
}
// Kotlin does it smartly
if (view is TextArea) {
view.append("Kotlin is awesome!")
} else {
// Do something
}
![Page 38: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/38.jpg)
Anko - Android’s buddy for KotlinEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
textView {
id = R.id.errorView
textColor = ContextCompat.getColor(ctx, R.color.red_error)
text = string(R.string.error_view_login_text)
textSize = 14f
visibility = View.GONE
}
textView {
lparams(width = matchParent, height = wrapContent) {
gravity = Gravity.CENTER
leftMargin = dip(16)
rightMargin = dip(16)
}
}
![Page 39: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/39.jpg)
Anko - Android’s buddy for KotlinEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
// Showing Alerts
alert("Hi, are you enjoying the Kotlin talk?") {
yesButton { toast("Yes :)") }
noButton {}
}.show()
// Showing progress dialog
val dialog = progressDialog(message = "Please wait a bit…", title = "Fetching data")
// Showing SnackBar
snackbar(view, "Hi there!")
snackbar(view, R.string.message)
longSnackbar(view, "Wow, such duration")
snackbar(view, "Action, reaction", "Click me!") { doStuff() }
![Page 40: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/40.jpg)
There is more to come than meets the eyeEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
● Visibility Modifiers
● Companion Objects
● Nested, Sealed classes
● Generics
● Coroutines
● Operator Overloading
● Exceptions
● Annotations
● Reflection
● And Many more...
![Page 41: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/41.jpg)
Improvement areas for KotlinEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
● Increased build time by few seconds
● Adds approx 6K more methods in final package
● No static analysers, but same can be achieved using companion objects
● Mocking kotlin classes with Mockito is painful
● Operator overloading may lead to bad result if not used properly
● Smaller community and less available help
● Might be difficult to code in functional paradigm
![Page 42: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/42.jpg)
Future of KotlinEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
JVM Native
iOS, etc.
JS
Kotlin
Android Spring, etc.
![Page 43: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/43.jpg)
ReferencesEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
● Official Website
● Git repo from Developer Advocate at JetBrains
● Kotlin vs Java build comparison
● Android Development with Kotlin - Jake Wharton
● Antonio Leiva's Blog
● Anko Github page
● Sample Android app using Kotlin
![Page 44: Introduction to kotlin for android app development gdg ahmedabad dev fest 2017](https://reader033.vdocuments.mx/reader033/viewer/2022052117/5a648ef67f8b9a31568b5399/html5/thumbnails/44.jpg)
End noteEmail: [email protected] Follow: @11Trivedi Visit: trivedihardik.wordpress.com
when (Talk.STATUS) {
TALK_ENDS -> println("Let's discuss Queries")
NO_QUERIES -> println("Thank you :)")
}