Slide 1

Slide 1 text

Javaエンジニアのための低コストKotlin入門 JJUG CCC 2024 Fall Daiki Hirabayashi

Slide 2

Slide 2 text

自己紹介 平林 大輝 X (Twitter): @dhirabayashi64 株式会社テクニケーション – 2021年~ 現職 いわゆるシステムエンジニア – 以前はJavaを使った開発をしていた – 最近はサーバサイドKotlin JJUG CCC歴 – 2016年頃から参加 – 登壇は2回目

Slide 3

Slide 3 text

コンセプト ● まずは動くコードを書けるようになる形でKotlinに入門する – 入門の入門 ● できるだけ少ない労力で動くコードを書けるようになる ● そのためにJavaの知識とIntelliJ IDEAの補完を活用する

Slide 4

Slide 4 text

目指すこと ● Kotlinでひとまず簡単なコードが書けるようになる ● 最低限のハマりどころを知る

Slide 5

Slide 5 text

目指さないこと ● Kotlinらしいコードを書けるようになること ● Kotlinの便利な機能を知ること

Slide 6

Slide 6 text

進め方 ● Javaからの類推やIntelliJ IDEAの機能を使ってとにかくコード を書く ● コンパイルエラーや警告の有無を確認する ● IntelliJ IDEAによる補正も活用してエラーや警告を解消 ● 実行して結果を確認する

Slide 7

Slide 7 text

準備 ● IntelliJ IDEAをインストール – Community EditionでOK

Slide 8

Slide 8 text

Kotlinプロジェクト作成

Slide 9

Slide 9 text

生成されたサンプルコード

Slide 10

Slide 10 text

実行

Slide 11

Slide 11 text

実行結果

Slide 12

Slide 12 text

もう一歩進んでFizzBuzzを書いてみよう ● 1から20までの各数値について以下の通り出力 – 3の倍数なら「Fizz」 – 5の倍数なら「Buzz」 – 3の倍数かつ5の倍数なら「FizzBuzz」 – いずれでもなければ数値そのまま

Slide 13

Slide 13 text

もう一歩進んでFizzBuzzを書いてみよう

Slide 14

Slide 14 text

もう一歩進んでFizzBuzzを書いてみよう

Slide 15

Slide 15 text

もう一歩進んでFizzBuzzを書いてみよう ● package通りの階層じゃな い

Slide 16

Slide 16 text

もう一歩進んでFizzBuzzを書いてみよう ● 消してみた

Slide 17

Slide 17 text

もう一歩進んでFizzBuzzを書いてみよう ● main関数 ● さっき見た通りに書く

Slide 18

Slide 18 text

もう一歩進んでFizzBuzzを書いてみよう ● FizzBuzzのロジックは関数として切り出したい ● fizzbuzz関数 – 単一の数値を引数として受け取る – それに対応する文字列を返す

Slide 19

Slide 19 text

もう一歩進んでFizzBuzzを書いてみよう ● main関数と同じように書く ● 引数、戻り値の書き方は?

Slide 20

Slide 20 text

もう一歩進んでFizzBuzzを書いてみよう ● まずは引数を定義したい

Slide 21

Slide 21 text

もう一歩進んでFizzBuzzを書いてみよう ● 呼び出し元で引数を渡して しまう

Slide 22

Slide 22 text

もう一歩進んでFizzBuzzを書いてみよう ● Alt + Enterでサジェスト ● 上を選択

Slide 23

Slide 23 text

もう一歩進んでFizzBuzzを書いてみよう ● 引数が定義された ● 型は後ろに書く ● intではなくInt(大文字)

Slide 24

Slide 24 text

もう一歩進んでFizzBuzzを書いてみよう ● 続いて戻り値を定義したい ● 一旦コンパイルエラーを

Slide 25

Slide 25 text

もう一歩進んでFizzBuzzを書いてみよう ● Alt + Enter ● 適用する

Slide 26

Slide 26 text

もう一歩進んでFizzBuzzを書いてみよう ● 戻り値も定義された ● 型は後ろに書く

Slide 27

Slide 27 text

もう一歩進んでFizzBuzzを書いてみよう ● FizzBuzzのロジックを書く ● 条件分岐はif文のはず

Slide 28

Slide 28 text

もう一歩進んでFizzBuzzを書いてみよう ● とりあえず単純なパターン をJavaと同じ書き方で ● その部分にはコンパイルエ ラーなし

Slide 29

Slide 29 text

もう一歩進んでFizzBuzzを書いてみよう ● 論理演算子もJavaと同様に ● 該当部分のコンパイルエ ラーなし

Slide 30

Slide 30 text

もう一歩進んでFizzBuzzを書いてみよう ● あとはどちらの倍数でもな い場合 – そのまま数字を返す – しかし型はString

Slide 31

Slide 31 text

もう一歩進んでFizzBuzzを書いてみよう ● Stringへの変換 ● String.valueOf()だとエラー

Slide 32

Slide 32 text

もう一歩進んでFizzBuzzを書いてみよう ● Integer.toString()を試す ● これならOK ● しかし波線がある

Slide 33

Slide 33 text

もう一歩進んでFizzBuzzを書いてみよう ● 適用してみる

Slide 34

Slide 34 text

もう一歩進んでFizzBuzzを書いてみよう ● toString()メソッドになった ● Intはメソッドを持っている

Slide 35

Slide 35 text

もう一歩進んでFizzBuzzを書いてみよう ● 完成

Slide 36

Slide 36 text

もう一歩進んでFizzBuzzを書いてみよう ● 1から20までのループを書き たい

Slide 37

Slide 37 text

もう一歩進んでFizzBuzzを書いてみよう ● 今ある知識でも再帰でなら 書けるが… ● 慣れてないと思いつかない ● for文かwhile文で書きたい

Slide 38

Slide 38 text

もう一歩進んでFizzBuzzを書いてみよう ● Javaと同じ書き方のfor文 ● コンパイルエラーが多すぎ る ● ここから補完で直していく のは厳しい

Slide 39

Slide 39 text

もう一歩進んでFizzBuzzを書いてみよう ● while文 ● iを定義できればいけそう

Slide 40

Slide 40 text

もう一歩進んでFizzBuzzを書いてみよう ● Alt + Enterで変数を定義して もらう

Slide 41

Slide 41 text

もう一歩進んでFizzBuzzを書いてみよう ● とりあえずvalで

Slide 42

Slide 42 text

もう一歩進んでFizzBuzzを書いてみよう ● こうなった

Slide 43

Slide 43 text

もう一歩進んでFizzBuzzを書いてみよう ● 1で初期化 ● コンパイルエラーが解消 ● 現時点では無限ループ

Slide 44

Slide 44 text

もう一歩進んでFizzBuzzを書いてみよう ● iの更新 ● コンパイルエラーに

Slide 45

Slide 45 text

もう一歩進んでFizzBuzzを書いてみよう ● varに変えろと

Slide 46

Slide 46 text

もう一歩進んでFizzBuzzを書いてみよう ● コンパイルエラーが解消 ● 変数の定義方法が判明 – val: 変更不可 – var: 変更可能

Slide 47

Slide 47 text

もう一歩進んでFizzBuzzを書いてみよう ● これで完成のはず

Slide 48

Slide 48 text

もう一歩進んでFizzBuzzを書いてみよう ● 実行する

Slide 49

Slide 49 text

もう一歩進んでFizzBuzzを書いてみよう ● 動いてそう

Slide 50

Slide 50 text

ここまでで得た知識 ● main関数の書き方 ● 標準出力に出す書き方 ● 変数の定義方法 ● ループの書き方 ● 条件分岐の書き方 ● 関数の定義方法

Slide 51

Slide 51 text

ここまでで得られていない知識 ● 配列の使い方 ● 標準ライブラリ

Slide 52

Slide 52 text

FizzBuzzをファイルに出力しよう ● こんな感じのテキストファイル

Slide 53

Slide 53 text

FizzBuzzをファイルに出力しよう ● Javaの標準ライブラリが使えるはず ● JavaだとFilesのwriteを使うのが楽そう – 文字列のリストを渡すやつを使う

Slide 54

Slide 54 text

FizzBuzzをファイルに出力しよう ● 出力先ファイル名を変数に

Slide 55

Slide 55 text

FizzBuzzをファイルに出力しよう ● Path型の値もvalで定義

Slide 56

Slide 56 text

FizzBuzzをファイルに出力しよう ● JavaのPathがimportされてい る ● やはりJavaの標準ライブラリ が使える

Slide 57

Slide 57 text

FizzBuzzをファイルに出力しよう ● 書き込むためのListが必要 ● ArrayListが使えるはず

Slide 58

Slide 58 text

FizzBuzzをファイルに出力しよう ● コンパイルエラー

Slide 59

Slide 59 text

FizzBuzzをファイルに出力しよう ● newという予約語がなさそう

Slide 60

Slide 60 text

FizzBuzzをファイルに出力しよう ● とりあえず消したらコンパイ ルエラーが解消

Slide 61

Slide 61 text

FizzBuzzをファイルに出力しよう ● fizzbuzz()の戻り値をリストに

Slide 62

Slide 62 text

FizzBuzzをファイルに出力しよう ● writeの記述 ● IOExceptionを処理してない が何も言われない

Slide 63

Slide 63 text

FizzBuzzをファイルに出力しよう ● 実行

Slide 64

Slide 64 text

FizzBuzzをファイルに出力しよう ● ファイルが作成された

Slide 65

Slide 65 text

FizzBuzzをファイルに出力しよう ● できていそう

Slide 66

Slide 66 text

ここまでで得た知識 ● main関数の書き方 ● 標準出力に出す書き方 ● ループの書き方 ● 条件分岐の書き方 ● 関数の定義方法 ● 変数の定義方法 ● 配列の使い方(ArrayListだけど) ● 標準ライブラリの使い方

Slide 67

Slide 67 text

残りのトピック

Slide 68

Slide 68 text

ハマりどころ ● Javaからの類推だけだと想定外の結果になるケース ● 基本的にJavaとの相互運用時に発生する – Javaで書いたコードをKotlinから呼び出す – Kotlinで書いたコードをJavaから呼び出す

Slide 69

Slide 69 text

ハマりどころ ● ハイライト – null安全性について – チェック例外について – Javaで書かれたライブラリを呼ぶ場合

Slide 70

Slide 70 text

null安全性について ● Kotlinにはnull安全性のための機構がある – null参照が発生しないことをコンパイラが保証 – コンパイルが通ったらnull参照が発生しない ● ただし、Javaで書かれたコードを呼ぶ場合 – コンパイルエラーが出ずにnull参照が発生することがある

Slide 71

Slide 71 text

チェック例外 ● Kotlinだとチェック例外という概念がない – 例外処理しなくてもコンパイルエラーは発生しない ● ただし、Kotlinで書いたコードをJavaから呼び出す場合 – 「例外処理しなくてもコンパイルエラーは発生しない」 – ↑これがJava側のコードでも発生してしまう場合がある

Slide 72

Slide 72 text

Javaで書かれたライブラリを呼ぶ場合 ● KotlinだとJavaで書かれたライブラリを使える ● ただし、Kotlinから呼ぶと一部うまく動かない場合もある ● 例 – Mockito ● whenが予約語なのでエスケープが必要になる ● null安全性との兼ね合いで想定外の例外が発生する場合がある – Spring Data JDBC ● data classでBeanPropertyRowMapperが使えない

Slide 73

Slide 73 text

ハマりどころの対処方法 ● null安全性について – Java側で@Nullableアノテーションを付ける – Kotlin側でnull許容の型を明示する ● チェック例外について – Kotlin側で@Throwsアノテーションを付ける ● Javaで書かれたライブラリを呼ぶ場合 – 個別の話なのでそれぞれ調べる – Kotlinラッパーが提供されている場合がある

Slide 74

Slide 74 text

ハマりどころ ● 詳細はQiitaに書きました… 🙏 – https://qiita.com/dhirabayashi/items/9ea25243a9a09e7c7ae3

Slide 75

Slide 75 text

その後のステップ ● 基礎を学ぶ ● ちょっとしたスクリプトをKotlinで書いてみる ● プログラミングの問題を解く ● Kotlinで何か作る

Slide 76

Slide 76 text

基礎を学ぶ ● Kotlin入門までの助走読本(2017年) – https://x.com/kotlin_jp/status/869003897825705984

Slide 77

Slide 77 text

プログラミングの問題を解く ● 簡単な練習問題 – https://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocks.ht ml ● 上記練習問題を解いてみた – https://github.com/dhirabayashi/kotlinExample/tree/master

Slide 78

Slide 78 text

プログラミングの問題を解く ● 競技プログラミング – 以前やったセッション ● https://speakerdeck.com/dhirabayashi/jvmyan-yu-demodekiru-jing-ji- puroguramingu – 以前書いた記事 ● https://qiita.com/dhirabayashi/items/56d6af2c0b2bda6f588f ● https://qiita.com/dhirabayashi/items/8b1ae20d3c5c34d41d00

Slide 79

Slide 79 text

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