空の箱

からのはこ

Server Side Kotlin

Exposedでselectの対象としてサブクエリを利用する

TL;DR 以下のような SQL を Exposed を使って実行する方法を解説する。 select dpt.department_id, dpt.department_name, (select MAX(employee_id) from EMPLOYEE emp where emp.department_id = dpt.department_id) AS latest_employee_id from DEPARTMENT…

Kotlinで学ぶ純粋関数とカリー化

最近、KotlinでArrow-KTを使いたいと思っている。けどその前に「そもそも関数型プログラミングとは」というのを復習している。それにあたってこの本を1/3くらい読んだ。 なっとく!関数型プログラミング作者:Michał Płachta翔泳社Amazon 1/3ほど読み終えたと…

ExposedでDBの独自関数を呼び出す

TL;DR Oracle の独自関数であるNVLを Exposed で使う方法がわかる NVLに限らず各 DB の独自関数については ORM がデフォルトで提供していないため、同様の方法で実装することができる What's NVL? SQL の NVL 関数とは Null Value Logic の略で、NULL 値を別…

Koinで始めるKtor DI

TL;DR サーバーサイド Kotlin フレームワーク・Ktor は軽量フレームワークの触れ込みどおり、最低限の機能を提供している そのため標準で DI の機能が提供されていないため、Koinという DI ライブラリを別途導入する Koinの基本的な使い方について紹介する …

Kotlinの分解宣言を使うとJavaScriptの分割代入っぽく書ける

JavaScriptの分割代入とは? 誰しも書いたことがあるであろうこれのこと。 const obj = {a:0, b:1}; const { a, b } = obj; // これは以下のものと同様 // const a = obj.a; // const b = obj.b; Kotlinの分割宣言とは? 以下のようなコードのこと。operator…

Kotlinでrequireを使って引数とかのAssertionをいい感じに表現する

こういうコードを書いた覚えはないだろうか 例えば商品の代金を計算したいとする。その時の計算処理は一般化し、以下のように記述することができる。 fun calcPurchasePrice(price: Int, quantity: Int): Int { if (price < 0 || quantity < 0) { throw Ille…

Kotlinのプロパティ初期化処理を使い分ける

TL;DR Kotlin は、Java と同様にコンストラクターを使用してオブジェクトを生成し、プロパティを初期化する。 Kotlin のコンストラクターには、プライマリコンストラクター、セカンダリコンストラクター、イニシャライザブロック、プロパティの初期化の 4 つ…

KotlinでBranded Typesを実装する方法を考える

文字列は実質Any 例えば従業員IDを管理するemp_123456_idと部署IDを管理するdep_123456_idがあるとする。 これを文字列として扱った場合、コードとしては以下のようになる。 val employeeId = "emp_123456_id" val departmentId = "dep_123456_id" しかし、…

Kotlin DataFrameを使ってCSVやJSONをいい感じに扱う

Kotlin DataFrame とは JetBrains社純正のデータ操作ライブラリ。CSV,JSONなどをいい感じに扱える。 kotlin.github.io ということで、この記事では手始めにCSVで検証してみる。 導入 kotlin.github.io 今回はKotlin DSLで検証を行うため、以下の設定をbuild.…

SQLDelightを使ってKotlinで型安全にSQLを扱う

klibsを眺めていたところ面白そうなものを見つけたので試してみた。 sqldelight.github.io これが結構面白い。リポジトリのAboutに「Generates typesafe Kotlin APIs from SQL」とあって「ORM?」と思ったけど、どうもちょっと違う気がする*1。ORMはオブジェ…

KtorをApp Engineで動かしてCloud Runと比べてみる

Ktorで遊ぼうシリーズ二日目の記事です*1。 昨日の記事はこちら。 blog.inorinrinrin.com 今日はApp Engineにデプロイしてみる。たぶん昨日より簡単だと思う。 やってみる前にイメージを書いてるけど、AppEngineで動かせるようなjarを作ってそれを置くだけだ…

KtorをCloud Runで動かしてみる

ただの学習メモであり、遊んでみた記録。 あとあと見返したりしそうではあったので残しておく。 Dockerイメージをビルドする まずはKtorのドキュメントに従ってローカルでイメージをビルドしてみる。先に言っておくと特にハマることもなかった。 ktor.io リ…

Kotlinで三項演算子とif・whenをどう使い分けるか

なにやらXで三項演算子が話題なので書く。ちなみにKotlinだとifやwhenも式として扱える。 なので三項演算子を使う代わりにif・whenを使うというのが選択肢として可能になる。 最初に言うと、この手の議論で「三項演算子は見づらいから使うな!ifで書け」とい…