見出し画像

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

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

Q.
by lazy ?
A.
遅延初期化の一種らしい。 lateinit とは別に定数のエイリアスを作る場合には使う事になるんじゃないかな🤤

→ライブラリとしては結局 lateinit 修飾子を付けて init で確実に初期化する形にすればプロパティを宣言だけして後から初期化できてかつ null 安全になるっぽい🤔
→多分本来は定義即初期化が正義なのだと思うけど引数によって初期化するには結局この lateinit 修飾子でしかできない…(と思われる

#学習記 #Kotlin #lateinit #null安全

【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

はてさて、 null 安全化を果たす事はできるのだらうか😞

………

どうやらやろうとしている事は、結局 lateinit を使う、が FAFinal Answer っぽい🤤
プログラム的に正しく初期化が終わっていれば null 安全になる、というモノ仕様みたい🤔

以前の学習で使った lateinit は列挙のエイリアス作成の時かな?🤔
定義の段階では実態が無いのでプロパティ宣言の列挙中に別名列挙メンバーを作ろうとするとコンパイラIntelliJに怒られるので遅延設定が要るという物だったと思う🙄
でも調べると使ってるのは lateinit ではなく by lazy で別の遅延初期化なのよね…😞

【Android】lateinit と by lazy の使い分け【Kotlin】
https://qiita.com/u-dai/items/a31c5c2a7d5c7ed2cc47

記事を見る限りでは列挙のエイリアスは固定の値を返すので by lazy で良かった、というとこかしら🤤
lateinit はプリミティブでは使えないとあるけど Int とかはさすがに null 許容にしなくて平気だからプロパティの「オブジェクト」で null 安全で宣言時に初期化しないなら lateinit 付けとけば良いって事になるっぽ🤔
init や init が呼ぶ初期化処理で初期化できなかったら例外が出るようになるのでプログラマーの負け🤪
(なにしろ null 安全を目指してそういう作り方にしようとしてるんだから利用者側の失敗でエラったらダメよねw)

ではまずファイル名関連から…😑

init では4つとも初期化されてる59-62からこないだ saveCsv に足した null 安全変数への変換73-80を消してプロパティ直参照Javaと同じ記述に切り替えられるお🤤

後は cells かな🤤


次回は

一番問題なのは多分、プロパティ cellsArray<Array<String?>>? の null 安全化かもしれない…😑

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