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
38
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
78
Tech Community, Population Us
codyengel
0
63
Kotlin Lunch and Learn
codyengel
0
62
How To Make A Better Sandwich
codyengel
0
39
Other Decks in Technology
See All in Technology
ビズリーチにおける検索・推薦の取り組み / DEIM2026
visional_engineering_and_design
1
120
AIファーストを前提とした開発スタイルの変化
sbtechnight
0
160
Agentic Software Modernization - Back to the Roots (Zürich Agentic Coding and Architectures, März 2026)
feststelltaste
1
220
「ストレッチゾーンに挑戦し続ける」ことって難しくないですか? メンバーの持続的成長を支えるEMの環境設計
sansantech
PRO
3
390
vLLM Community Meetup Tokyo #3 オープニングトーク
jpishikawa
0
210
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
110
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
100
類似画像検索モデルの開発ノウハウ
lycorptech_jp
PRO
4
1k
マルチアカウント環境でSecurity Hubの運用!導入の苦労とポイント / JAWS DAYS 2026
genda
0
100
Abuse report だけじゃない。AWS から緊急連絡が来る状況とは?昨今の攻撃や被害の事例の紹介と備えておきたい考え方について
kazzpapa3
1
160
EMからVPoEを経てCTOへ:マネジメントキャリアパスにおける葛藤と成長
kakehashi
PRO
9
1.3k
Claude Code Skills 勉強会 (DevelersIO向けに調整済み) / claude code skills for devio
masahirokawahara
0
240
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
9
36k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Statistics for Hackers
jakevdp
799
230k
Thoughts on Productivity
jonyablonski
75
5.1k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
460
Between Models and Reality
mayunak
2
230
Context Engineering - Making Every Token Count
addyosmani
9
740
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
960
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
210
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!