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
860
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
370
Other Decks in Technology
See All in Technology
Visual StudioとかIDE関連小ネタ話
kosmosebi
1
380
商品レコメンドでのexplicit negative feedbackの活用
alpicola
2
370
PaaSの歴史と、 アプリケーションプラットフォームのこれから
jacopen
7
1.5k
新卒1年目、はじめてのアプリケーションサーバー【IBM WebSphere Liberty】
ktgrryt
0
140
あなたの人生も変わるかも?AWS認定2つで始まったウソみたいな話
iwamot
3
860
デザインシステムを始めるために取り組んだこと - TechTrain x ゆめみ ここを意識してほしい!リファクタリング勉強会
kajitack
1
110
AWS Community Builderのススメ - みんなもCommunity Builderに応募しよう! -
smt7174
0
190
When Windows Meets Kubernetes…
pichuang
0
310
デジタルアイデンティティ人材育成推進ワーキンググループ 翻訳サブワーキンググループ 活動報告 / 20250114-OIDF-J-EduWG-TranslationSWG
oidfj
0
550
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
210
色々なAWSサービス名の由来を調べてみた
iriikeita
0
110
comilioとCloudflare、そして未来へと向けて
oliver_diary
6
460
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
510
110k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Unsuck your backbone
ammeep
669
57k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
The Cult of Friendly URLs
andyhume
78
6.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Mobile First: as difficult as doing things right
swwweet
222
9k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Building Adaptive Systems
keathley
38
2.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
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