$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Javaエンジニアのための低コストKotlin入門
Search
dhirabayashi
September 24, 2024
Technology
0
1.6k
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
「O(n log(n))のパフォーマンス」の意味がわかるようになろう
dhirabayashi
1
250
JVM言語でもできる、競技プログラミング
dhirabayashi
0
510
Other Decks in Technology
See All in Technology
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
670
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
260
WordPress は終わったのか ~今のWordPress の制作手法ってなにがあんねん?~ / Is WordPress Over? How We Build with WordPress Today
tbshiki
1
600
プロダクトマネージャーが押さえておくべき、ソフトウェア資産とAIエージェント投資効果 / pmconf2025
i35_267
2
590
エンジニアリングをやめたくないので問い続ける
estie
2
840
ML PM Talk #1 - ML PMの分類に関する考察
lycorptech_jp
PRO
1
770
第4回 「メタデータ通り」 リアル開催
datayokocho
0
120
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
540
AWSを使う上で最低限知っておきたいセキュリティ研修を社内で実施した話 ~みんなでやるセキュリティ~
maimyyym
2
240
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
230
生成AI時代の自動E2Eテスト運用とPlaywright実践知_引持力哉
legalontechnologies
PRO
0
210
チーリンについて
hirotomotaguchi
5
1.6k
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
How to Ace a Technical Interview
jacobian
280
24k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Practical Orchestrator
shlominoach
190
11k
Automating Front-end Workflow
addyosmani
1371
200k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
[SF Ruby Conf 2025] Rails X
palkan
0
500
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Embracing the Ebb and Flow
colly
88
4.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
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