SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
KOTLIN
MOJE DOŚWIADCZENIE
DAMIAN PETLA
ANDROID DEVELOPER
e-mail: damian.petla@schibsted.pl
LinkedIn: pl.linkedin.com/in/damianpetla
1. DLACZEGO WYBRAŁEM
KOTLINA?
CIEKAWOŚĆ
CODE REVIEW Z iOS
JETBRAINS - ZNANA MARKA
ROZMIAR APK I SZYBKA KOMPILACJA
2. CZY TRUDNO JEST
ZACZĄĆ?
50 GODZIN
SKŁADNIA
NOWE PODEJŚCIE
class User(val name: String, age: Int?)
val name: String = “Damian”
var isSuperUser: Boolean = true
var pet: String? = null
public fun sayHi(name: String, times: Int = 3) {
for (i in 1..times) {
println(“Hi $name”)
}
}
private fun getSome() : String {
return “some”
}
Kotlin
3. CO NAJBARDZIEJ MI SIĘ
PODOBA W KOTLINIE?
BEZPIECZNY KOD
InputStream stream = ...
if (stream != null) {
stream.close();
}
stream.close()
stream?.close()
Java
Kotlin
3. CO NAJBARDZIEJ MI SIĘ
PODOBA W KOTLINIE?
BEZPIECZNY KOD
PROSTE DEFINICJE KLAS
public class Item {
private String type;
public Item(String type) {
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Item item2 = (Item) o;
if (type != null ? !type.equals(item2.type) : item2.type != null) return false;
return true;
}
@Override
public int hashCode() {
return type != null ? type.hashCode() : 0;
}
@Override
public String toString() {
return "Item2{" +
"type='" + type + ''' +
'}';
}
}
public class Article extends Item {
private Boolean isDeleted;
private String id;
private String category;
private String published;
private String publishedFormatted;
private String firstPublished;
private String updated;
private String created;
private List<Topic> topics;
private String title;
private String newsLifetime;
private Integer newsValue;
private List<Author> authors;
private List<Resource> resources
private Version version;
private String vignette;
private String displaySize;
private Boolean live;
private Boolean breaking;
private Story story;
private Boolean sponsored = false;
public Article(String type) {
super(type);
}
public Article(String type, Boolean isDeleted, String id, String category, String published,
String publishedFormatted, String firstPublished, String updated, String created,
List<Topic> topics, String title, String newsLifetime, Integer newsValue,
List<Author> authors, List<Resource> resources, Version version, String vignette,
String displaySize, Boolean live, Boolean breaking, Story story, Boolean sponsored) {
super(type);
this.isDeleted = isDeleted;
this.id = id;
this.category = category;
this.published = published;
this.publishedFormatted = publishedFormatted;
this.firstPublished = firstPublished;
this.updated = updated;
this.created = created;
this.topics = topics;
this.title = title;
this.newsLifetime = newsLifetime;
this.newsValue = newsValue;
this.authors = authors;
this.resources = resources;
this.version = version;
this.vignette = vignette;
this.displaySize = displaySize;
this.live = live;
this.breaking = breaking;
this.story = story;
this.sponsored = sponsored;
}
public Boolean getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(Boolean isDeleted) {
this.isDeleted = isDeleted;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getPublished() {
return published;
}
public void setPublished(String published) {
this.published = published;
}
public String getPublishedFormatted() {
return publishedFormatted;
}
public void setPublishedFormatted(String publishedFormatted) {
this.publishedFormatted = publishedFormatted;
}
public String getFirstPublished() {
return firstPublished;
}
public void setFirstPublished(String firstPublished) {
this.firstPublished = firstPublished;
}
public String getUpdated() {
return updated;
}
public void setUpdated(String updated) {
this.updated = updated;
}
public String getCreated() {
return created;
}
public void setCreated(String created) {
this.created = created;
}
public List<Topic> getTopics() {
return topics;
}
public void setTopics(List<Topic> topics) {
this.topics = topics;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getNewsLifetime() {
return newsLifetime;
}
public void setNewsLifetime(String newsLifetime) {
this.newsLifetime = newsLifetime;
}
public Integer getNewsValue() {
return newsValue;
}
public void setNewsValue(Integer newsValue) {
this.newsValue = newsValue;
}
public List<Author> getAuthors() {
return authors;
}
public void setAuthors(List<Author> authors) {
this.authors = authors;
}
public List<Resource> getResources() {
return resources;
}
public void setResources(List<Resource> resources) {
this.resources = resources;
}
public Version getVersion() {
return version;
}
public void setVersion(Version version) {
this.version = version;
}
public String getVignette() {
return vignette;
}
public void setVignette(String vignette) {
this.vignette = vignette;
}
public String getDisplaySize() {
return displaySize;
}
public void setDisplaySize(String displaySize) {
this.displaySize = displaySize;
}
public Boolean getLive() {
return live;
}
public void setLive(Boolean live) {
this.live = live;
}
public Boolean getBreaking() {
return breaking;
}
public void setBreaking(Boolean breaking) {
this.breaking = breaking;
}
public Story getStory() {
return story;
}
public void setStory(Story story) {
this.story = story;
}
public Boolean getSponsored() {
return sponsored;
}
public void setSponsored(Boolean sponsored) {
this.sponsored = sponsored;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
Article article2 = (Article) o;
if (authors != null ? !authors.equals(article2.authors) : article2.authors != null) return false;
if (breaking != null ? !breaking.equals(article2.breaking) : article2.breaking != null) return false;
if (category != null ? !category.equals(article2.category) : article2.category != null) return false;
if (created != null ? !created.equals(article2.created) : article2.created != null) return false;
if (displaySize != null ? !displaySize.equals(article2.displaySize) : article2.displaySize != null)
return false;
if (firstPublished != null ? !firstPublished.equals(article2.firstPublished) : article2.firstPublished != null)
return false;
if (id != null ? !id.equals(article2.id) : article2.id != null) return false;
if (isDeleted != null ? !isDeleted.equals(article2.isDeleted) : article2.isDeleted != null) return false;
if (live != null ? !live.equals(article2.live) : article2.live != null) return false;
if (newsLifetime != null ? !newsLifetime.equals(article2.newsLifetime) : article2.newsLifetime != null)
return false;
if (newsValue != null ? !newsValue.equals(article2.newsValue) : article2.newsValue != null) return false;
if (published != null ? !published.equals(article2.published) : article2.published != null) return false;
if (publishedFormatted != null ? !publishedFormatted.equals(article2.publishedFormatted) :
article2.publishedFormatted != null) return false;
if (resources != null ? !resources.equals(article2.resources) : article2.resources != null) return false;
if (sponsored != null ? !sponsored.equals(article2.sponsored) : article2.sponsored != null) return false;
if (story != null ? !story.equals(article2.story) : article2.story != null) return false;
if (title != null ? !title.equals(article2.title) : article2.title != null) return false;
if (topics != null ? !topics.equals(article2.topics) : article2.topics != null) return false;
if (updated != null ? !updated.equals(article2.updated) : article2.updated != null) return false;
if (version != null ? !version.equals(article2.version) : article2.version != null) return false;
if (vignette != null ? !vignette.equals(article2.vignette) : article2.vignette != null) return false;
return true;
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (isDeleted != null ? isDeleted.hashCode() : 0);
result = 31 * result + (id != null ? id.hashCode() : 0);
result = 31 * result + (category != null ? category.hashCode() : 0);
result = 31 * result + (published != null ? published.hashCode() : 0);
result = 31 * result + (publishedFormatted != null ? publishedFormatted.hashCode() : 0);
result = 31 * result + (firstPublished != null ? firstPublished.hashCode() : 0);
result = 31 * result + (updated != null ? updated.hashCode() : 0);
result = 31 * result + (created != null ? created.hashCode() : 0);
result = 31 * result + (topics != null ? topics.hashCode() : 0);
result = 31 * result + (title != null ? title.hashCode() : 0);
result = 31 * result + (newsLifetime != null ? newsLifetime.hashCode() : 0);
result = 31 * result + (newsValue != null ? newsValue.hashCode() : 0);
result = 31 * result + (authors != null ? authors.hashCode() : 0);
result = 31 * result + (resources != null ? resources.hashCode() : 0);
result = 31 * result + (version != null ? version.hashCode() : 0);
result = 31 * result + (vignette != null ? vignette.hashCode() : 0);
result = 31 * result + (displaySize != null ? displaySize.hashCode() : 0);
result = 31 * result + (live != null ? live.hashCode() : 0);
result = 31 * result + (breaking != null ? breaking.hashCode() : 0);
result = 31 * result + (story != null ? story.hashCode() : 0);
result = 31 * result + (sponsored != null ? sponsored.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "Article{" +
open class Item(val type: ItemTypeEnum): Serializable
data class Article(type: ItemTypeEnum,
val isDeleted: Boolean?,
val id: String,
val category: String,
val published: String,
var publishedFormatted: String?,
val firstPublished: String?,
val updated: String,
val created: String,
val topics: Array<Topic>,
val title: String,
val newsLifetime: String,
val newsValue: Int,
val authors: Array<Author>,
val resources: Array<Resource>,
val version: Version?,
val vignette: String?,
val displaySize: String,
val live: Boolean?,
val breaking: Boolean?,
val story: Story?,
val sponsored: Boolean = false
) : Item(type)
Java - 354 Kotlin - 25
data class User(val name: String,
val surname: String,
val age: Int)
val user = User(“Damian”, “Petla”, 33)
val user2 = user.copy(age = 30, name = “Adam”)
println(user)
println(user2)
User(name=Damian, surname=Petla, age=33)
User(name=Adam, surname=Petla, age=30)
Kotlin
Log
3. CO NAJBARDZIEJ MI SIĘ
PODOBA W KOTLINIE?
BEZPIECZNY KOD
PROSTE DEFINICJE KLAS
LAMBDA
STRING TEMPLATES
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println(“Hello! " + v.isOpaque());
}
});
Java
Kotlin
val button = findViewById(R.id.button) as Button
button.setOnClickListener { println("Hello! ${it.isOpaque()}") }
3. CO NAJBARDZIEJ MI SIĘ
PODOBA W KOTLINIE?
BEZPIECZNY KOD
PROSTE DEFINICJE KLAS
LAMBDA
STRING TEMPLATES
SMART CAST
int l = 0;
if (obj instanceof String) {
l = ((String)obj).length;
}
Java
Kotlin
var l = 0
if (obj is String) {
l = obj.length
}
val l : Int = (obj as? String)?.length ?: 0
3. CO NAJBARDZIEJ MI SIĘ
PODOBA W KOTLINIE?
BEZPIECZNY KOD
PROSTE DEFINICJE KLAS
LAMBDA
STRING TEMPLATES
SMART CAST
FUNCTION EXTENSIONS
String utcDate = ...
String formatted = Utilites.toPrettyDate(utcDate);
textView.setText(formatted);
Java
Kotlin
textView.setText(utcDate.toPrettyDate())
fun String.toPrettyDate(): String {
return “$this is formatted now”
}
4. CZY SĄ JAKIEŚ
PROBLEMY Z KOTLINEM?
SZYBKA ODPOWIEDŹ NA ZGŁOSZONE BŁEDY
JETBRAINS AKTYWNY NA STACK OVERFLOW
220 BUGÓW NAPRAWIONYCH W WERSJI M11(0.11.91)
Experimental J-Unit support
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
Java
Kotlin
Build.VERSION.SDK_INT >= 21
5. OD CZEGO ZACZĄĆ
NAUKĘ?
HTTP://KOTLINLANG.ORG/DOCS/REFERENCE/
HTTP://KOTLINLANG.ORG/DOCS/TUTORIALS/KOTLIN-ANDROID.HTML
HTTPS://DOCS.GOOGLE.COM/DOCUMENT/D/1RES3EP-HJXWA8KZI0YQDBEHCQTT29HG8P44AA9W0DM8
6. KTO UŻYWA KOTLINA?
7. CZY MAM JAKIEŚ PORADY
NA POCZĄTEK?
!! ZAMIAST ?
CZĘSTO WRACAJ DO DOKUMENTACJI
UDZIELAJ SIĘ W COMMUNITY
Q & A
EXTRA
Android Kotlin Plugin

Mais conteúdo relacionado

Mais procurados

Mining the social web ch1
Mining the social web ch1Mining the social web ch1
Mining the social web ch1HyeonSeok Choi
 
{tidytext}と{RMeCab}によるモダンな日本語テキスト分析
{tidytext}と{RMeCab}によるモダンな日本語テキスト分析{tidytext}と{RMeCab}によるモダンな日本語テキスト分析
{tidytext}と{RMeCab}によるモダンな日本語テキスト分析Takashi Kitano
 
MySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next LevelMySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next LevelBlythe Dunham
 
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...PROIDEA
 
令和から本気出す
令和から本気出す令和から本気出す
令和から本気出すTakashi Kitano
 
Python avanzado - parte 1
Python avanzado - parte 1Python avanzado - parte 1
Python avanzado - parte 1coto
 
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver){tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)Takashi Kitano
 
The Art, Joy, and Power of Creating Musical Programs (JFugue at SXSW Interact...
The Art, Joy, and Power of Creating Musical Programs (JFugue at SXSW Interact...The Art, Joy, and Power of Creating Musical Programs (JFugue at SXSW Interact...
The Art, Joy, and Power of Creating Musical Programs (JFugue at SXSW Interact...David Koelle
 

Mais procurados (12)

Kotlin standard
Kotlin standardKotlin standard
Kotlin standard
 
Mining the social web ch1
Mining the social web ch1Mining the social web ch1
Mining the social web ch1
 
{tidytext}と{RMeCab}によるモダンな日本語テキスト分析
{tidytext}と{RMeCab}によるモダンな日本語テキスト分析{tidytext}と{RMeCab}によるモダンな日本語テキスト分析
{tidytext}と{RMeCab}によるモダンな日本語テキスト分析
 
MySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next LevelMySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next Level
 
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
 
令和から本気出す
令和から本気出す令和から本気出す
令和から本気出す
 
Backbone intro
Backbone introBackbone intro
Backbone intro
 
Python avanzado - parte 1
Python avanzado - parte 1Python avanzado - parte 1
Python avanzado - parte 1
 
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver){tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
{tidygraph}と{ggraph}による モダンなネットワーク分析(未公開ver)
 
What's new in C# 6?
What's new in C# 6?What's new in C# 6?
What's new in C# 6?
 
The Art, Joy, and Power of Creating Musical Programs (JFugue at SXSW Interact...
The Art, Joy, and Power of Creating Musical Programs (JFugue at SXSW Interact...The Art, Joy, and Power of Creating Musical Programs (JFugue at SXSW Interact...
The Art, Joy, and Power of Creating Musical Programs (JFugue at SXSW Interact...
 
Benefits of Kotlin
Benefits of KotlinBenefits of Kotlin
Benefits of Kotlin
 

Destaque

No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.3camp
 
Systemy automatycznej informacji sterowanej głosem – Kolejna rewolucja w IT p...
Systemy automatycznej informacji sterowanej głosem – Kolejna rewolucja w IT p...Systemy automatycznej informacji sterowanej głosem – Kolejna rewolucja w IT p...
Systemy automatycznej informacji sterowanej głosem – Kolejna rewolucja w IT p...3camp
 
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”3camp
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych3camp
 
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawekOchrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek3camp
 
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce3camp
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek3camp
 

Destaque (7)

No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
No pressure, no diamonds. Rzecz o łamaniu zasad w projektach.
 
Systemy automatycznej informacji sterowanej głosem – Kolejna rewolucja w IT p...
Systemy automatycznej informacji sterowanej głosem – Kolejna rewolucja w IT p...Systemy automatycznej informacji sterowanej głosem – Kolejna rewolucja w IT p...
Systemy automatycznej informacji sterowanej głosem – Kolejna rewolucja w IT p...
 
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
 
Jak udokumentować bazę danych
Jak udokumentować bazę danychJak udokumentować bazę danych
Jak udokumentować bazę danych
 
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawekOchrona podatnych webaplikacji za pomocą wirtualnych poprawek
Ochrona podatnych webaplikacji za pomocą wirtualnych poprawek
 
Reakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyceReakcja łańcuchowa, czyli React.js w praktyce
Reakcja łańcuchowa, czyli React.js w praktyce
 
HTTPS bez wymówek
HTTPS bez wymówekHTTPS bez wymówek
HTTPS bez wymówek
 

Semelhante a Wykorzystanie języka Kotlin do aplikacji na platformie Android

Java: Nie popełniaj tych błędów!
Java: Nie popełniaj tych błędów!Java: Nie popełniaj tych błędów!
Java: Nie popełniaj tych błędów!Daniel Pokusa
 
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
 
Empathic Programming - How to write comprehensible code
Empathic Programming - How to write comprehensible codeEmpathic Programming - How to write comprehensible code
Empathic Programming - How to write comprehensible codeMario Gleichmann
 
Pure Kotlin Devoxx PL 2021
Pure Kotlin Devoxx PL 2021Pure Kotlin Devoxx PL 2021
Pure Kotlin Devoxx PL 2021Jarek Ratajski
 
First few months with Kotlin - Introduction through android examples
First few months with Kotlin - Introduction through android examplesFirst few months with Kotlin - Introduction through android examples
First few months with Kotlin - Introduction through android examplesNebojša Vukšić
 
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 groovyIván López Martín
 
Greach 2015 AST – Groovy Transformers: More than meets the eye!
Greach 2015   AST – Groovy Transformers: More than meets the eye!Greach 2015   AST – Groovy Transformers: More than meets the eye!
Greach 2015 AST – Groovy Transformers: More than meets the eye!Iván López Martín
 
G3 Summit 2016 - Taking Advantage of Groovy Annotations
G3 Summit 2016 - Taking Advantage of Groovy AnnotationsG3 Summit 2016 - Taking Advantage of Groovy Annotations
G3 Summit 2016 - Taking Advantage of Groovy AnnotationsIván López Martín
 
Persisting Data on SQLite using Room
Persisting Data on SQLite using RoomPersisting Data on SQLite using Room
Persisting Data on SQLite using RoomNelson Glauber Leal
 
Hive Functions Cheat Sheet
Hive Functions Cheat SheetHive Functions Cheat Sheet
Hive Functions Cheat SheetHortonworks
 
Storm - As deep into real-time data processing as you can get in 30 minutes.
Storm - As deep into real-time data processing as you can get in 30 minutes.Storm - As deep into real-time data processing as you can get in 30 minutes.
Storm - As deep into real-time data processing as you can get in 30 minutes.Dan Lynn
 
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 italyFabio Collini
 
CodeCamp Iasi 10 march 2012 - Practical Groovy
CodeCamp Iasi 10 march 2012 - Practical GroovyCodeCamp Iasi 10 march 2012 - Practical Groovy
CodeCamp Iasi 10 march 2012 - Practical GroovyCodecamp Romania
 
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018Codemotion
 
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 2Kirill Rozov
 
Kotlin Austin Droids April 14 2016
Kotlin Austin Droids April 14 2016Kotlin Austin Droids April 14 2016
Kotlin Austin Droids April 14 2016DesertJames
 
#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기Arawn Park
 
Idioms in swift 2016 05c
Idioms in swift 2016 05cIdioms in swift 2016 05c
Idioms in swift 2016 05cKaz Yoshikawa
 

Semelhante a Wykorzystanie języka Kotlin do aplikacji na platformie Android (20)

Java: Nie popełniaj tych błędów!
Java: Nie popełniaj tych błędów!Java: Nie popełniaj tych błędów!
Java: Nie popełniaj tych błędów!
 
Pure kotlin
Pure kotlinPure kotlin
Pure kotlin
 
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
 
Empathic Programming - How to write comprehensible code
Empathic Programming - How to write comprehensible codeEmpathic Programming - How to write comprehensible code
Empathic Programming - How to write comprehensible code
 
Pure Kotlin Devoxx PL 2021
Pure Kotlin Devoxx PL 2021Pure Kotlin Devoxx PL 2021
Pure Kotlin Devoxx PL 2021
 
First few months with Kotlin - Introduction through android examples
First few months with Kotlin - Introduction through android examplesFirst few months with Kotlin - Introduction through android examples
First few months with Kotlin - Introduction through android examples
 
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
 
Greach 2015 AST – Groovy Transformers: More than meets the eye!
Greach 2015   AST – Groovy Transformers: More than meets the eye!Greach 2015   AST – Groovy Transformers: More than meets the eye!
Greach 2015 AST – Groovy Transformers: More than meets the eye!
 
G3 Summit 2016 - Taking Advantage of Groovy Annotations
G3 Summit 2016 - Taking Advantage of Groovy AnnotationsG3 Summit 2016 - Taking Advantage of Groovy Annotations
G3 Summit 2016 - Taking Advantage of Groovy Annotations
 
Persisting Data on SQLite using Room
Persisting Data on SQLite using RoomPersisting Data on SQLite using Room
Persisting Data on SQLite using Room
 
Miracle of std lib
Miracle of std libMiracle of std lib
Miracle of std lib
 
Hive Functions Cheat Sheet
Hive Functions Cheat SheetHive Functions Cheat Sheet
Hive Functions Cheat Sheet
 
Storm - As deep into real-time data processing as you can get in 30 minutes.
Storm - As deep into real-time data processing as you can get in 30 minutes.Storm - As deep into real-time data processing as you can get in 30 minutes.
Storm - As deep into real-time data processing as you can get in 30 minutes.
 
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
 
CodeCamp Iasi 10 march 2012 - Practical Groovy
CodeCamp Iasi 10 march 2012 - Practical GroovyCodeCamp Iasi 10 march 2012 - Practical Groovy
CodeCamp Iasi 10 march 2012 - Practical Groovy
 
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
Kotlin for Android Developers - Victor Kropp - Codemotion Rome 2018
 
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
 
Kotlin Austin Droids April 14 2016
Kotlin Austin Droids April 14 2016Kotlin Austin Droids April 14 2016
Kotlin Austin Droids April 14 2016
 
#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기
 
Idioms in swift 2016 05c
Idioms in swift 2016 05cIdioms in swift 2016 05c
Idioms in swift 2016 05c
 

Mais de 3camp

ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania3camp
 
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...3camp
 
Learn you some rx for the greater good
Learn you some rx for the greater goodLearn you some rx for the greater good
Learn you some rx for the greater good3camp
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach3camp
 
AngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektuAngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektu3camp
 
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...3camp
 
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?3camp
 
Artur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupachArtur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupach3camp
 
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...3camp
 
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnieMarcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie3camp
 
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...3camp
 
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...3camp
 
Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model3camp
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API3camp
 
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanieOstatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie3camp
 
Oculus Rift – zanurzenie w przyszłość
Oculus Rift – zanurzenie w przyszłośćOculus Rift – zanurzenie w przyszłość
Oculus Rift – zanurzenie w przyszłość3camp
 
Druk 3d w służbie medycyny i przemysłu
 Druk 3d w służbie medycyny i przemysłu Druk 3d w służbie medycyny i przemysłu
Druk 3d w służbie medycyny i przemysłu3camp
 
Bitcoin – waluta globalna
Bitcoin – waluta globalnaBitcoin – waluta globalna
Bitcoin – waluta globalna3camp
 
Is social media next waste?
Is social media next waste?Is social media next waste?
Is social media next waste?3camp
 
W poszukiwaniu właściwych pytań i jednoznacznych odpowiedzi. Analiza biznesow...
W poszukiwaniu właściwych pytań i jednoznacznych odpowiedzi. Analiza biznesow...W poszukiwaniu właściwych pytań i jednoznacznych odpowiedzi. Analiza biznesow...
W poszukiwaniu właściwych pytań i jednoznacznych odpowiedzi. Analiza biznesow...3camp
 

Mais de 3camp (20)

ORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowaniaORM - tuningujemy podejście do mapowania
ORM - tuningujemy podejście do mapowania
 
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
W poszukiwaniu procesu doskonałego. Wdrożenie Scruma, Continuous Integrations...
 
Learn you some rx for the greater good
Learn you some rx for the greater goodLearn you some rx for the greater good
Learn you some rx for the greater good
 
Google App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjachGoogle App Engine i Google Play Services w Twoich aplikacjach
Google App Engine i Google Play Services w Twoich aplikacjach
 
AngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektuAngularJS (nie) nadaje się do dużego projektu
AngularJS (nie) nadaje się do dużego projektu
 
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
Przemysław Bartkowiak - Sam ustalasz ile za to zapłacisz – czyli nowy wymiar ...
 
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
Mirek Wąsowicz - Segment jednego, dokąd zmierza marketing online?
 
Artur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupachArtur Senk, OKE Poland, Big Data na zakupach
Artur Senk, OKE Poland, Big Data na zakupach
 
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
Piotr Macuk, Konfeo.com, Programista i biznes – plusy i minusy własnej działa...
 
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnieMarcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
Marcin Maj, Kainos - QA – wartko, zmiennie i interdyscyplinarnie
 
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
Jak przesiąść się na rower na dwóch kółkach? Od trzyosobowego startupu do spó...
 
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
Łukasz Brzeziński - Jak zarabiać z Wikingami? Czyli monetyzacja portalu inter...
 
Marcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk ModelMarcin Szeląg, InnovationNest, Startup Risk Model
Marcin Szeląg, InnovationNest, Startup Risk Model
 
JSON, REST API
JSON, REST APIJSON, REST API
JSON, REST API
 
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanieOstatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie
Ostatnia faza produktu: co się dzieję kiedy programista zakończył swoje zadanie
 
Oculus Rift – zanurzenie w przyszłość
Oculus Rift – zanurzenie w przyszłośćOculus Rift – zanurzenie w przyszłość
Oculus Rift – zanurzenie w przyszłość
 
Druk 3d w służbie medycyny i przemysłu
 Druk 3d w służbie medycyny i przemysłu Druk 3d w służbie medycyny i przemysłu
Druk 3d w służbie medycyny i przemysłu
 
Bitcoin – waluta globalna
Bitcoin – waluta globalnaBitcoin – waluta globalna
Bitcoin – waluta globalna
 
Is social media next waste?
Is social media next waste?Is social media next waste?
Is social media next waste?
 
W poszukiwaniu właściwych pytań i jednoznacznych odpowiedzi. Analiza biznesow...
W poszukiwaniu właściwych pytań i jednoznacznych odpowiedzi. Analiza biznesow...W poszukiwaniu właściwych pytań i jednoznacznych odpowiedzi. Analiza biznesow...
W poszukiwaniu właściwych pytań i jednoznacznych odpowiedzi. Analiza biznesow...
 

Último

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Angeliki Cooney
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 

Último (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 

Wykorzystanie języka Kotlin do aplikacji na platformie Android

  • 2. DAMIAN PETLA ANDROID DEVELOPER e-mail: damian.petla@schibsted.pl LinkedIn: pl.linkedin.com/in/damianpetla
  • 3.
  • 4. 1. DLACZEGO WYBRAŁEM KOTLINA? CIEKAWOŚĆ CODE REVIEW Z iOS JETBRAINS - ZNANA MARKA ROZMIAR APK I SZYBKA KOMPILACJA
  • 5. 2. CZY TRUDNO JEST ZACZĄĆ? 50 GODZIN SKŁADNIA NOWE PODEJŚCIE
  • 6. class User(val name: String, age: Int?) val name: String = “Damian” var isSuperUser: Boolean = true var pet: String? = null public fun sayHi(name: String, times: Int = 3) { for (i in 1..times) { println(“Hi $name”) } } private fun getSome() : String { return “some” } Kotlin
  • 7. 3. CO NAJBARDZIEJ MI SIĘ PODOBA W KOTLINIE? BEZPIECZNY KOD
  • 8. InputStream stream = ... if (stream != null) { stream.close(); } stream.close() stream?.close() Java Kotlin
  • 9. 3. CO NAJBARDZIEJ MI SIĘ PODOBA W KOTLINIE? BEZPIECZNY KOD PROSTE DEFINICJE KLAS
  • 10. public class Item { private String type; public Item(String type) { this.type = type; } public String getType() { return type; } public void setType(String type) { this.type = type; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Item item2 = (Item) o; if (type != null ? !type.equals(item2.type) : item2.type != null) return false; return true; } @Override public int hashCode() { return type != null ? type.hashCode() : 0; } @Override public String toString() { return "Item2{" + "type='" + type + ''' + '}'; } } public class Article extends Item { private Boolean isDeleted; private String id; private String category; private String published; private String publishedFormatted; private String firstPublished; private String updated; private String created; private List<Topic> topics; private String title; private String newsLifetime; private Integer newsValue; private List<Author> authors; private List<Resource> resources private Version version; private String vignette; private String displaySize; private Boolean live; private Boolean breaking; private Story story; private Boolean sponsored = false; public Article(String type) { super(type); } public Article(String type, Boolean isDeleted, String id, String category, String published, String publishedFormatted, String firstPublished, String updated, String created, List<Topic> topics, String title, String newsLifetime, Integer newsValue, List<Author> authors, List<Resource> resources, Version version, String vignette, String displaySize, Boolean live, Boolean breaking, Story story, Boolean sponsored) { super(type); this.isDeleted = isDeleted; this.id = id; this.category = category; this.published = published; this.publishedFormatted = publishedFormatted; this.firstPublished = firstPublished; this.updated = updated; this.created = created; this.topics = topics; this.title = title; this.newsLifetime = newsLifetime; this.newsValue = newsValue; this.authors = authors; this.resources = resources; this.version = version; this.vignette = vignette; this.displaySize = displaySize; this.live = live; this.breaking = breaking; this.story = story; this.sponsored = sponsored; } public Boolean getIsDeleted() { return isDeleted; } public void setIsDeleted(Boolean isDeleted) { this.isDeleted = isDeleted; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getPublished() { return published; } public void setPublished(String published) { this.published = published; } public String getPublishedFormatted() { return publishedFormatted; } public void setPublishedFormatted(String publishedFormatted) { this.publishedFormatted = publishedFormatted; } public String getFirstPublished() { return firstPublished; } public void setFirstPublished(String firstPublished) { this.firstPublished = firstPublished; } public String getUpdated() { return updated; } public void setUpdated(String updated) { this.updated = updated; } public String getCreated() { return created; } public void setCreated(String created) { this.created = created; } public List<Topic> getTopics() { return topics; } public void setTopics(List<Topic> topics) { this.topics = topics; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getNewsLifetime() { return newsLifetime; } public void setNewsLifetime(String newsLifetime) { this.newsLifetime = newsLifetime; } public Integer getNewsValue() { return newsValue; } public void setNewsValue(Integer newsValue) { this.newsValue = newsValue; } public List<Author> getAuthors() { return authors; } public void setAuthors(List<Author> authors) { this.authors = authors; } public List<Resource> getResources() { return resources; } public void setResources(List<Resource> resources) { this.resources = resources; } public Version getVersion() { return version; } public void setVersion(Version version) { this.version = version; } public String getVignette() { return vignette; } public void setVignette(String vignette) { this.vignette = vignette; } public String getDisplaySize() { return displaySize; } public void setDisplaySize(String displaySize) { this.displaySize = displaySize; } public Boolean getLive() { return live; } public void setLive(Boolean live) { this.live = live; } public Boolean getBreaking() { return breaking; } public void setBreaking(Boolean breaking) { this.breaking = breaking; } public Story getStory() { return story; } public void setStory(Story story) { this.story = story; } public Boolean getSponsored() { return sponsored; } public void setSponsored(Boolean sponsored) { this.sponsored = sponsored; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; Article article2 = (Article) o; if (authors != null ? !authors.equals(article2.authors) : article2.authors != null) return false; if (breaking != null ? !breaking.equals(article2.breaking) : article2.breaking != null) return false; if (category != null ? !category.equals(article2.category) : article2.category != null) return false; if (created != null ? !created.equals(article2.created) : article2.created != null) return false; if (displaySize != null ? !displaySize.equals(article2.displaySize) : article2.displaySize != null) return false; if (firstPublished != null ? !firstPublished.equals(article2.firstPublished) : article2.firstPublished != null) return false; if (id != null ? !id.equals(article2.id) : article2.id != null) return false; if (isDeleted != null ? !isDeleted.equals(article2.isDeleted) : article2.isDeleted != null) return false; if (live != null ? !live.equals(article2.live) : article2.live != null) return false; if (newsLifetime != null ? !newsLifetime.equals(article2.newsLifetime) : article2.newsLifetime != null) return false; if (newsValue != null ? !newsValue.equals(article2.newsValue) : article2.newsValue != null) return false; if (published != null ? !published.equals(article2.published) : article2.published != null) return false; if (publishedFormatted != null ? !publishedFormatted.equals(article2.publishedFormatted) : article2.publishedFormatted != null) return false; if (resources != null ? !resources.equals(article2.resources) : article2.resources != null) return false; if (sponsored != null ? !sponsored.equals(article2.sponsored) : article2.sponsored != null) return false; if (story != null ? !story.equals(article2.story) : article2.story != null) return false; if (title != null ? !title.equals(article2.title) : article2.title != null) return false; if (topics != null ? !topics.equals(article2.topics) : article2.topics != null) return false; if (updated != null ? !updated.equals(article2.updated) : article2.updated != null) return false; if (version != null ? !version.equals(article2.version) : article2.version != null) return false; if (vignette != null ? !vignette.equals(article2.vignette) : article2.vignette != null) return false; return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (isDeleted != null ? isDeleted.hashCode() : 0); result = 31 * result + (id != null ? id.hashCode() : 0); result = 31 * result + (category != null ? category.hashCode() : 0); result = 31 * result + (published != null ? published.hashCode() : 0); result = 31 * result + (publishedFormatted != null ? publishedFormatted.hashCode() : 0); result = 31 * result + (firstPublished != null ? firstPublished.hashCode() : 0); result = 31 * result + (updated != null ? updated.hashCode() : 0); result = 31 * result + (created != null ? created.hashCode() : 0); result = 31 * result + (topics != null ? topics.hashCode() : 0); result = 31 * result + (title != null ? title.hashCode() : 0); result = 31 * result + (newsLifetime != null ? newsLifetime.hashCode() : 0); result = 31 * result + (newsValue != null ? newsValue.hashCode() : 0); result = 31 * result + (authors != null ? authors.hashCode() : 0); result = 31 * result + (resources != null ? resources.hashCode() : 0); result = 31 * result + (version != null ? version.hashCode() : 0); result = 31 * result + (vignette != null ? vignette.hashCode() : 0); result = 31 * result + (displaySize != null ? displaySize.hashCode() : 0); result = 31 * result + (live != null ? live.hashCode() : 0); result = 31 * result + (breaking != null ? breaking.hashCode() : 0); result = 31 * result + (story != null ? story.hashCode() : 0); result = 31 * result + (sponsored != null ? sponsored.hashCode() : 0); return result; } @Override public String toString() { return "Article{" + open class Item(val type: ItemTypeEnum): Serializable data class Article(type: ItemTypeEnum, val isDeleted: Boolean?, val id: String, val category: String, val published: String, var publishedFormatted: String?, val firstPublished: String?, val updated: String, val created: String, val topics: Array<Topic>, val title: String, val newsLifetime: String, val newsValue: Int, val authors: Array<Author>, val resources: Array<Resource>, val version: Version?, val vignette: String?, val displaySize: String, val live: Boolean?, val breaking: Boolean?, val story: Story?, val sponsored: Boolean = false ) : Item(type) Java - 354 Kotlin - 25
  • 11. data class User(val name: String, val surname: String, val age: Int) val user = User(“Damian”, “Petla”, 33) val user2 = user.copy(age = 30, name = “Adam”) println(user) println(user2) User(name=Damian, surname=Petla, age=33) User(name=Adam, surname=Petla, age=30) Kotlin Log
  • 12. 3. CO NAJBARDZIEJ MI SIĘ PODOBA W KOTLINIE? BEZPIECZNY KOD PROSTE DEFINICJE KLAS LAMBDA STRING TEMPLATES
  • 13. Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println(“Hello! " + v.isOpaque()); } }); Java Kotlin val button = findViewById(R.id.button) as Button button.setOnClickListener { println("Hello! ${it.isOpaque()}") }
  • 14. 3. CO NAJBARDZIEJ MI SIĘ PODOBA W KOTLINIE? BEZPIECZNY KOD PROSTE DEFINICJE KLAS LAMBDA STRING TEMPLATES SMART CAST
  • 15. int l = 0; if (obj instanceof String) { l = ((String)obj).length; } Java Kotlin var l = 0 if (obj is String) { l = obj.length } val l : Int = (obj as? String)?.length ?: 0
  • 16. 3. CO NAJBARDZIEJ MI SIĘ PODOBA W KOTLINIE? BEZPIECZNY KOD PROSTE DEFINICJE KLAS LAMBDA STRING TEMPLATES SMART CAST FUNCTION EXTENSIONS
  • 17. String utcDate = ... String formatted = Utilites.toPrettyDate(utcDate); textView.setText(formatted); Java Kotlin textView.setText(utcDate.toPrettyDate()) fun String.toPrettyDate(): String { return “$this is formatted now” }
  • 18. 4. CZY SĄ JAKIEŚ PROBLEMY Z KOTLINEM? SZYBKA ODPOWIEDŹ NA ZGŁOSZONE BŁEDY JETBRAINS AKTYWNY NA STACK OVERFLOW 220 BUGÓW NAPRAWIONYCH W WERSJI M11(0.11.91)
  • 19.
  • 22. 5. OD CZEGO ZACZĄĆ NAUKĘ?
  • 26. 6. KTO UŻYWA KOTLINA?
  • 27. 7. CZY MAM JAKIEŚ PORADY NA POCZĄTEK? !! ZAMIAST ? CZĘSTO WRACAJ DO DOKUMENTACJI UDZIELAJ SIĘ W COMMUNITY
  • 28. Q & A