kdnakt blog

hello there.

会社でKotlin dojo(第44回)を開催した

今週は第44回を開催しました。引き続きKotlin Hands-on編です!

 

前回の様子はコチラ↓

kdnakt.hatenablog.com

 

 

[第44回の様子]

2020/12/16に第44回を開催した。

 

参加メンバーは自分をいれて5名。この1ヶ月くらいで参加してくれたひとが勢ぞろい、という感じのメンツ。

 

勉強会本編の内容としては、前回に引き続きCreating a WebSocket Chat with Ktorハンズオンに取り組み、4章Exchanging messagesを最後まで完了した。

 

[学んだことや疑問点]

  • Creating a WebSocket Chat with Ktor: 4. Exchanging messages
    • 前回実装したエコーサーバーにチャット機能を追加する
    • コネクションのID管理:一意のIDを払い出すのにAtomicIntegerを用いる
class Connection(val session: DefaultWebSocketSession) {
    companion object {
        var lastId = AtomicInteger(0)
    }
    val name = "user${lastId.getAndIncrement()}"
}
    • companion objectを使ってJavaのstaticフィールドっぽい感じになってるのは割と理解できるようになった
    • lastIdvarで可変なのはなぜだろう……
    • このnameがチャットのメッセージの送信者として表示される
    • コネクションの管理:今回も簡略化のためデータベース等は利用せずメモリ上にCollectionとして保持
    • Collectionへの要素の追加、削除に+=とか-=演算子を使って以下のように書けることを学んだ
val connections = Collections.synchronizedSet<Connection?>(LinkedHashSet())
val thisConnection = Connection()
connections += thisConnection
connections -= thisConnection
    • こういうのKotlin Examplesで教えて欲しかったな……
    • 今回も、実装したコードを以下のサイト経由でテスト。チャットは無事動いた 

www.websocket.org

 

[まとめ]

モブプログラミング・スタイルで、WebSocket Chat with Ktorハンズオンに取り組んでいる。

今週もCollectionの操作方法など、新しい学びがあった!

 

今週の進捗は以下のプルリクエストにまとまっている。

github.com