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
1.7k
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
320
JVM言語でもできる、競技プログラミング
dhirabayashi
0
520
Other Decks in Technology
See All in Technology
たかがボタン、されどボタン ~button要素から深ぼるボタンUIの定義について~ / BuriKaigi 2026
yamanoku
1
280
ソフトとハード両方いけるデータ人材の育て方
waiwai2111
1
450
あの夜、私たちは「人間」に戻った。 ── 災害ユートピア、贈与、そしてアジャイルの再構築 / 20260108 Hiromitsu Akiba
shift_evolve
PRO
0
700
戰略轉變:從建構 AI 代理人到發展可擴展的技能生態系統
appleboy
0
200
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
3
380
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
330
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
アウトプットはいいぞ / output_iizo
uhooi
0
120
みんなでAI上手ピーポーになろう! / Let’s All Get AI-Savvy!
kaminashi
0
140
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
12k
2025年 山梨の技術コミュニティを振り返る
yuukis
0
160
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
81
Into the Great Unknown - MozCon
thekraken
40
2.2k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
290
Large-scale JavaScript Application Architecture
addyosmani
515
110k
BBQ
matthewcrist
89
10k
sira's awesome portfolio website redesign presentation
elsirapls
0
120
The Spectacular Lies of Maps
axbom
PRO
1
430
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
170
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
YesSQL, Process and Tooling at Scale
rocio
174
15k
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