見出し画像

【Console Application】ファイルとデータベース 166【学習記】

ファイルとかデータベースの話🤤

Q.
そういえばなんて Java をペーストして IntelliJ に Kotlin 変換させないの?
A.
以前の学習記で Kotlin プロジェクトにペーストすると変換しようとする機能が有るって記事を書いたけど、その後で、確かこのプロジェクトlampManagerを始めた辺りで、「折角だから手で移植する!」と宣言したんだったと思う🤔
実際、単純に IntelliJ にやってもらう方が早いけど手でやってるおかげで違いに色々気付けるので学習としては手移植の方が効果が高いと思う🤤

→ toLowerCase はロケール非対応で挙動が統一的ではないらしいので lowercase やそれにロケール情報を入れて使う、という方法になるっぽい
→ file の時もそうだったけど fileName からパス取ったりとかは Java のライブラリでほぼ同じコード
 →Kotlin の setter,getter の仕様の違いで Kotlin ではプロパティフィールド名のままで取り出せる

#学習記 #Kotlin #toLowerCase #immutable

【Console Application】ファイルとデータベース【学習記】
仕様
https://note.com/sayka/n/nb8a67fa90a64?magazine_key=m7bb64c6a359f#br1mB

仕様
レコード
・レベル
 1-12
・難易度
 b,n,h,a,l
・曲名
・ランプ
 -,x,a,e,c,h,e,f

オプションスイッチ
-u file.csv # 更新(略値)
 ファイル名だけ指定した場合更新処理と見做す
-d file.csv # 削除
-p # csv 出力(略値)
 何も指定せずに起動した場合出力処理と見做す
-v # バージョン
-h # ヘルプ

----備忘録
AnalyzeArgs で引数の並びが判別不能になる機能不足を解消


Csv

それじゃ Csv 移植するぽ🤤
そういや file はオーバーロードもない検査機能の1つしかなかったせいか略値設定は生きなかったけど Csv は結構数あるしそこそこオーバーロードも書いた気がするから今度こそ略値設定が活きる!…筈🤤

こちらは file の時と違ってクラス作って直接文字列のメンバーこさえてるんだけど…なんで enum じゃないのかっていうのもあるのよねこれ🤔
まぁ ExceptionMsg だから「例外が起きてからしか使わない」ってとこが大きいかも🤤
エラーとして止めるかそのまま進むかは呼び出し側に委ねる様な file の存在検査は「状態」を保持するコードが入用いりようだったので enum だった、ってとこかな☺️

static に拘る必要は無いけど new しないと取り出せないのと new しなくても取り出せる、でも static だから確定で起動時にメモリ取る…このあたりは「実行速度調整speed tuning」や「使用メモリ削減」が必要な場合になったら考えたら良い話かなって思う🤤
現段階では「移植」なので staticcompanion object で行くぽ🤪

Kotlin は型推測してくれるから初期値のある文字列なら型宣言省略できるけど val,var を付けないといけないのでやっぱりコピペは1行ずつになるっていう…🙄
まぁ、コードじゃなくて宣言だけのクラスだしまだマシ…かな?🤤

Csv は、もう最初から Java 側の import そのまままず入れちゃう😞
移植終わっても使ってなければ現状と同じ灰色で未使用って教えてくれるし🤤
JV は KT に直さないと流石に Unresolved だけど🙄

この `Array<Array<String>>` という表記法が凄い嫌い😞
String[][] じゃ駄目なん?🙄

………

_人人人人人人人人人_
> そんな物は無い <
 ̄Y^Y^Y^Y^Y^Y^Y^ ̄

😞😞😞

む、 name や path の get が外れてメンバー名でそのまま取れるのは getter に変換されるようになったからというのはどこかで見たので分かるけど toLowerCase() が非推奨になってる🙄❓❓❓

Kotlin 1.5.0-RC リリース: 標準ライブラリとテストライブラリの変更点
https://blog.jetbrains.com/ja/kotlin/2021/04/kotlin-1-5-0-rc-released-ja/

今回のリリースには、文字列や文字の大文字・小文字の変換に便利な uppercase()、lowercase()、titlecase() といった関数がロケールに依存しない API として、それぞれ *Char() 関数と共に盛り込まれています。

なんだ、代わりが有るならいいや🤤

………🤔
これはもしやみんな大好きテンプレートリテラルの出番?🤪

加算記号の時より文字数多いじゃんって思うけどこっちの書式のが好き🤤

IntelliJ は やたらと immutableval指定(変更不可) 化を推してくる😞
知ってるぞ。調子に乗って val 宣言した文字列、別のオブジェクトメンバーに渡しておいて後で改変しようとすると immutable string だからいじれなくなるの🙄
「凄い分かりにくくて面倒な immutable を解除する手順」を通してやっと本来の加工の処理に戻れるという事を🤬
だったら最初から mutable の var のままにしとくお😑

Java の方だと null 入れてローカル変数を掃除するコードになってるんだけど null 許容にしないといけなくて面倒なのでもうこれはガベコレ自動メモリ掃除機能任せでいいやってなった🙄


次回は

引き続き Csv の移植をするぽ🤤
チラっと見た感じではコンストラクタかな、次は🤔

この記事が気に入ったらサポートをしてみませんか?