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
Javaエンジニアのための低コストKotlin入門
Search
dhirabayashi
September 24, 2024
Technology
0
790
Javaエンジニアのための低コストKotlin入門
JJUG CCC 2024 Fall
2024年10月27日(日) 10:00 - 10:20
dhirabayashi
September 24, 2024
Tweet
Share
More Decks by dhirabayashi
See All by dhirabayashi
JVM言語でもできる、競技プログラミング
dhirabayashi
0
350
Other Decks in Technology
See All in Technology
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
260
20241220_S3 tablesの使い方を検証してみた
handy
3
380
TSKaigi 2024 の登壇から広がったコミュニティ活動について
tsukuha
0
160
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
190
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
0
140
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
220
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
280
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
170
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
530
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Become a Pro
speakerdeck
PRO
26
5k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Optimizing for Happiness
mojombo
376
70k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
How GitHub (no longer) Works
holman
311
140k
Docker and Python
trallard
42
3.1k
Faster Mobile Websites
deanohume
305
30k
Transcript
Javaエンジニアのための低コストKotlin入門 JJUG CCC 2024 Fall Daiki Hirabayashi
自己紹介 平林 大輝 X (Twitter): @dhirabayashi64 株式会社テクニケーション – 2021年~ 現職
いわゆるシステムエンジニア – 以前はJavaを使った開発をしていた – 最近はサーバサイドKotlin JJUG CCC歴 – 2016年頃から参加 – 登壇は2回目
コンセプト • まずは動くコードを書けるようになる形でKotlinに入門する – 入門の入門 • できるだけ少ない労力で動くコードを書けるようになる • そのためにJavaの知識とIntelliJ IDEAの補完を活用する
目指すこと • Kotlinでひとまず簡単なコードが書けるようになる • 最低限のハマりどころを知る
目指さないこと • Kotlinらしいコードを書けるようになること • Kotlinの便利な機能を知ること
進め方 • Javaからの類推やIntelliJ IDEAの機能を使ってとにかくコード を書く • コンパイルエラーや警告の有無を確認する • IntelliJ IDEAによる補正も活用してエラーや警告を解消
• 実行して結果を確認する
準備 • IntelliJ IDEAをインストール – Community EditionでOK
Kotlinプロジェクト作成
生成されたサンプルコード
実行
実行結果
もう一歩進んでFizzBuzzを書いてみよう • 1から20までの各数値について以下の通り出力 – 3の倍数なら「Fizz」 – 5の倍数なら「Buzz」 – 3の倍数かつ5の倍数なら「FizzBuzz」 –
いずれでもなければ数値そのまま
もう一歩進んでFizzBuzzを書いてみよう
もう一歩進んでFizzBuzzを書いてみよう
もう一歩進んでFizzBuzzを書いてみよう • package通りの階層じゃな い
もう一歩進んでFizzBuzzを書いてみよう • 消してみた
もう一歩進んでFizzBuzzを書いてみよう • main関数 • さっき見た通りに書く
もう一歩進んでFizzBuzzを書いてみよう • FizzBuzzのロジックは関数として切り出したい • fizzbuzz関数 – 単一の数値を引数として受け取る – それに対応する文字列を返す
もう一歩進んでFizzBuzzを書いてみよう • main関数と同じように書く • 引数、戻り値の書き方は?
もう一歩進んでFizzBuzzを書いてみよう • まずは引数を定義したい
もう一歩進んでFizzBuzzを書いてみよう • 呼び出し元で引数を渡して しまう
もう一歩進んでFizzBuzzを書いてみよう • Alt + Enterでサジェスト • 上を選択
もう一歩進んでFizzBuzzを書いてみよう • 引数が定義された • 型は後ろに書く • intではなくInt(大文字)
もう一歩進んでFizzBuzzを書いてみよう • 続いて戻り値を定義したい • 一旦コンパイルエラーを
もう一歩進んでFizzBuzzを書いてみよう • Alt + Enter • 適用する
もう一歩進んでFizzBuzzを書いてみよう • 戻り値も定義された • 型は後ろに書く
もう一歩進んでFizzBuzzを書いてみよう • FizzBuzzのロジックを書く • 条件分岐はif文のはず
もう一歩進んでFizzBuzzを書いてみよう • とりあえず単純なパターン をJavaと同じ書き方で • その部分にはコンパイルエ ラーなし
もう一歩進んでFizzBuzzを書いてみよう • 論理演算子もJavaと同様に • 該当部分のコンパイルエ ラーなし
もう一歩進んでFizzBuzzを書いてみよう • あとはどちらの倍数でもな い場合 – そのまま数字を返す – しかし型はString
もう一歩進んでFizzBuzzを書いてみよう • Stringへの変換 • String.valueOf()だとエラー
もう一歩進んでFizzBuzzを書いてみよう • Integer.toString()を試す • これならOK • しかし波線がある
もう一歩進んでFizzBuzzを書いてみよう • 適用してみる
もう一歩進んでFizzBuzzを書いてみよう • toString()メソッドになった • Intはメソッドを持っている
もう一歩進んでFizzBuzzを書いてみよう • 完成
もう一歩進んでFizzBuzzを書いてみよう • 1から20までのループを書き たい
もう一歩進んでFizzBuzzを書いてみよう • 今ある知識でも再帰でなら 書けるが… • 慣れてないと思いつかない • for文かwhile文で書きたい
もう一歩進んでFizzBuzzを書いてみよう • Javaと同じ書き方のfor文 • コンパイルエラーが多すぎ る • ここから補完で直していく のは厳しい
もう一歩進んでFizzBuzzを書いてみよう • while文 • iを定義できればいけそう
もう一歩進んでFizzBuzzを書いてみよう • Alt + Enterで変数を定義して もらう
もう一歩進んでFizzBuzzを書いてみよう • とりあえずvalで
もう一歩進んでFizzBuzzを書いてみよう • こうなった
もう一歩進んでFizzBuzzを書いてみよう • 1で初期化 • コンパイルエラーが解消 • 現時点では無限ループ
もう一歩進んでFizzBuzzを書いてみよう • iの更新 • コンパイルエラーに
もう一歩進んでFizzBuzzを書いてみよう • varに変えろと
もう一歩進んでFizzBuzzを書いてみよう • コンパイルエラーが解消 • 変数の定義方法が判明 – val: 変更不可 – var:
変更可能
もう一歩進んでFizzBuzzを書いてみよう • これで完成のはず
もう一歩進んでFizzBuzzを書いてみよう • 実行する
もう一歩進んでFizzBuzzを書いてみよう • 動いてそう
ここまでで得た知識 • main関数の書き方 • 標準出力に出す書き方 • 変数の定義方法 • ループの書き方 •
条件分岐の書き方 • 関数の定義方法
ここまでで得られていない知識 • 配列の使い方 • 標準ライブラリ
FizzBuzzをファイルに出力しよう • こんな感じのテキストファイル
FizzBuzzをファイルに出力しよう • Javaの標準ライブラリが使えるはず • JavaだとFilesのwriteを使うのが楽そう – 文字列のリストを渡すやつを使う
FizzBuzzをファイルに出力しよう • 出力先ファイル名を変数に
FizzBuzzをファイルに出力しよう • Path型の値もvalで定義
FizzBuzzをファイルに出力しよう • JavaのPathがimportされてい る • やはりJavaの標準ライブラリ が使える
FizzBuzzをファイルに出力しよう • 書き込むためのListが必要 • ArrayListが使えるはず
FizzBuzzをファイルに出力しよう • コンパイルエラー
FizzBuzzをファイルに出力しよう • newという予約語がなさそう
FizzBuzzをファイルに出力しよう • とりあえず消したらコンパイ ルエラーが解消
FizzBuzzをファイルに出力しよう • fizzbuzz()の戻り値をリストに
FizzBuzzをファイルに出力しよう • writeの記述 • IOExceptionを処理してない が何も言われない
FizzBuzzをファイルに出力しよう • 実行
FizzBuzzをファイルに出力しよう • ファイルが作成された
FizzBuzzをファイルに出力しよう • できていそう
ここまでで得た知識 • main関数の書き方 • 標準出力に出す書き方 • ループの書き方 • 条件分岐の書き方 •
関数の定義方法 • 変数の定義方法 • 配列の使い方(ArrayListだけど) • 標準ライブラリの使い方
残りのトピック
ハマりどころ • Javaからの類推だけだと想定外の結果になるケース • 基本的にJavaとの相互運用時に発生する – Javaで書いたコードをKotlinから呼び出す – Kotlinで書いたコードをJavaから呼び出す
ハマりどころ • ハイライト – null安全性について – チェック例外について – Javaで書かれたライブラリを呼ぶ場合
null安全性について • Kotlinにはnull安全性のための機構がある – null参照が発生しないことをコンパイラが保証 – コンパイルが通ったらnull参照が発生しない • ただし、Javaで書かれたコードを呼ぶ場合 –
コンパイルエラーが出ずにnull参照が発生することがある
チェック例外 • Kotlinだとチェック例外という概念がない – 例外処理しなくてもコンパイルエラーは発生しない • ただし、Kotlinで書いたコードをJavaから呼び出す場合 – 「例外処理しなくてもコンパイルエラーは発生しない」 –
↑これがJava側のコードでも発生してしまう場合がある
Javaで書かれたライブラリを呼ぶ場合 • KotlinだとJavaで書かれたライブラリを使える • ただし、Kotlinから呼ぶと一部うまく動かない場合もある • 例 – Mockito •
whenが予約語なのでエスケープが必要になる • null安全性との兼ね合いで想定外の例外が発生する場合がある – Spring Data JDBC • data classでBeanPropertyRowMapperが使えない
ハマりどころの対処方法 • null安全性について – Java側で@Nullableアノテーションを付ける – Kotlin側でnull許容の型を明示する • チェック例外について –
Kotlin側で@Throwsアノテーションを付ける • Javaで書かれたライブラリを呼ぶ場合 – 個別の話なのでそれぞれ調べる – Kotlinラッパーが提供されている場合がある
ハマりどころ • 詳細はQiitaに書きました… 🙏 – https://qiita.com/dhirabayashi/items/9ea25243a9a09e7c7ae3
その後のステップ • 基礎を学ぶ • ちょっとしたスクリプトをKotlinで書いてみる • プログラミングの問題を解く • Kotlinで何か作る
基礎を学ぶ • Kotlin入門までの助走読本(2017年) – https://x.com/kotlin_jp/status/869003897825705984
プログラミングの問題を解く • 簡単な練習問題 – https://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocks.ht ml • 上記練習問題を解いてみた – https://github.com/dhirabayashi/kotlinExample/tree/master
プログラミングの問題を解く • 競技プログラミング – 以前やったセッション • https://speakerdeck.com/dhirabayashi/jvmyan-yu-demodekiru-jing-ji- puroguramingu – 以前書いた記事
• https://qiita.com/dhirabayashi/items/56d6af2c0b2bda6f588f • https://qiita.com/dhirabayashi/items/8b1ae20d3c5c34d41d00
Kotlinで何か作る • Kotlin サーバーサイドプログラミング実践開発(2021年) – https://gihyo.jp/book/2021/978-4-297-11859-4 • 2024年版 Kotlin サーバーサイドプログラミング実践開発
– https://speakerdeck.com/n_takehata/kotlin-server-side-program ming-practice-2024 • ハンズオンで学ぶサーバーサイド Kotlin(Spring Boot&Arrow) – https://zenn.dev/msksgm/books/implementing-server-side-kotlin -development