SlideShare a Scribd company logo
1 of 60
Download to read offline
Fun With
Kotlin
by Egor Andreevici
INTRO
WHAT’S KOTLIN
INTRO
WHY KOTLIN?
INTRO
PRAGMATISM
Clarity Safety Interoperability Tooling
WHAT’S KOTLIN ABOUT?
INTRO
FOCUS ON USE CASES
INTEROPERATE
WHY PRAGMATIC?
INTRO
WHO MAINTAINS KOTLIN?
INTRO
WHO’S USING KOTLIN?
SYNTAX
SYNTAX
fun sum(a: Int, b: Int): Int {
  return a + b
}
KOTLIN SYNTAX
SYNTAX
fun sum(a: Int, b: Int): Int {
  return a + b
}
KOTLIN SYNTAX
SYNTAX
fun sum(a: Int, b: Int): Int {
  return a + b
}
KOTLIN SYNTAX
SYNTAX
fun sum(a: Int, b: Int): Int {
  return a + b
}
KOTLIN SYNTAX
SYNTAX
fun sum(a: Int, b: Int): Int {
  return a + b
}
KOTLIN SYNTAX
SYNTAX
fun sum(a: Int, b: Int): Int {
  return a + b
}
KOTLIN SYNTAX
SYNTAX
fun sum(a: Int, b: Int): Int = a + b
KOTLIN SYNTAX
SYNTAX
fun sum(a: Int, b: Int) = a + b
KOTLIN SYNTAX
CLASSES
CLASSES
Kotlin Java
class Person public class Person {}
CREATING A CLASS
CLASSES
class Person
class Student : Person()
INHERITANCE
CLASSES
class Person
class Student : Person() // won’t compile!
INHERITANCE
CLASSES
class Person
class Student : Person() // won’t compile!
INHERITANCE
CLASSES
open class Person
class Student : Person() // voila!
INHERITANCE
CLASSES
open class Person(val name: String, var age: Int)
// Java
public class Person {
private final String name;
private Integer age;
public Person(String name, Integer age) { // }
public String getName() { // }
public Integer getAge() { // }
public void setAge(Integer age) { // }
}
CONSTRUCTORS
CLASSES
open class Person(val name: String, var age: Int)
Kotlin Java
val name: String final String name
var age: Int Integer age
VAL & VAR
CLASSES
data class Person(val name: String, var age: Int)
‣ equals() & hashCode() $0
‣ toString() $0
‣ componentN() functions $0
‣ copy() function $0
‣ TOTAL FREE!
DATA CLASSES
CLASSES
val name = person.component1()
val age = person.component2()
COMPONENTN() FUNCTIONS
CLASSES
val name = person.component1()
val age = person.component2()
for ((name, age) in people) {
println("$name is $age years old")
}
DESTRUCTURING DECLARATIONS
CLASSES
class Person {
companion object {
val FIELD_NAME = "name"
fun isOlderThan(person: Person, age: Int) =
person.age > age
}
}
println(Person.isOlderThan(person, 30))
STATIC -> OBJECT
CLASSES
public final class StringUtils {
public static String capitalize(String str) {
// TODO: return capitalized string
return str;
}
}
StringUtils.capitalize(“a”);
UTILS IN JAVA
CLASSES
fun String.capitalize(): String {
// TODO: return capitalized string
return this
}
"a".capitalize()
EXTENSIONS IN KOTLIN
CLASSES
fun String.capitalize(): String {
// TODO: return capitalized string
return this
}
"a".capitalize()
import me.egorand.kotlin.extensions.capitalize
EXTENSIONS IN KOTLIN
NULL-SAFETY
NULL-SAFETY
THE BILLION DOLLAR MISTAKE
NULL SAFETY
var a: String = "abc"
a = null // compilation error
var b: String? = "abc"
b = null // OK
val l = a.length
val l = b.length // error: variable 'b' can be null
NULLABLE VS NON-NULL TYPES
NULL SAFETY
val l = if (b != null) b.length else -1
CHECKING FOR NULL: SIMPLE APPROACH
NULL SAFETY
b?.length
bob?.department?.head?.name
CHECKING FOR NULL: SAFE CALLS
NULL SAFETY
CHECKING FOR NULL: ELVIS OPERATOR
NULL SAFETY
val l: Int = if (b != null) b.length else -1
val l = b?.length ?: -1
CHECKING FOR NULL: ELVIS OPERATOR
NULL SAFETY
val l = b!!.length()
CHECKING FOR NULL: LIVING DANGEROUSLY
FUNCTIONS
FUNCTIONS
fun double(x: Int): Int {
return x * 2
}
val result = double(2)
FUNCTIONS IN KOTLIN
FUNCTIONS
fun Int.times(n: Int) = this * n
println(2.times(3))
INFIX NOTATION
FUNCTIONS
infix fun Int.times(n: Int) = this * n
println(2.times(3))
INFIX NOTATION
FUNCTIONS
infix fun Int.times(n: Int) = this * n
println(2 times 3)
INFIX NOTATION
FUNCTIONS
fun printString(str: String,
prefix: String = "",
postfix: String = "") {
println(prefix + str + postfix)
}
printString("hello")
printString("hello", "<")
printString("hello", "<", ">")
DEFAULT ARGUMENTS
FUNCTIONS
fun printString(str: String,
prefix: String = "",
postfix: String = "") {
println(prefix + str + postfix)
}
printString(“hello”,
prefix = “<“,
postfix = “>”)
NAMED ARGUMENTS
FUNCTIONS
fun <T> forEach(list: List<T>, f: (T) -> Unit) {
for (elem in list) {
f(elem)
}
}
val list = listOf("Alice", "Bob", "Claire")
forEach(list, ::println)
forEach(list, { str -> println(str) })
HIGHER-ORDER FUNCTIONS
FUNCTIONS
fun <T> forEach(list: List<T>, f: (T) -> Unit) {
for (elem in list) {
f(elem)
}
}
val list = listOf("Alice", "Bob", "Claire")
forEach(list, ::println)
forEach(list, { println(it) })
HIGHER-ORDER FUNCTIONS
FUNCTIONS
fun <T> forEach(list: List<T>, f: (T) -> Unit) {
for (elem in list) {
f(elem)
}
}
val list = listOf("Alice", "Bob", "Claire")
forEach(list, ::println)
forEach(list) { println(it) }
HIGHER-ORDER FUNCTIONS
SMART CASTS
SMART CASTS
// Java
private static void demo(Object x) {
if (x instanceof String) {
String str = (String) x;
System.out.println(str.length());
}
}
CASTING IN JAVA
SMART CASTS
// Java
private static void demo(Object x) {
if (x instanceof String) {
String str = (String) x;
System.out.println(str.length());
}
}
// Kotlin
fun demo(x: Any) {
if (x is String) {
println(x.length)
}
}
SMART CASTS IN KOTLIN
SMART CASTS
fun demo(x: Any) {
if (x is String) {
println(x.length)
}
}
IF EXPRESSION
SMART CASTS
fun demo(x: Any) {
if (x !is String) {
println("Not a String")
} else {
println(x.length)
}
}
IF-ELSE EXPRESSION
SMART CASTS
fun demo(x: Any) {
if (x !is String) return
println(x.length)
}
RETURN STATEMENT
SMART CASTS
if (x !is String || x.length == 0) return
if (x is String && x.length > 0)
print(x.length)
BOOLEAN EXPRESSIONS
WHAT’S NEXT?
WHAT’S NEXT?
POST-1.0 ROADMAP
▸ New language features
▸ Java 8/9 support
▸ JavaScript support
▸ Android tooling improvements
▸ IDE features
WHAT’S NEXT?
RESOURCES
▸ Kotlin - http://kotlinlang.org/
▸ Koans - http://try.kotlinlang.org/koans
▸ Blog - https://blog.jetbrains.com/kotlin/
▸ Forum - https://devnet.jetbrains.com/community/kotlin
▸ Slack - http://kotlinlang.slack.com/
Thank you!
@EgorAnd
+EgorAndreevich
http://blog.egorand.me/

More Related Content

What's hot

The Death of Final Tagless
The Death of Final TaglessThe Death of Final Tagless
The Death of Final Tagless
John De Goes
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meet
Mario Fusco
 
Orthogonal Functional Architecture
Orthogonal Functional ArchitectureOrthogonal Functional Architecture
Orthogonal Functional Architecture
John De Goes
 
Refactoring Functional Type Classes
Refactoring Functional Type ClassesRefactoring Functional Type Classes
Refactoring Functional Type Classes
John De Goes
 
Java 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardJava 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forward
Mario Fusco
 

What's hot (20)

The Death of Final Tagless
The Death of Final TaglessThe Death of Final Tagless
The Death of Final Tagless
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meet
 
Orthogonal Functional Architecture
Orthogonal Functional ArchitectureOrthogonal Functional Architecture
Orthogonal Functional Architecture
 
One Monad to Rule Them All
One Monad to Rule Them AllOne Monad to Rule Them All
One Monad to Rule Them All
 
All Aboard The Scala-to-PureScript Express!
All Aboard The Scala-to-PureScript Express!All Aboard The Scala-to-PureScript Express!
All Aboard The Scala-to-PureScript Express!
 
The Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect SystemThe Design of the Scalaz 8 Effect System
The Design of the Scalaz 8 Effect System
 
Halogen: Past, Present, and Future
Halogen: Past, Present, and FutureHalogen: Past, Present, and Future
Halogen: Past, Present, and Future
 
The Next Great Functional Programming Language
The Next Great Functional Programming LanguageThe Next Great Functional Programming Language
The Next Great Functional Programming Language
 
Refactoring Functional Type Classes
Refactoring Functional Type ClassesRefactoring Functional Type Classes
Refactoring Functional Type Classes
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }
 
Apache PIG - User Defined Functions
Apache PIG - User Defined FunctionsApache PIG - User Defined Functions
Apache PIG - User Defined Functions
 
Kotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime PerformanceKotlin Bytecode Generation and Runtime Performance
Kotlin Bytecode Generation and Runtime Performance
 
Scalaz 8: A Whole New Game
Scalaz 8: A Whole New GameScalaz 8: A Whole New Game
Scalaz 8: A Whole New Game
 
Functor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadFunctor, Apply, Applicative And Monad
Functor, Apply, Applicative And Monad
 
Introduction to functional programming using Ocaml
Introduction to functional programming using OcamlIntroduction to functional programming using Ocaml
Introduction to functional programming using Ocaml
 
Why The Free Monad isn't Free
Why The Free Monad isn't FreeWhy The Free Monad isn't Free
Why The Free Monad isn't Free
 
Intro to Pig UDF
Intro to Pig UDFIntro to Pig UDF
Intro to Pig UDF
 
Kotlin as a Better Java
Kotlin as a Better JavaKotlin as a Better Java
Kotlin as a Better Java
 
Java 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forwardJava 7, 8 & 9 - Moving the language forward
Java 7, 8 & 9 - Moving the language forward
 
ZIO Queue
ZIO QueueZIO Queue
ZIO Queue
 

Viewers also liked

Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011
Andrey Breslav
 
Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011
Andrey Breslav
 
Introduction to Kotlin: Brief and clear
Introduction to Kotlin: Brief and clearIntroduction to Kotlin: Brief and clear
Introduction to Kotlin: Brief and clear
Andrey Breslav
 
Who's More Functional: Kotlin, Groovy, Scala, or Java?
Who's More Functional: Kotlin, Groovy, Scala, or Java?Who's More Functional: Kotlin, Groovy, Scala, or Java?
Who's More Functional: Kotlin, Groovy, Scala, or Java?
Andrey Breslav
 

Viewers also liked (15)

Kotlin
KotlinKotlin
Kotlin
 
Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011Kotlin Slides from Devoxx 2011
Kotlin Slides from Devoxx 2011
 
Eval4j @ JVMLS 2014
Eval4j @ JVMLS 2014Eval4j @ JVMLS 2014
Eval4j @ JVMLS 2014
 
Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011Kotlin @ StrangeLoop 2011
Kotlin @ StrangeLoop 2011
 
Kotlin @ CSClub & Yandex
Kotlin @ CSClub & YandexKotlin @ CSClub & Yandex
Kotlin @ CSClub & Yandex
 
Flexible Types in Kotlin - JVMLS 2015
Flexible Types in Kotlin - JVMLS 2015Flexible Types in Kotlin - JVMLS 2015
Flexible Types in Kotlin - JVMLS 2015
 
Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011Kotlin @ Devoxx 2011
Kotlin @ Devoxx 2011
 
Introduction to Kotlin: Brief and clear
Introduction to Kotlin: Brief and clearIntroduction to Kotlin: Brief and clear
Introduction to Kotlin: Brief and clear
 
JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in Kotlin
 
Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»
 
Java EE 8 Update
Java EE 8 UpdateJava EE 8 Update
Java EE 8 Update
 
Be More Productive with Kotlin
Be More Productive with KotlinBe More Productive with Kotlin
Be More Productive with Kotlin
 
Unit Testing in Kotlin
Unit Testing in KotlinUnit Testing in Kotlin
Unit Testing in Kotlin
 
Who's More Functional: Kotlin, Groovy, Scala, or Java?
Who's More Functional: Kotlin, Groovy, Scala, or Java?Who's More Functional: Kotlin, Groovy, Scala, or Java?
Who's More Functional: Kotlin, Groovy, Scala, or Java?
 
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Cod...
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Cod...Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Cod...
Functional Reactive Programming with Kotlin on Android - Giorgio Natili - Cod...
 

Similar to Fun with Kotlin

The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Language
intelliyole
 
Swift the implicit parts
Swift the implicit partsSwift the implicit parts
Swift the implicit parts
Maxim Zaks
 

Similar to Fun with Kotlin (20)

Exploring Koltin on Android
Exploring Koltin on AndroidExploring Koltin on Android
Exploring Koltin on Android
 
Kotlin for Android Developers
Kotlin for Android DevelopersKotlin for Android Developers
Kotlin for Android Developers
 
XKE Typeclass
XKE TypeclassXKE Typeclass
XKE Typeclass
 
Effective way to code in Scala
Effective way to code in ScalaEffective way to code in Scala
Effective way to code in Scala
 
Hive Functions Cheat Sheet
Hive Functions Cheat SheetHive Functions Cheat Sheet
Hive Functions Cheat Sheet
 
Stacks.ppt
Stacks.pptStacks.ppt
Stacks.ppt
 
Stacks.ppt
Stacks.pptStacks.ppt
Stacks.ppt
 
Kotlin Starter Pack
Kotlin Starter PackKotlin Starter Pack
Kotlin Starter Pack
 
Kotlin: A pragmatic language by JetBrains
Kotlin: A pragmatic language by JetBrainsKotlin: A pragmatic language by JetBrains
Kotlin: A pragmatic language by JetBrains
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collections
 
Arrays
ArraysArrays
Arrays
 
Java cheatsheet
Java cheatsheetJava cheatsheet
Java cheatsheet
 
The Kotlin Programming Language
The Kotlin Programming LanguageThe Kotlin Programming Language
The Kotlin Programming Language
 
1 kotlin vs. java: some java issues addressed in kotlin
1  kotlin vs. java: some java issues addressed in kotlin1  kotlin vs. java: some java issues addressed in kotlin
1 kotlin vs. java: some java issues addressed in kotlin
 
Swift the implicit parts
Swift the implicit partsSwift the implicit parts
Swift the implicit parts
 
Kotlin
KotlinKotlin
Kotlin
 
Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2Kotlin Basics - Apalon Kotlin Sprint Part 2
Kotlin Basics - Apalon Kotlin Sprint Part 2
 
Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4
 
3 kotlin vs. java- what kotlin has that java does not
3  kotlin vs. java- what kotlin has that java does not3  kotlin vs. java- what kotlin has that java does not
3 kotlin vs. java- what kotlin has that java does not
 
Data Type In Python.pptx
Data Type In Python.pptxData Type In Python.pptx
Data Type In Python.pptx
 

Recently uploaded

%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Recently uploaded (20)

Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 

Fun with Kotlin