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
800
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
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
180
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1.2k
2024年にチャレンジしたことを振り返るぞ
mitchan
0
150
Qiita埋め込み用スライド
naoki_0531
0
5.3k
LINEスキマニにおけるフロントエンド開発
lycorptech_jp
PRO
0
340
5分でわかるDuckDB
chanyou0311
10
3.3k
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
210
宇宙ベンチャーにおける最近の情シス取り組みについて
axelmizu
0
120
TypeScript開発にモジュラーモノリスを持ち込む
sansantech
PRO
2
640
pg_bigmをRustで実装する(第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
shinyakato_
0
110
クレカ・銀行連携機能における “状態”との向き合い方 / SmartBank Engineer LT Event
smartbank
2
100
多様なメトリックとシステムの健全性維持
masaaki_k
0
120
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Gamification - CAS2011
davidbonilla
80
5.1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
A designer walks into a library…
pauljervisheath
205
24k
The Invisible Side of Design
smashingmag
298
50k
Site-Speed That Sticks
csswizardry
2
190
Mobile First: as difficult as doing things right
swwweet
222
9k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
The Cost Of JavaScript in 2023
addyosmani
46
7k
We Have a Design System, Now What?
morganepeng
51
7.3k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
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