Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Type Safety in an Unsafe World with Kotlin
Search
Cody Engel
February 02, 2021
Technology
0
24
Type Safety in an Unsafe World with Kotlin
Cody Engel
February 02, 2021
Tweet
Share
More Decks by Cody Engel
See All by Cody Engel
Kotlin 2 ½ Years Later
codyengel
0
42
Tech Community, Population Us
codyengel
0
51
Kotlin Lunch and Learn
codyengel
0
50
How To Make A Better Sandwich
codyengel
0
25
Other Decks in Technology
See All in Technology
さらに高品質・高速化を目指すAI時代のテスト設計支援と、めざす先 / AI Test Lab vol.1
shift_evolve
0
190
Git 研修 Advanced【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
200
AOAI Dev Day - Opening Session
yoshidashingo
2
470
ソフトウェアエンジニアリングの知見を活かして データ基盤をいい感じにする on Snowflake [MIERUNE BBQ #10]
mtpooh
2
150
【基調講演】変える、今ここから ― IoTとAIで紡ぐ未来
soracom
PRO
0
320
E2Eテスト自動化プラットフォームにおけるAIの活用
shift_evolve
0
190
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
3
1.2k
大規模ドラレコデータ収集・機械学習基盤を支える AWS CDK 〜導入・運用事例紹介〜
pemugi
0
110
LINE WORKSへ簡単通知!Incoming Webhookアプリの紹介
mmclsntr
0
110
Git 研修 Basic【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
310
[I/O Extended Android 2024] What`s new in Android 2024
kyeongwan
0
220
運用改善、不都合な真実 / 20240722-ssmjp-kaizen
opelab
17
8.4k
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
149
45k
What's in a price? How to price your products and services
michaelherold
239
11k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
16
1.6k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Web development in the modern age
philhawksworth
203
10k
For a Future-Friendly Web
brad_frost
173
9.2k
The Invisible Side of Design
smashingmag
294
50k
Fantastic passwords and where to find them - at NoRuKo
philnash
42
2.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
129
32k
Pencils Down: Stop Designing & Start Developing
hursman
118
11k
No one is an island. Learnings from fostering a developers community.
thoeni
17
2.8k
Designing on Purpose - Digital PM Summit 2013
jponch
113
6.6k
Transcript
Type Safety in an Unsafe World with Kotlin Cody Engel,
Staff Software Engineer @ PayPal
What is Type Safety? It is kind of confusing. Photo:
Matthew Hamilton via Unsplash
Robin Milner, A Theory of Type Polymorphism in Programming “Well
typed programs cannot go wrong.”
Going Wrong Syntactically valid, but meaningless. Type Safety by Michael
Hicks - http://bit.ly/ple-type-safety
Well Typed It may crash, but that is by design
in Kotlin. Type Safety by Michael Hicks - http://bit.ly/ple-type-safety
Well Typed, Continued This is by design in Ruby and
may also crash. Type Safety by Michael Hicks - http://bit.ly/ple-type-safety
Cody Engel, Type Safety in an Unsafe World with Kotlin
“Some languages have stricter behavior than others.”
What is Kotlin? It is a strict, yet concise programming
language. Photo: Marc Reichelt via Unsplash
Define Types Name can be inferred to be a String.
Define Mutability A variable defined as “var” can change.
Define Structures Structured data is more predictable.
Define Nullability Nullability is opt-in.
Define Concurrency Coroutines make concurrency simpler.
And The Unsafe World? That would be our APIs. Photo:
Jason Yoder via Unsplash
is_admin As a boolean it works well. Unfortunately, this wasn’t
how it was actually modeled.
is_admin Our permissions class was never safer! However this is
how we would model that information in Kotlin.
is_admin Okay, technically this isn’t too bad. Although, it is
not the best way to model a boolean with JSON.
is_admin Extension functions to the rescue. This could also be
an extension property, but extension functions look better in Keynote
is_admin Strings can also represent numeric values which can represent
booleans. I was pretty excited to make use of extension functions, so it was fine.
is_admin Unfortunately String already has a toBoolean function. And that
function is for converting “true” and “false” into a boolean
is_admin I can’t recall if this was actually possible with
the API. However there is a good chance it could have been possible based on customer configurations.
is_admin Fortunately, it isn’t too difficult to add. Nonetheless, it’d
be great if this wasn’t required in the first place
is_admin It was nullable though. That’s okay though, nullability is
actually pretty simple with Kotlin.
is_admin Updating our extension function to be on a nullable
Any works. Since we type cast on non-null types, the else branch catches our null case.
Making The World a Safer Place How to design safer
APIs. Photo: Matthew Rumph via Unsplash
Stick to a strict API when rolling your own specification.
Use an industry standard specification, such as Open API.
Look at JSON alternatives such as Protocol Buffers.
Let’s build some great and safe APIs. • YouTube -
bit.ly/cody-yt • Twitter - bit.ly/cody-twitter • Medium - bit.ly/cody-medium Thanks!