SlideShare a Scribd company logo
Hey Kotlin, How it works?
Hey Kotlin, How it works?
Hey Kotlin, How it works?
Hey Kotlin, How it works?
Hey Kotlin, How it works?
package com.cwdoh.devfest2017
class Gugu {
fun print() {
for (i in 1..9) {
for (j in 1..9) {
print("$i * $j = ${i * j}")
}
}
}
}
🤩😲😘😍
Hey Kotlin, How it works?
Hey Kotlin, How it works?
Hey Kotlin, How it works?
package com.cwdoh.devfest2017
class Session {
val speaker = "cwdoh"
val title: String
= "Kotlin: How it works"
var room: Int? = null
fun description()
= "$speaker's talk: '$title' at room $room"
}
Hey Kotlin, How it works?
package com.cwdoh.devfest2017
class Session {
val speaker = "cwdoh"
val title: String
= "Kotlin: How it works"
var room: Int? = null
fun description()
= "$speaker's talk: '$title' at room $room"
}
class Session {
var name = "cwdoh"
}
public final class Session {
@NotNull
private String name = "cwdoh";
@NotNull
public final String getName() {
return this.name;
}
public final void setName(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
this.name = var1;
}
}
class Session {
val name = "cwdoh"
}
public final class Session {
@NotNull
private final String name = "cwdoh";
@NotNull
public final String getName() {
return this.name;
}
}
class Session {
val speaker = "cwdoh"
fun description() {
val talks = "$speaker's talks"
println(talks)
}
}
public final class Session {
@NotNull
private final String speaker = "cwdoh";
@NotNull
public final String getSpeaker() {
return this.speaker;
}
public final void description() {
String talks = "" + this.speaker + "'s talks";
System.out.println(talks);
}
}
Hey Kotlin, How it works?
package com.cwdoh.devfest2017
class Session {
val speaker = "cwdoh"
val title: String
= "Kotlin: How it works"
var room: Int? = null
fun description()
= "$speaker's talk: '$title' at room $room"
}
class Session {
var name: String = "cwdoh"
}
public final class Session {
@NotNull
private String name = "cwdoh";
@NotNull
public final String getName() {
return this.name;
}
public final void setName(@NotNull String var1) {
Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
this.name = var1;
}
}
public static void checkParameterIsNotNull(Object value, String paramName)
{
if (value == null) {
throwParameterIsNullException(paramName);
}
}
class Session {
fun hello(name: String) = "hello, " + name
}
public final class Session {
@NotNull
public final String hello(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
return "hello, " + name;
}
}
public static void checkParameterIsNotNull(Object value, String paramName)
{
if (value == null) {
throwParameterIsNullException(paramName);
}
}
class Session {
fun hello(name: String) = "hello, " + name
fun print() {
val name: String = "cwdoh"
print(hello(name))
}
}
public final class Session {
@NotNull
public final String hello(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
return "hello, " + name;
}
public final void print() {
String name = "cwdoh";
String var2 = this.hello(name);
System.out.print(var2);
}
}
class Session {
fun hello(name: String) = "hello, " + name
fun print() {
val name: String? = null
print(hello(name!!))
}
}
public final class Session {
@NotNull
public final String hello(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
return "hello, " + name;
}
public final void print() {
String name = (String)null;
Intrinsics.throwNpe();
String var2 = this.hello(name);
System.out.print(var2);
}
}
NullPointerException? 😎
Hey Kotlin, How it works?
package com.cwdoh.devfest2017
class Session {
val speaker = "cwdoh"
val title: String
= "Kotlin: How it works"
var room: Int? = null
fun description()
= "$speaker's talk: '$title' at room $room"
}
class Session {
val speaker = "cwdoh"
val title: String = "Kotlin: How it works"
var room: Int? = null
fun description() = "$speaker's talk: '$title' at room $room"
}
public final class Session {
@NotNull
private final String speaker = "cwdoh";
@NotNull
private final String title = "Kotlin: How it works";
@Nullable
private Integer room;
…
@NotNull
public final String description() {
return "" + this.speaker + "'s talk: ‘"
+ this.title + "' at room " + this.room;
}
}
// access flags 0x11
public final description()Ljava/lang/String;
@Lorg/jetbrains/annotations/NotNull;() // invisible
L0
LINENUMBER 8 L0
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init> ()V
LDC ""
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
ALOAD 0
GETFIELD com/cwdoh/devfest2017/Session.speaker : Ljava/lang/String;
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
LDC "'s talk: '"
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
ALOAD 0
GETFIELD com/cwdoh/devfest2017/Session.title : Ljava/lang/String;
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
LDC "' at room "
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
ALOAD 0
GETFIELD com/cwdoh/devfest2017/Session.room : Ljava/lang/Integer;
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
ARETURN
Hey Kotlin, How it works?
class NotOpenedClass
open class OpenedClass
public final class NotOpenedClass {
}
public class OpenedClass {
}
interface Interface
open class OpenClass
class ChildClass: OpenClass(), Interface
fun test() { val child = ChildClass() }
public final class ChildClass
extends OpenClass implements Interface {}
public interface Interface {}
public class OpenClass {}
public final class SimpleClassKt {
public static final void test() {
new ChildClass();
}
}
Hey Kotlin, How it works?
class Person1 constructor(name: String)
class Person2(name: String)
public final class Person1 {
public Person1(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
}
}
public final class Person2 {
public Person2(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
}
}
class Person constructor(val name: String)
public final class Person {
@NotNull
private final String name;
@NotNull
public final String getName() {
return this.name;
}
public Person(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
}
}
class Person constructor(val name: String) {
val greetings: String
init { greetings = "hello, $name” }
}
public final class Person {
@NotNull private String greetings;
@NotNull private final String name;
@NotNull public final String getGreetings() { return this.greetings; }
@NotNull public final String getName() { return this.name; }
public Person(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.greetings = "hello, " + this.name;
}
}
class Person constructor(val name: String) {
val greetings: String
var age: Int = null
constructor(name: String, age: Int): this(name) { this.age = age }
init { greetings = "hello, $name” }
}
public final class Person {
@NotNull
private final String greetings;
private int age;
…
public Person(@NotNull String name) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.age = ((Number)null).intValue();
this.greetings = "hello, " + this.name;
}
public Person(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
this(name);
this.age = age;
}
}
Hey Kotlin, How it works?
open class Parent {
private val a = println("Parent.a")
constructor(arg: Unit=println("Parent primary constructor arg")) {
println("Parent primary constructor")
}
init { println("Parent.init") }
private val b = println("Parent.b")
}
class Child : Parent {
val a = println("Child.a")
init { println("Child.init 1") }
constructor(arg: Unit=println("Child primary constructor arg")) : super() {
println("Child primary constructor")
}
val b = println("Child.b")
constructor(arg: Int, arg2:Unit= println("Child secondary constructor arg")): this() {
println("Child secondary constructor")
}
init { println("Child.init 2") }
}
fun main(args: Array<String>) {
Child(1)
}
Child secondary constructor arg
Child primary constructor arg
Parent primary constructor arg
Parent.a
Parent.init
Parent.b
Parent primary constructor
Child.a
Child.init 1
Child.b
Child.init 2
Child primary constructor
Child secondary constructor
Hey Kotlin, How it works?
Hey Kotlin, How it works?
class Props {
var size: Int = 0
val isEmpty: Boolean
get() = this.size == 0
}
public final class Props {
private int size;
public final int getSize() {
return this.size;
}
public final void setSize(int var1) {
this.size = var1;
}
public final boolean isEmpty() {
return this.size == 0;
}
}
class Props {
var age: Int = 0
set(value: Int) {
age = if (value < 0) 0 else value
}
}
public final class Props {
private int age;
public final int getAge() {
return this.age;
}
public final void setAge(int value) {
this.setAge(value < 0? 0:value);
}
}
class Props {
var age: Int = 0
private set
}
public final class Props {
private int age;
public final int getAge() {
return this.age;
}
private final void setAge(int var1) {
this.age = var1;
}
}
Hey Kotlin, How it works?
Hey Kotlin, How it works?
class MainActivity : AppCompatActivity() {
private var mWelcomeTextView: TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mWelcomeTextView
= findViewById(R.id.msgView) as TextView
}
}
class MainActivity : AppCompatActivity() {
private lateinit var mWelcomeTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mWelcomeTextView
= findViewById(R.id.msgView) as TextView
}
}
class MainActivity : AppCompatActivity() {
private val mWelcomeTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Where am I?????
// mWelcomeTextView =
// findViewById(R.id.msgView) as TextView
}
}
class MainActivity : AppCompatActivity() {
private val messageView : TextView by lazy {
// following code will be executed at first access
findViewById(R.id.message_view) as TextView
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
fun onSayHello() {
messageView.text = "Hello"
}
}
Hey Kotlin, How it works?
class Delegate {
operator fun getValue(
thisRef: Any?,
property: KProperty<*>
): String {
// do something
// return value
}
operator fun setValue(
thisRef: Any?,
property: KProperty<*>, value: String
) {
// do something
// assign
}
}
Hey Kotlin, How it works?
Hey Kotlin, How it works?
class Demo {
val myName : String by lazy { "John" }
}
public final class Demo {
// $FF: synthetic field
static final KProperty[] $$delegatedProperties = new KProperty[]{ … };
@NotNull
private final Lazy myName$delegate;
@NotNull
public final String getMyName() {
Lazy var1 = this.myName$delegate;
KProperty var3 = $$delegatedProperties[0];
return (String)var1.getValue();
}
public Demo() {
this.myName$delegate = LazyKt.lazy((Function0)null.INSTANCE);
}
}
class Demo {
val myName : String by lazy { getNameFromPreference() }
} initializerdelegate
myName
Lazy<T>
getValue()
{ getNameFromPreference() }initializer
class Demo {
val myName : String by lazy { getNameFromPreference() }
}
myName
Lazy<T>
getValue() UNINITIALIZED_VALUE
{ getNameFromPreference() }initializer
class Demo {
val myName : String by lazy { getNameFromPreference() }
}
myName
Lazy<T>
getValue() “John”
{ getNameFromPreference() }initializer
class Demo {
val myName : String by lazy { getNameFromPreference() }
}
myName
Lazy<T>
getValue() “John”
initializer null
class Demo {
val myName : String by lazy { getNameFromPreference() }
}
class MainActivity : AppCompatActivity() {
private val messageView : TextView by lazy {
// I’ll be initialized lazily at first access
findViewById(R.id.message_view) as TextView
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
fun onSayHello() {
messageView.text = "Hello"
}
}
val messageView: TextView by lazy { findViewById(R.id.message_view) as TextView }
property delegate
Hey Kotlin, How it works?
interface Base {
fun printX()
}
class BaseImpl(val x: Int) : Base {
override fun printX() { print(x) }
}
interface A {
fun hello(): String
}
class B : A {
override fun hello() = "Hello!!"
}
class C : A by B()
public interface A {
@NotNull
String hello();
}
public final class B implements A {
@NotNull
public String hello() {
return "Hello!!";
}
}
public final class C implements A {
// $FF: synthetic field
private final B $$delegate_0 = new B();
@NotNull
public String hello() {
return this.$$delegate_0.hello();
}
}
Hey Kotlin, How it works?
Hey Kotlin, How it works?
fun String.hello() : String {
return "Hello, $this"
}
fun main(args: Array<String>) {
val whom = "cwdoh"
println(whom.hello())
}
// Result
Hello, cwdoh
Hey Kotlin, How it works?
open class C
class D: C()
fun C.foo() = "c"
fun D.foo() = "d"
fun printFoo(c: C) {
println(c.foo())
}
class Demo {
fun run() {
printFoo(D())
}
}
public class C {}
public final class D extends C {}
public final class SimpleClassKt {
@NotNull
public static final String foo(@NotNull C $receiver) {
Intrinsics.checkParameterIsNotNull($receiver, "$receiver");
return "c";
}
@NotNull
public static final String foo(@NotNull D $receiver) {
Intrinsics.checkParameterIsNotNull($receiver, "$receiver");
return "d";
}
public static final void printFoo(@NotNull C c) {
Intrinsics.checkParameterIsNotNull(c, "c");
String var1 = foo(c);
System.out.println(var1);
}
}
public final class Demo {
public final void run() {
SimpleClassKt.printFoo((C)(new D()));
}
}
class Person {
fun hello() {
println("hello!")
}
}
fun Person.hello() {
println(" ?!!")
}
fun main(args: Array<String>)
{
Person().hello()
}
// Result
hello!
public final class Person {
public final void hello() {
String var1 = "hello!";
System.out.println(var1);
}
}
public final class SimpleClassKt {
public static final void hello(@NotNull Person $receiver) {
Intrinsics.checkParameterIsNotNull(
$receiver, "$receiver");
String var1 = " ?!!";
System.out.println(var1);
}
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
(new Person()).hello();
}
}
class D {
fun bar() {
println("D.bar()")
}
}
class C {
fun baz() {
println("C.bar()")
}
fun D.foo() {
bar() // calls D.bar
baz() // calls C.baz
}
fun caller(d: D) {
d.foo()
}
}
public final class C {
public final void baz() {
String var1 = "C.bar()";
System.out.println(var1);
}
public final void foo(@NotNull D $receiver) {
Intrinsics.checkParameterIsNotNull($receiver, "$receiver");
$receiver.bar();
this.baz();
}
public final void caller(@NotNull D d) {
Intrinsics.checkParameterIsNotNull(d, "d");
this.foo(d);
}
}
public final class D {
public final void bar() {
String var1 = "D.bar()";
System.out.println(var1);
}
}
Hey Kotlin, How it works?
data class Length(var centimeters: Int = 0)
var Length.meters: Float
get() {
return centimeters / 100.0f
}
set(meters: Float) {
this.centimeters = (meters * 100.0f).toInt()
}
data class Length(var centimeters: Int = 0)
var Length.meters: Float
get() {
return centimeters / 100.0f
}
set(meters: Float) {
this.centimeters = (meters * 100.0f).toInt()
}
public final class Length {
private int centimeters;
...
}
public final class ExtensionsKt {
public static final float getMeters(
@NotNull Length $receiver) {
Intrinsics.checkParameterIsNotNull($receiver, "$receiver");
return (float)$receiver.getCentimeters() / 100.0F;
}
public static final void setMeters(
@NotNull Length $receiver, float meters) {
Intrinsics.checkParameterIsNotNull($receiver, "$receiver");
$receiver.setCentimeters((int)(meters * 100.0F));
}
...
}
fun Any?.toString(): String
{
if (this == null)
return “null"
return toString()
}
public final class SimpleClassKt {
@NotNull
public static final String
toString(@Nullable Object $receiver) {
return $receiver == null?
"null":$receiver.toString();
}
}
fun Any?.toString(): String {
println("Extension is called.")
if (this == null) return "null"
return toString()
}
fun main(args: Array<String>) {
val var1 : Any? = null
println(var1.toString())
val str1 : String? = null
println(str1.toString())
var str2 : String? = "hello"
println(str2.toString())
var str3 : String = "world"
println(str3.toString())
}
public final class SimpleClassKt {
@NotNull
public static final String toString(@Nullable Object $receiver) {
String var1 = "Extension is called.";
System.out.println(var1);
return $receiver == null?"null":$receiver.toString();
}
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, “args");
Object var1 = null;
String str1 = toString(var1);
System.out.println(str1);
str1 = (String)null;
String str2 = toString(str1);
System.out.println(str2);
str2 = "hello";
String str3 = toString(str2);
System.out.println(str3);
str3 = "world";
String var5 = str3.toString();
System.out.println(var5);
}
}
Extension is called.
null
Extension is called.
null
Extension is called.
hello
world
Hey Kotlin, How it works?
fun sing() {
println("We will we will rock you")
println("(Sing it!)")
println("We will we will rock you")
}
fun beatbox() {
println("pv zk bschk pv zk")
}
fun ensemble() {
sing()
beatbox()
sing()
beatbox()
}
public final class SimpleClassKt {
public static final void sing() {
String var0
= "We will we will rock you";
System.out.println(var0);
var0 = "(Sing it!)";
System.out.println(var0);
var0 = "We will we will rock you";
System.out.println(var0);
}
public static final void beatbox() {
String var0 = "pv zk bschk pv zk";
System.out.println(var0);
}
public static final void ensemble() {
sing();
beatbox();
sing();
beatbox();
}
}
fun sing() {
println("We will we will rock you")
println("(Sing it!)")
println("We will we will rock you")
}
fun beatbox() {
println("pv zk bschk pv zk")
}
fun ensemble() {
sing()
beatbox()
sing()
beatbox()
}
public final class SimpleClassKt {
public static final void sing() {
String var1 = "We will we will rock you";
…
}
public static final void beatbox() {
…
}
public static final void ensemble() {
String var0
= "We will we will rock you";
System.out.println(var0);
var0 = "(Sing it!)";
System.out.println(var0);
var0 = "We will we will rock you";
System.out.println(var0);
beatbox();
var0 = "We will we will rock you";
System.out.println(var0);
var0 = "(Sing it!)";
System.out.println(var0);
var0 = "We will we will rock you";
System.out.println(var0);
beatbox();
}
}
fun log(message: () -> String) {
println(message())
}
fun test() {
log { "Lorem ipsum dolor sit amet, consectetur ..." }
}
public final class SimpleClassKt {
public static final void log(@NotNull Function0 message) {
Intrinsics.checkParameterIsNotNull(message, "message");
Object var1 = message.invoke();
System.out.println(var1);
}
public static final void test() {
log((Function0)null.INSTANCE);
}
}
inline fun trace(message: String) {}
fun doSomething() {
print("I'm doing something!")
trace("doSomething() is doing something!")
}
public final class SimpleClassKt {
public static final void trace(@NotNull String message) {
Intrinsics.checkParameterIsNotNull(message, "message");
}
public static final void doSomething() {
String var0 = "I'm doing something!";
System.out.print(var0);
var0 = "doSomething() is doing something!";
}
}
inline fun log(message: () -> String) {
println(message())
}
fun test() {
log { "Lorem ipsum dolor sit amet, consectetur ..." }
}
public final class SimpleClassKt {
public static final void log(@NotNull Function0 message) {
Intrinsics.checkParameterIsNotNull(message, "message");
Object var2 = message.invoke();
System.out.println(var2);
}
public static final void test() {
String var0 = "Lorem ipsum dolor sit amet, consectetur ...";
System.out.println(var0);
}
}
inline fun trace(message: ()-> String) {}
fun doSomething() {
trace {
val receiver = "nurimaru"
val sender = "cwdoh"
"$sender wanna give $receiver big thank you for good tips."
}
}
public final class SimpleClassKt {
public static final boolean isDebug() {
return true;
}
public static final void trace(@NotNull Function0 message) {
Intrinsics.checkParameterIsNotNull(message, "message");
}
public static final void doSomething() {
}
}
https://goo.gl/2Tyx4B
Hey Kotlin, How it works?
Ad

More Related Content

What's hot (20)

Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
Codemotion
 
AST Transformations
AST TransformationsAST Transformations
AST Transformations
HamletDRC
 
Groovy!
Groovy!Groovy!
Groovy!
Petr Giecek
 
Into Clojure
Into ClojureInto Clojure
Into Clojure
Alf Kristian Støyle
 
Scala introduction
Scala introductionScala introduction
Scala introduction
Alf Kristian Støyle
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
Arturo Herrero
 
Groovy Basics
Groovy BasicsGroovy Basics
Groovy Basics
Wes Williams
 
core.logic introduction
core.logic introductioncore.logic introduction
core.logic introduction
Norman Richards
 
Madrid gug - sacando partido a las transformaciones ast de groovy
Madrid gug - sacando partido a las transformaciones ast de groovyMadrid gug - sacando partido a las transformaciones ast de groovy
Madrid gug - sacando partido a las transformaciones ast de groovy
Iván López Martín
 
The TclQuadcode Compiler
The TclQuadcode CompilerThe TclQuadcode Compiler
The TclQuadcode Compiler
Donal Fellows
 
Presentatie - Introductie in Groovy
Presentatie - Introductie in GroovyPresentatie - Introductie in Groovy
Presentatie - Introductie in Groovy
Getting value from IoT, Integration and Data Analytics
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
Pavlo Baron
 
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italyFrom java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
Fabio Collini
 
The Logical Burrito - pattern matching, term rewriting and unification
The Logical Burrito - pattern matching, term rewriting and unificationThe Logical Burrito - pattern matching, term rewriting and unification
The Logical Burrito - pattern matching, term rewriting and unification
Norman Richards
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
Java VS Python
Java VS PythonJava VS Python
Java VS Python
Simone Federici
 
C# for-java-developers
C# for-java-developersC# for-java-developers
C# for-java-developers
Dhaval Dalal
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
Ganesh Samarthyam
 
Transaction is a monad
Transaction is a  monadTransaction is a  monad
Transaction is a monad
Jarek Ratajski
 
Predictably
PredictablyPredictably
Predictably
ztellman
 
Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
Lucio Floretta - TensorFlow and Deep Learning without a PhD - Codemotion Mila...
Codemotion
 
AST Transformations
AST TransformationsAST Transformations
AST Transformations
HamletDRC
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
Arturo Herrero
 
Madrid gug - sacando partido a las transformaciones ast de groovy
Madrid gug - sacando partido a las transformaciones ast de groovyMadrid gug - sacando partido a las transformaciones ast de groovy
Madrid gug - sacando partido a las transformaciones ast de groovy
Iván López Martín
 
The TclQuadcode Compiler
The TclQuadcode CompilerThe TclQuadcode Compiler
The TclQuadcode Compiler
Donal Fellows
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
Pavlo Baron
 
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italyFrom java to kotlin beyond alt+shift+cmd+k - Droidcon italy
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
Fabio Collini
 
The Logical Burrito - pattern matching, term rewriting and unification
The Logical Burrito - pattern matching, term rewriting and unificationThe Logical Burrito - pattern matching, term rewriting and unification
The Logical Burrito - pattern matching, term rewriting and unification
Norman Richards
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
C# for-java-developers
C# for-java-developersC# for-java-developers
C# for-java-developers
Dhaval Dalal
 
Transaction is a monad
Transaction is a  monadTransaction is a  monad
Transaction is a monad
Jarek Ratajski
 
Predictably
PredictablyPredictably
Predictably
ztellman
 

Similar to Hey Kotlin, How it works? (20)

Scala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldScala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 World
BTI360
 
Pure kotlin
Pure kotlinPure kotlin
Pure kotlin
Jarek Ratajski
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
andyrobinson8
 
GeeCON Prague 2014 - Metaprogramming with Groovy
GeeCON Prague 2014 - Metaprogramming with GroovyGeeCON Prague 2014 - Metaprogramming with Groovy
GeeCON Prague 2014 - Metaprogramming with Groovy
Iván López Martín
 
Code Smells y Refactoring o haciendo que nuestro codigo huela (y se vea) mejo...
Code Smells y Refactoring o haciendo que nuestro codigo huela (y se vea) mejo...Code Smells y Refactoring o haciendo que nuestro codigo huela (y se vea) mejo...
Code Smells y Refactoring o haciendo que nuestro codigo huela (y se vea) mejo...
.NET Conf UY
 
かとうの Kotlin 講座 こってり版
かとうの Kotlin 講座 こってり版かとうの Kotlin 講座 こってり版
かとうの Kotlin 講座 こってり版
Yutaka Kato
 
Introduzione a C#
Introduzione a C#Introduzione a C#
Introduzione a C#
Lorenz Cuno Klopfenstein
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
HamletDRC
 
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトークGroovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Tsuyoshi Yamamoto
 
Kotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan SoaresKotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan Soares
iMasters
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
intelliyole
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
Ganesh Samarthyam
 
C# Is The Future
C# Is The FutureC# Is The Future
C# Is The Future
Filip Ekberg
 
つくってあそぼ Kotlin DSL ~拡張編~
つくってあそぼ Kotlin DSL ~拡張編~つくってあそぼ Kotlin DSL ~拡張編~
つくってあそぼ Kotlin DSL ~拡張編~
kamedon39
 
OOP Lab Report.docx
OOP Lab Report.docxOOP Lab Report.docx
OOP Lab Report.docx
ArafatSahinAfridi
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
 
Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)
ThomasHorta
 
Swift Study #7
Swift Study #7Swift Study #7
Swift Study #7
chanju Jeon
 
The Future of JVM Languages
The Future of JVM Languages The Future of JVM Languages
The Future of JVM Languages
VictorSzoltysek
 
Meetup di GDG Italia - Leonardo Pirro - Codemotion Rome 2018
Meetup di GDG Italia - Leonardo Pirro -  Codemotion Rome 2018 Meetup di GDG Italia - Leonardo Pirro -  Codemotion Rome 2018
Meetup di GDG Italia - Leonardo Pirro - Codemotion Rome 2018
Codemotion
 
Scala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldScala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 World
BTI360
 
GeeCON Prague 2014 - Metaprogramming with Groovy
GeeCON Prague 2014 - Metaprogramming with GroovyGeeCON Prague 2014 - Metaprogramming with Groovy
GeeCON Prague 2014 - Metaprogramming with Groovy
Iván López Martín
 
Code Smells y Refactoring o haciendo que nuestro codigo huela (y se vea) mejo...
Code Smells y Refactoring o haciendo que nuestro codigo huela (y se vea) mejo...Code Smells y Refactoring o haciendo que nuestro codigo huela (y se vea) mejo...
Code Smells y Refactoring o haciendo que nuestro codigo huela (y se vea) mejo...
.NET Conf UY
 
かとうの Kotlin 講座 こってり版
かとうの Kotlin 講座 こってり版かとうの Kotlin 講座 こってり版
かとうの Kotlin 講座 こってり版
Yutaka Kato
 
Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)Groovy Ast Transformations (greach)
Groovy Ast Transformations (greach)
HamletDRC
 
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトークGroovy ネタ NGK 忘年会2009 ライトニングトーク
Groovy ネタ NGK 忘年会2009 ライトニングトーク
Tsuyoshi Yamamoto
 
Kotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan SoaresKotlin : Advanced Tricks - Ubiratan Soares
Kotlin : Advanced Tricks - Ubiratan Soares
iMasters
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
intelliyole
 
つくってあそぼ Kotlin DSL ~拡張編~
つくってあそぼ Kotlin DSL ~拡張編~つくってあそぼ Kotlin DSL ~拡張編~
つくってあそぼ Kotlin DSL ~拡張編~
kamedon39
 
VISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLEVISUALIZAR REGISTROS EN UN JTABLE
VISUALIZAR REGISTROS EN UN JTABLE
Darwin Durand
 
Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)Kotlin Overview (PT-BR)
Kotlin Overview (PT-BR)
ThomasHorta
 
The Future of JVM Languages
The Future of JVM Languages The Future of JVM Languages
The Future of JVM Languages
VictorSzoltysek
 
Meetup di GDG Italia - Leonardo Pirro - Codemotion Rome 2018
Meetup di GDG Italia - Leonardo Pirro -  Codemotion Rome 2018 Meetup di GDG Italia - Leonardo Pirro -  Codemotion Rome 2018
Meetup di GDG Italia - Leonardo Pirro - Codemotion Rome 2018
Codemotion
 
Ad

More from Chang W. Doh (20)

Exploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively appExploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively app
Chang W. Doh
 
Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가
Chang W. Doh
 
introduction to Web Assembly
introduction to Web Assembly introduction to Web Assembly
introduction to Web Assembly
Chang W. Doh
 
PWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - KeynotePWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - Keynote
Chang W. Doh
 
PWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPSPWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPS
Chang W. Doh
 
CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나
Chang W. Doh
 
Natively Web App & Service Worker
Natively Web App & Service WorkerNatively Web App & Service Worker
Natively Web App & Service Worker
Chang W. Doh
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
Chang W. Doh
 
Service Worker 201 (한국어)
Service Worker 201 (한국어)Service Worker 201 (한국어)
Service Worker 201 (한국어)
Chang W. Doh
 
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)
Chang W. Doh
 
Service Worker 101 (en)
Service Worker 101 (en)Service Worker 101 (en)
Service Worker 101 (en)
Chang W. Doh
 
Service Worker 101 (한국어)
Service Worker 101 (한국어)Service Worker 101 (한국어)
Service Worker 101 (한국어)
Chang W. Doh
 
What is next for the web
What is next for the webWhat is next for the web
What is next for the web
Chang W. Doh
 
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service Worker
Chang W. Doh
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015
Chang W. Doh
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
Chang W. Doh
 
Polymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymerPolymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymer
Chang W. Doh
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
Chang W. Doh
 
SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기
Chang W. Doh
 
Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper API
Chang W. Doh
 
Exploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively appExploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively app
Chang W. Doh
 
Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가
Chang W. Doh
 
introduction to Web Assembly
introduction to Web Assembly introduction to Web Assembly
introduction to Web Assembly
Chang W. Doh
 
PWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - KeynotePWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - Keynote
Chang W. Doh
 
PWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPSPWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPS
Chang W. Doh
 
CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나
Chang W. Doh
 
Natively Web App & Service Worker
Natively Web App & Service WorkerNatively Web App & Service Worker
Natively Web App & Service Worker
Chang W. Doh
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
Chang W. Doh
 
Service Worker 201 (한국어)
Service Worker 201 (한국어)Service Worker 201 (한국어)
Service Worker 201 (한국어)
Chang W. Doh
 
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)
Chang W. Doh
 
Service Worker 101 (en)
Service Worker 101 (en)Service Worker 101 (en)
Service Worker 101 (en)
Chang W. Doh
 
Service Worker 101 (한국어)
Service Worker 101 (한국어)Service Worker 101 (한국어)
Service Worker 101 (한국어)
Chang W. Doh
 
What is next for the web
What is next for the webWhat is next for the web
What is next for the web
Chang W. Doh
 
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service Worker
Chang W. Doh
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015
Chang W. Doh
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
Chang W. Doh
 
Polymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymerPolymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymer
Chang W. Doh
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
Chang W. Doh
 
SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기SOSCON 2014: 문서 기반의 오픈소스 기여하기
SOSCON 2014: 문서 기반의 오픈소스 기여하기
Chang W. Doh
 
Chromium: NaCl and Pepper API
Chromium: NaCl and Pepper APIChromium: NaCl and Pepper API
Chromium: NaCl and Pepper API
Chang W. Doh
 
Ad

Recently uploaded (20)

Compiler Design_Lexical Analysis phase.pptx
Compiler Design_Lexical Analysis phase.pptxCompiler Design_Lexical Analysis phase.pptx
Compiler Design_Lexical Analysis phase.pptx
RushaliDeshmukh2
 
Development of MLR, ANN and ANFIS Models for Estimation of PCUs at Different ...
Development of MLR, ANN and ANFIS Models for Estimation of PCUs at Different ...Development of MLR, ANN and ANFIS Models for Estimation of PCUs at Different ...
Development of MLR, ANN and ANFIS Models for Estimation of PCUs at Different ...
Journal of Soft Computing in Civil Engineering
 
Artificial Intelligence (AI) basics.pptx
Artificial Intelligence (AI) basics.pptxArtificial Intelligence (AI) basics.pptx
Artificial Intelligence (AI) basics.pptx
aditichinar
 
DATA-DRIVEN SHOULDER INVERSE KINEMATICS YoungBeom Kim1 , Byung-Ha Park1 , Kwa...
DATA-DRIVEN SHOULDER INVERSE KINEMATICS YoungBeom Kim1 , Byung-Ha Park1 , Kwa...DATA-DRIVEN SHOULDER INVERSE KINEMATICS YoungBeom Kim1 , Byung-Ha Park1 , Kwa...
DATA-DRIVEN SHOULDER INVERSE KINEMATICS YoungBeom Kim1 , Byung-Ha Park1 , Kwa...
charlesdick1345
 
new ppt artificial intelligence historyyy
new ppt artificial intelligence historyyynew ppt artificial intelligence historyyy
new ppt artificial intelligence historyyy
PianoPianist
 
Smart Storage Solutions.pptx for production engineering
Smart Storage Solutions.pptx for production engineeringSmart Storage Solutions.pptx for production engineering
Smart Storage Solutions.pptx for production engineering
rushikeshnavghare94
 
DT REPORT by Tech titan GROUP to introduce the subject design Thinking
DT REPORT by Tech titan GROUP to introduce the subject design ThinkingDT REPORT by Tech titan GROUP to introduce the subject design Thinking
DT REPORT by Tech titan GROUP to introduce the subject design Thinking
DhruvChotaliya2
 
Smart_Storage_Systems_Production_Engineering.pptx
Smart_Storage_Systems_Production_Engineering.pptxSmart_Storage_Systems_Production_Engineering.pptx
Smart_Storage_Systems_Production_Engineering.pptx
rushikeshnavghare94
 
Data Structures_Introduction to algorithms.pptx
Data Structures_Introduction to algorithms.pptxData Structures_Introduction to algorithms.pptx
Data Structures_Introduction to algorithms.pptx
RushaliDeshmukh2
 
Degree_of_Automation.pdf for Instrumentation and industrial specialist
Degree_of_Automation.pdf for  Instrumentation  and industrial specialistDegree_of_Automation.pdf for  Instrumentation  and industrial specialist
Degree_of_Automation.pdf for Instrumentation and industrial specialist
shreyabhosale19
 
International Journal of Distributed and Parallel systems (IJDPS)
International Journal of Distributed and Parallel systems (IJDPS)International Journal of Distributed and Parallel systems (IJDPS)
International Journal of Distributed and Parallel systems (IJDPS)
samueljackson3773
 
some basics electrical and electronics knowledge
some basics electrical and electronics knowledgesome basics electrical and electronics knowledge
some basics electrical and electronics knowledge
nguyentrungdo88
 
Level 1-Safety.pptx Presentation of Electrical Safety
Level 1-Safety.pptx Presentation of Electrical SafetyLevel 1-Safety.pptx Presentation of Electrical Safety
Level 1-Safety.pptx Presentation of Electrical Safety
JoseAlbertoCariasDel
 
The Gaussian Process Modeling Module in UQLab
The Gaussian Process Modeling Module in UQLabThe Gaussian Process Modeling Module in UQLab
The Gaussian Process Modeling Module in UQLab
Journal of Soft Computing in Civil Engineering
 
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G..."Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
Infopitaara
 
theory-slides-for react for beginners.pptx
theory-slides-for react for beginners.pptxtheory-slides-for react for beginners.pptx
theory-slides-for react for beginners.pptx
sanchezvanessa7896
 
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
inmishra17121973
 
π0.5: a Vision-Language-Action Model with Open-World Generalization
π0.5: a Vision-Language-Action Model with Open-World Generalizationπ0.5: a Vision-Language-Action Model with Open-World Generalization
π0.5: a Vision-Language-Action Model with Open-World Generalization
NABLAS株式会社
 
Value Stream Mapping Worskshops for Intelligent Continuous Security
Value Stream Mapping Worskshops for Intelligent Continuous SecurityValue Stream Mapping Worskshops for Intelligent Continuous Security
Value Stream Mapping Worskshops for Intelligent Continuous Security
Marc Hornbeek
 
Introduction to Zoomlion Earthmoving.pptx
Introduction to Zoomlion Earthmoving.pptxIntroduction to Zoomlion Earthmoving.pptx
Introduction to Zoomlion Earthmoving.pptx
AS1920
 
Compiler Design_Lexical Analysis phase.pptx
Compiler Design_Lexical Analysis phase.pptxCompiler Design_Lexical Analysis phase.pptx
Compiler Design_Lexical Analysis phase.pptx
RushaliDeshmukh2
 
Artificial Intelligence (AI) basics.pptx
Artificial Intelligence (AI) basics.pptxArtificial Intelligence (AI) basics.pptx
Artificial Intelligence (AI) basics.pptx
aditichinar
 
DATA-DRIVEN SHOULDER INVERSE KINEMATICS YoungBeom Kim1 , Byung-Ha Park1 , Kwa...
DATA-DRIVEN SHOULDER INVERSE KINEMATICS YoungBeom Kim1 , Byung-Ha Park1 , Kwa...DATA-DRIVEN SHOULDER INVERSE KINEMATICS YoungBeom Kim1 , Byung-Ha Park1 , Kwa...
DATA-DRIVEN SHOULDER INVERSE KINEMATICS YoungBeom Kim1 , Byung-Ha Park1 , Kwa...
charlesdick1345
 
new ppt artificial intelligence historyyy
new ppt artificial intelligence historyyynew ppt artificial intelligence historyyy
new ppt artificial intelligence historyyy
PianoPianist
 
Smart Storage Solutions.pptx for production engineering
Smart Storage Solutions.pptx for production engineeringSmart Storage Solutions.pptx for production engineering
Smart Storage Solutions.pptx for production engineering
rushikeshnavghare94
 
DT REPORT by Tech titan GROUP to introduce the subject design Thinking
DT REPORT by Tech titan GROUP to introduce the subject design ThinkingDT REPORT by Tech titan GROUP to introduce the subject design Thinking
DT REPORT by Tech titan GROUP to introduce the subject design Thinking
DhruvChotaliya2
 
Smart_Storage_Systems_Production_Engineering.pptx
Smart_Storage_Systems_Production_Engineering.pptxSmart_Storage_Systems_Production_Engineering.pptx
Smart_Storage_Systems_Production_Engineering.pptx
rushikeshnavghare94
 
Data Structures_Introduction to algorithms.pptx
Data Structures_Introduction to algorithms.pptxData Structures_Introduction to algorithms.pptx
Data Structures_Introduction to algorithms.pptx
RushaliDeshmukh2
 
Degree_of_Automation.pdf for Instrumentation and industrial specialist
Degree_of_Automation.pdf for  Instrumentation  and industrial specialistDegree_of_Automation.pdf for  Instrumentation  and industrial specialist
Degree_of_Automation.pdf for Instrumentation and industrial specialist
shreyabhosale19
 
International Journal of Distributed and Parallel systems (IJDPS)
International Journal of Distributed and Parallel systems (IJDPS)International Journal of Distributed and Parallel systems (IJDPS)
International Journal of Distributed and Parallel systems (IJDPS)
samueljackson3773
 
some basics electrical and electronics knowledge
some basics electrical and electronics knowledgesome basics electrical and electronics knowledge
some basics electrical and electronics knowledge
nguyentrungdo88
 
Level 1-Safety.pptx Presentation of Electrical Safety
Level 1-Safety.pptx Presentation of Electrical SafetyLevel 1-Safety.pptx Presentation of Electrical Safety
Level 1-Safety.pptx Presentation of Electrical Safety
JoseAlbertoCariasDel
 
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G..."Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
"Feed Water Heaters in Thermal Power Plants: Types, Working, and Efficiency G...
Infopitaara
 
theory-slides-for react for beginners.pptx
theory-slides-for react for beginners.pptxtheory-slides-for react for beginners.pptx
theory-slides-for react for beginners.pptx
sanchezvanessa7896
 
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
211421893-M-Tech-CIVIL-Structural-Engineering-pdf.pdf
inmishra17121973
 
π0.5: a Vision-Language-Action Model with Open-World Generalization
π0.5: a Vision-Language-Action Model with Open-World Generalizationπ0.5: a Vision-Language-Action Model with Open-World Generalization
π0.5: a Vision-Language-Action Model with Open-World Generalization
NABLAS株式会社
 
Value Stream Mapping Worskshops for Intelligent Continuous Security
Value Stream Mapping Worskshops for Intelligent Continuous SecurityValue Stream Mapping Worskshops for Intelligent Continuous Security
Value Stream Mapping Worskshops for Intelligent Continuous Security
Marc Hornbeek
 
Introduction to Zoomlion Earthmoving.pptx
Introduction to Zoomlion Earthmoving.pptxIntroduction to Zoomlion Earthmoving.pptx
Introduction to Zoomlion Earthmoving.pptx
AS1920
 

Hey Kotlin, How it works?

  • 6. package com.cwdoh.devfest2017 class Gugu { fun print() { for (i in 1..9) { for (j in 1..9) { print("$i * $j = ${i * j}") } } } }
  • 11. package com.cwdoh.devfest2017 class Session { val speaker = "cwdoh" val title: String = "Kotlin: How it works" var room: Int? = null fun description() = "$speaker's talk: '$title' at room $room" }
  • 13. package com.cwdoh.devfest2017 class Session { val speaker = "cwdoh" val title: String = "Kotlin: How it works" var room: Int? = null fun description() = "$speaker's talk: '$title' at room $room" }
  • 14. class Session { var name = "cwdoh" } public final class Session { @NotNull private String name = "cwdoh"; @NotNull public final String getName() { return this.name; } public final void setName(@NotNull String var1) { Intrinsics.checkParameterIsNotNull(var1, "<set-?>"); this.name = var1; } }
  • 15. class Session { val name = "cwdoh" } public final class Session { @NotNull private final String name = "cwdoh"; @NotNull public final String getName() { return this.name; } }
  • 16. class Session { val speaker = "cwdoh" fun description() { val talks = "$speaker's talks" println(talks) } } public final class Session { @NotNull private final String speaker = "cwdoh"; @NotNull public final String getSpeaker() { return this.speaker; } public final void description() { String talks = "" + this.speaker + "'s talks"; System.out.println(talks); } }
  • 18. package com.cwdoh.devfest2017 class Session { val speaker = "cwdoh" val title: String = "Kotlin: How it works" var room: Int? = null fun description() = "$speaker's talk: '$title' at room $room" }
  • 19. class Session { var name: String = "cwdoh" } public final class Session { @NotNull private String name = "cwdoh"; @NotNull public final String getName() { return this.name; } public final void setName(@NotNull String var1) { Intrinsics.checkParameterIsNotNull(var1, "<set-?>"); this.name = var1; } } public static void checkParameterIsNotNull(Object value, String paramName) { if (value == null) { throwParameterIsNullException(paramName); } }
  • 20. class Session { fun hello(name: String) = "hello, " + name } public final class Session { @NotNull public final String hello(@NotNull String name) { Intrinsics.checkParameterIsNotNull(name, "name"); return "hello, " + name; } } public static void checkParameterIsNotNull(Object value, String paramName) { if (value == null) { throwParameterIsNullException(paramName); } }
  • 21. class Session { fun hello(name: String) = "hello, " + name fun print() { val name: String = "cwdoh" print(hello(name)) } } public final class Session { @NotNull public final String hello(@NotNull String name) { Intrinsics.checkParameterIsNotNull(name, "name"); return "hello, " + name; } public final void print() { String name = "cwdoh"; String var2 = this.hello(name); System.out.print(var2); } }
  • 22. class Session { fun hello(name: String) = "hello, " + name fun print() { val name: String? = null print(hello(name!!)) } } public final class Session { @NotNull public final String hello(@NotNull String name) { Intrinsics.checkParameterIsNotNull(name, "name"); return "hello, " + name; } public final void print() { String name = (String)null; Intrinsics.throwNpe(); String var2 = this.hello(name); System.out.print(var2); } } NullPointerException? 😎
  • 24. package com.cwdoh.devfest2017 class Session { val speaker = "cwdoh" val title: String = "Kotlin: How it works" var room: Int? = null fun description() = "$speaker's talk: '$title' at room $room" }
  • 25. class Session { val speaker = "cwdoh" val title: String = "Kotlin: How it works" var room: Int? = null fun description() = "$speaker's talk: '$title' at room $room" } public final class Session { @NotNull private final String speaker = "cwdoh"; @NotNull private final String title = "Kotlin: How it works"; @Nullable private Integer room; … @NotNull public final String description() { return "" + this.speaker + "'s talk: ‘" + this.title + "' at room " + this.room; } }
  • 26. // access flags 0x11 public final description()Ljava/lang/String; @Lorg/jetbrains/annotations/NotNull;() // invisible L0 LINENUMBER 8 L0 NEW java/lang/StringBuilder DUP INVOKESPECIAL java/lang/StringBuilder.<init> ()V LDC "" INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; ALOAD 0 GETFIELD com/cwdoh/devfest2017/Session.speaker : Ljava/lang/String; INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; LDC "'s talk: '" INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; ALOAD 0 GETFIELD com/cwdoh/devfest2017/Session.title : Ljava/lang/String; INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; LDC "' at room " INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder; ALOAD 0 GETFIELD com/cwdoh/devfest2017/Session.room : Ljava/lang/Integer; INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder; INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String; ARETURN
  • 28. class NotOpenedClass open class OpenedClass public final class NotOpenedClass { } public class OpenedClass { }
  • 29. interface Interface open class OpenClass class ChildClass: OpenClass(), Interface fun test() { val child = ChildClass() } public final class ChildClass extends OpenClass implements Interface {} public interface Interface {} public class OpenClass {} public final class SimpleClassKt { public static final void test() { new ChildClass(); } }
  • 31. class Person1 constructor(name: String) class Person2(name: String) public final class Person1 { public Person1(@NotNull String name) { Intrinsics.checkParameterIsNotNull(name, "name"); super(); } } public final class Person2 { public Person2(@NotNull String name) { Intrinsics.checkParameterIsNotNull(name, "name"); super(); } }
  • 32. class Person constructor(val name: String) public final class Person { @NotNull private final String name; @NotNull public final String getName() { return this.name; } public Person(@NotNull String name) { Intrinsics.checkParameterIsNotNull(name, "name"); super(); this.name = name; } }
  • 33. class Person constructor(val name: String) { val greetings: String init { greetings = "hello, $name” } } public final class Person { @NotNull private String greetings; @NotNull private final String name; @NotNull public final String getGreetings() { return this.greetings; } @NotNull public final String getName() { return this.name; } public Person(@NotNull String name) { Intrinsics.checkParameterIsNotNull(name, "name"); super(); this.name = name; this.greetings = "hello, " + this.name; } }
  • 34. class Person constructor(val name: String) { val greetings: String var age: Int = null constructor(name: String, age: Int): this(name) { this.age = age } init { greetings = "hello, $name” } } public final class Person { @NotNull private final String greetings; private int age; … public Person(@NotNull String name) { Intrinsics.checkParameterIsNotNull(name, "name"); super(); this.name = name; this.age = ((Number)null).intValue(); this.greetings = "hello, " + this.name; } public Person(@NotNull String name, int age) { Intrinsics.checkParameterIsNotNull(name, "name"); this(name); this.age = age; } }
  • 36. open class Parent { private val a = println("Parent.a") constructor(arg: Unit=println("Parent primary constructor arg")) { println("Parent primary constructor") } init { println("Parent.init") } private val b = println("Parent.b") } class Child : Parent { val a = println("Child.a") init { println("Child.init 1") } constructor(arg: Unit=println("Child primary constructor arg")) : super() { println("Child primary constructor") } val b = println("Child.b") constructor(arg: Int, arg2:Unit= println("Child secondary constructor arg")): this() { println("Child secondary constructor") } init { println("Child.init 2") } } fun main(args: Array<String>) { Child(1) } Child secondary constructor arg Child primary constructor arg Parent primary constructor arg Parent.a Parent.init Parent.b Parent primary constructor Child.a Child.init 1 Child.b Child.init 2 Child primary constructor Child secondary constructor
  • 39. class Props { var size: Int = 0 val isEmpty: Boolean get() = this.size == 0 } public final class Props { private int size; public final int getSize() { return this.size; } public final void setSize(int var1) { this.size = var1; } public final boolean isEmpty() { return this.size == 0; } }
  • 40. class Props { var age: Int = 0 set(value: Int) { age = if (value < 0) 0 else value } } public final class Props { private int age; public final int getAge() { return this.age; } public final void setAge(int value) { this.setAge(value < 0? 0:value); } }
  • 41. class Props { var age: Int = 0 private set } public final class Props { private int age; public final int getAge() { return this.age; } private final void setAge(int var1) { this.age = var1; } }
  • 44. class MainActivity : AppCompatActivity() { private var mWelcomeTextView: TextView? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mWelcomeTextView = findViewById(R.id.msgView) as TextView } }
  • 45. class MainActivity : AppCompatActivity() { private lateinit var mWelcomeTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mWelcomeTextView = findViewById(R.id.msgView) as TextView } }
  • 46. class MainActivity : AppCompatActivity() { private val mWelcomeTextView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Where am I????? // mWelcomeTextView = // findViewById(R.id.msgView) as TextView } }
  • 47. class MainActivity : AppCompatActivity() { private val messageView : TextView by lazy { // following code will be executed at first access findViewById(R.id.message_view) as TextView } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } fun onSayHello() { messageView.text = "Hello" } }
  • 49. class Delegate { operator fun getValue( thisRef: Any?, property: KProperty<*> ): String { // do something // return value } operator fun setValue( thisRef: Any?, property: KProperty<*>, value: String ) { // do something // assign } }
  • 52. class Demo { val myName : String by lazy { "John" } } public final class Demo { // $FF: synthetic field static final KProperty[] $$delegatedProperties = new KProperty[]{ … }; @NotNull private final Lazy myName$delegate; @NotNull public final String getMyName() { Lazy var1 = this.myName$delegate; KProperty var3 = $$delegatedProperties[0]; return (String)var1.getValue(); } public Demo() { this.myName$delegate = LazyKt.lazy((Function0)null.INSTANCE); } }
  • 53. class Demo { val myName : String by lazy { getNameFromPreference() } } initializerdelegate
  • 54. myName Lazy<T> getValue() { getNameFromPreference() }initializer class Demo { val myName : String by lazy { getNameFromPreference() } }
  • 55. myName Lazy<T> getValue() UNINITIALIZED_VALUE { getNameFromPreference() }initializer class Demo { val myName : String by lazy { getNameFromPreference() } }
  • 56. myName Lazy<T> getValue() “John” { getNameFromPreference() }initializer class Demo { val myName : String by lazy { getNameFromPreference() } }
  • 57. myName Lazy<T> getValue() “John” initializer null class Demo { val myName : String by lazy { getNameFromPreference() } }
  • 58. class MainActivity : AppCompatActivity() { private val messageView : TextView by lazy { // I’ll be initialized lazily at first access findViewById(R.id.message_view) as TextView } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } fun onSayHello() { messageView.text = "Hello" } }
  • 59. val messageView: TextView by lazy { findViewById(R.id.message_view) as TextView } property delegate
  • 61. interface Base { fun printX() } class BaseImpl(val x: Int) : Base { override fun printX() { print(x) } }
  • 62. interface A { fun hello(): String } class B : A { override fun hello() = "Hello!!" } class C : A by B()
  • 63. public interface A { @NotNull String hello(); } public final class B implements A { @NotNull public String hello() { return "Hello!!"; } } public final class C implements A { // $FF: synthetic field private final B $$delegate_0 = new B(); @NotNull public String hello() { return this.$$delegate_0.hello(); } }
  • 66. fun String.hello() : String { return "Hello, $this" } fun main(args: Array<String>) { val whom = "cwdoh" println(whom.hello()) } // Result Hello, cwdoh
  • 68. open class C class D: C() fun C.foo() = "c" fun D.foo() = "d" fun printFoo(c: C) { println(c.foo()) } class Demo { fun run() { printFoo(D()) } } public class C {} public final class D extends C {} public final class SimpleClassKt { @NotNull public static final String foo(@NotNull C $receiver) { Intrinsics.checkParameterIsNotNull($receiver, "$receiver"); return "c"; } @NotNull public static final String foo(@NotNull D $receiver) { Intrinsics.checkParameterIsNotNull($receiver, "$receiver"); return "d"; } public static final void printFoo(@NotNull C c) { Intrinsics.checkParameterIsNotNull(c, "c"); String var1 = foo(c); System.out.println(var1); } } public final class Demo { public final void run() { SimpleClassKt.printFoo((C)(new D())); } }
  • 69. class Person { fun hello() { println("hello!") } } fun Person.hello() { println(" ?!!") } fun main(args: Array<String>) { Person().hello() } // Result hello! public final class Person { public final void hello() { String var1 = "hello!"; System.out.println(var1); } } public final class SimpleClassKt { public static final void hello(@NotNull Person $receiver) { Intrinsics.checkParameterIsNotNull( $receiver, "$receiver"); String var1 = " ?!!"; System.out.println(var1); } public static final void main(@NotNull String[] args) { Intrinsics.checkParameterIsNotNull(args, "args"); (new Person()).hello(); } }
  • 70. class D { fun bar() { println("D.bar()") } } class C { fun baz() { println("C.bar()") } fun D.foo() { bar() // calls D.bar baz() // calls C.baz } fun caller(d: D) { d.foo() } } public final class C { public final void baz() { String var1 = "C.bar()"; System.out.println(var1); } public final void foo(@NotNull D $receiver) { Intrinsics.checkParameterIsNotNull($receiver, "$receiver"); $receiver.bar(); this.baz(); } public final void caller(@NotNull D d) { Intrinsics.checkParameterIsNotNull(d, "d"); this.foo(d); } } public final class D { public final void bar() { String var1 = "D.bar()"; System.out.println(var1); } }
  • 72. data class Length(var centimeters: Int = 0) var Length.meters: Float get() { return centimeters / 100.0f } set(meters: Float) { this.centimeters = (meters * 100.0f).toInt() }
  • 73. data class Length(var centimeters: Int = 0) var Length.meters: Float get() { return centimeters / 100.0f } set(meters: Float) { this.centimeters = (meters * 100.0f).toInt() } public final class Length { private int centimeters; ... } public final class ExtensionsKt { public static final float getMeters( @NotNull Length $receiver) { Intrinsics.checkParameterIsNotNull($receiver, "$receiver"); return (float)$receiver.getCentimeters() / 100.0F; } public static final void setMeters( @NotNull Length $receiver, float meters) { Intrinsics.checkParameterIsNotNull($receiver, "$receiver"); $receiver.setCentimeters((int)(meters * 100.0F)); } ... }
  • 74. fun Any?.toString(): String { if (this == null) return “null" return toString() } public final class SimpleClassKt { @NotNull public static final String toString(@Nullable Object $receiver) { return $receiver == null? "null":$receiver.toString(); } }
  • 75. fun Any?.toString(): String { println("Extension is called.") if (this == null) return "null" return toString() } fun main(args: Array<String>) { val var1 : Any? = null println(var1.toString()) val str1 : String? = null println(str1.toString()) var str2 : String? = "hello" println(str2.toString()) var str3 : String = "world" println(str3.toString()) } public final class SimpleClassKt { @NotNull public static final String toString(@Nullable Object $receiver) { String var1 = "Extension is called."; System.out.println(var1); return $receiver == null?"null":$receiver.toString(); } public static final void main(@NotNull String[] args) { Intrinsics.checkParameterIsNotNull(args, “args"); Object var1 = null; String str1 = toString(var1); System.out.println(str1); str1 = (String)null; String str2 = toString(str1); System.out.println(str2); str2 = "hello"; String str3 = toString(str2); System.out.println(str3); str3 = "world"; String var5 = str3.toString(); System.out.println(var5); } } Extension is called. null Extension is called. null Extension is called. hello world
  • 77. fun sing() { println("We will we will rock you") println("(Sing it!)") println("We will we will rock you") } fun beatbox() { println("pv zk bschk pv zk") } fun ensemble() { sing() beatbox() sing() beatbox() } public final class SimpleClassKt { public static final void sing() { String var0 = "We will we will rock you"; System.out.println(var0); var0 = "(Sing it!)"; System.out.println(var0); var0 = "We will we will rock you"; System.out.println(var0); } public static final void beatbox() { String var0 = "pv zk bschk pv zk"; System.out.println(var0); } public static final void ensemble() { sing(); beatbox(); sing(); beatbox(); } }
  • 78. fun sing() { println("We will we will rock you") println("(Sing it!)") println("We will we will rock you") } fun beatbox() { println("pv zk bschk pv zk") } fun ensemble() { sing() beatbox() sing() beatbox() } public final class SimpleClassKt { public static final void sing() { String var1 = "We will we will rock you"; … } public static final void beatbox() { … } public static final void ensemble() { String var0 = "We will we will rock you"; System.out.println(var0); var0 = "(Sing it!)"; System.out.println(var0); var0 = "We will we will rock you"; System.out.println(var0); beatbox(); var0 = "We will we will rock you"; System.out.println(var0); var0 = "(Sing it!)"; System.out.println(var0); var0 = "We will we will rock you"; System.out.println(var0); beatbox(); } }
  • 79. fun log(message: () -> String) { println(message()) } fun test() { log { "Lorem ipsum dolor sit amet, consectetur ..." } } public final class SimpleClassKt { public static final void log(@NotNull Function0 message) { Intrinsics.checkParameterIsNotNull(message, "message"); Object var1 = message.invoke(); System.out.println(var1); } public static final void test() { log((Function0)null.INSTANCE); } }
  • 80. inline fun trace(message: String) {} fun doSomething() { print("I'm doing something!") trace("doSomething() is doing something!") } public final class SimpleClassKt { public static final void trace(@NotNull String message) { Intrinsics.checkParameterIsNotNull(message, "message"); } public static final void doSomething() { String var0 = "I'm doing something!"; System.out.print(var0); var0 = "doSomething() is doing something!"; } }
  • 81. inline fun log(message: () -> String) { println(message()) } fun test() { log { "Lorem ipsum dolor sit amet, consectetur ..." } } public final class SimpleClassKt { public static final void log(@NotNull Function0 message) { Intrinsics.checkParameterIsNotNull(message, "message"); Object var2 = message.invoke(); System.out.println(var2); } public static final void test() { String var0 = "Lorem ipsum dolor sit amet, consectetur ..."; System.out.println(var0); } }
  • 82. inline fun trace(message: ()-> String) {} fun doSomething() { trace { val receiver = "nurimaru" val sender = "cwdoh" "$sender wanna give $receiver big thank you for good tips." } } public final class SimpleClassKt { public static final boolean isDebug() { return true; } public static final void trace(@NotNull Function0 message) { Intrinsics.checkParameterIsNotNull(message, "message"); } public static final void doSomething() { } }