見出し画像

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

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

Q.
Java の文でエラー出ないならそれで良いのでは…?
A.
それじゃ Kotlin 学習にならないぽ🙄
その理屈が通るなら Java を Kotlin 変換に通すのと何も変わらないのでいざ純粋な Kotlin で似た実装を作る時に Java 方式にせざるを得なくなってイクナイ😞
ただし JDBC みたいな Java のライブラリを呼ぶしか手段が無い物は話が別🤤( Java 的な手続きでしか動かないから

→予想通り、リフレクションで困難を極めそうな DBAccessor の移植が始まる🙄

#学習記 #Kotlin #reflection #可変長引数

【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 で引数の並びが判別不能になる機能不足を解消
loadCsv の解析部分は独立
Record.validRange の例外
Record.validType が TXT としか比較してない
Record.setValue の一時 RecordElement 変数を無くせる?
Record.toStringValues は何故か1行になってない
reflection KClass への修正
万能指定 Class<?> の Kotlin 方式への書換え


DBAccessor

最後の移植クラスにとりかかろうね🤤
このクラスは初歩の学習者にあるまじきリフレクションを使っているのでそこがどれくらい移植しやすいのかで移植の進む速さが変わる🙄

リフレクション (情報工学)
https://ja.wikipedia.org/wiki/リフレクション_(情報工学)

情報工学においてリフレクション (reflection) とは、プログラムの実行過程でプログラム自身の構造を読み取ったり書き換えたりする技術のことを指す。

通常のプラグラムではクラスは名前を固定で書き込んでコンパイル実行バイナリ化して動かすんだけど、今回は Record 派生のクラス名は DBADBAccessor からは分からないので初期化するときにその情報を引数にして目的の派生後クラスのインスタンスを生成したいのでそこでリフレクションという概念が要るぽ🤤

クラス説明と import だけまず移植🤤
Array や List は未使用のままになるかな?🤔
互換で List は使うかも🙄

メンバー移植したけど `Class<?>private var rClass` のとこ、不安しかない😞
? の部分 Kotlin 方式に書き換えが要るんだけど調べてないのでとりあえず Java の書き方のまま🙄

後から改造で追加した部分なので先行で作った機能ありきですぐ移植できない系😞
つまり、ソースコード的には美しくなかった…ある程度考えて並べてた筈だけど意外な事実🙄
まぁ、そんな簡単に綺麗なソースにできたら誰も苦労しないよね🤤

Java の DBAccessor 見ると複数のコンストラクタから _init を呼ぶ方式になってる🤔
でも Kotlin は初期値を書ける上にコンストラクタ自体をオーバーロードできるので _init の呼び方を省略できる…のかな🤤
今回は移植なのでコンストラクタに直書きせずに _init を呼ぶという方法は維持しようと思うけどセカンダリコンストラクタは this で略値呼びする形にできると思う🤔
最終的には完全装飾型のコンストラクタ(プライマリ)だけが _init を呼ぶ、という方式に…🤤
(オーバーヘッドを気にしてはいけないw)

Kotlin の残余引数'...'ってどう書くんだろ…🤔

Kotlin - 可変長引数を扱う
https://blog.y-yuki.net/entry/2019/05/14/100000

Kotlinでは可変長引数として取る引数には、vararg 修飾子をつけます。

なんでめんどくさい方に作り変えるの…そういうのやめてほしい😞

Java の文が通ってしまってるけどちょっと調べると Kotlin では Class じゃなく KClass となっているので Kotlin としてのリフレクションに書き換えるならこのままではダメかなと思う🙄
今回の学習は「 Java の文が通るならそのままでいいや」ってワケにはいかないから書き換えないとね🙄
JDBC のとこは資料が全く無いしそもそもあれは Java と同じ使い方しか想定されてないっぽいのでそのまま😞

ひとまずコンストラクタ外で初期化してるので lateinit 付け🤤
文字数多いから late で通るようにならないかなと思わなくもない🙄


次回は

ひとまず移植を進めて直すのは後回し🤤

いいなと思ったら応援しよう!