見出し画像

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

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

Q.
null 安全なのに readLine が null …?
A.
型が違うって怒られるのかなって思ってたんだけど多分自動で String? に変換してくれて、ここですぐ null チェックしてるのでスマート安全化されて事なきを得られている…って状態らしい…多分🤪

→コメントドキュメントは * の直後にタブだと特有のリンク等の書式は無効化されるがタブ自体のインデントは有効
→ * の直後に空白ならリンク等は有効だがタブによるインデントは無効で HTML 的なホワイトスペース連続した空白文字は空白1つに置換扱い

#学習記 #Kotlin
#also #KDoc

【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 # ヘルプ

----備忘録
loadCsv の解析部分は独立✅
KDoc の説明改行直したい✅
DBAccessor.deleteDBWitLineAll タイポ & Doc が All じゃない方のままになってる✅
 → Kotlin の doc もまだおかしい✅


備忘録

さて、 Csv の parse 改修、 Kotlin でもやろうね🤤
Java 側で変数と反復をほぼそのまま移植できると判っているのでそこは有り難い🤤

直前にやった作業と同じだからすぐ終わるぽ🤤
鉄は熱い記憶が鮮明なうちに打て🤪

readLine()

やってて気になったのがこれ265行目🤔
作った時もちょっと疑問だったんだけど Java では readLine は終端だと null が返ってくる仕様だからこれで良いんだけど、これ、 null 安全が有る Kotlin なのよね🙄

で、案の定、 data は null 安全な String なんだけど targetBufferedReader.readLine() も返り値が null 安全な String …なのに|すぐ後265行目の判定は IntelliJ だんまり🙄
いつもは ( null 安全型だから) 常に false だぞって言うのに…🤔
最初は「それでも null が入るので検査してあれば(コンパイル)エラー出ないし良いのかな」程度だったんだけどちゃんと確認しといた方が良いかなこれは😑

Kotlinでファイルを1行ずつ読み取る
https://www.techiedelight.com/ja/read-a-file-line-by-line-in-kotlin/

この記事見ると while の式のとこで代入までやってる🤔Java風に書くと怒られたけど
……… also ってなんだろ…🙄

[Kotlin]スコープ関数 apply,also,let,run,withの使い分け
https://pouhon.net/kotlin-sfunction/1392/

also
alsoの中のラムダ式で、Bookインスタンスは「it」で参照されています。こちらは省略不可です。
このitはラムダ式の引数が1つだけのときに使えるitであり、つまりalsoは呼び出し元を、ラムダの引数として扱っているということになります。

ははぁ、 Kotlin はラムダ経由でこういう書き方が許されるのね🤔

で、これだと readLine は null を返してくる、という事になるんだけど…なんで String? じゃない String なのに通るんだろ…?🙄❓❓❓
表記としてはすぐ null 検査して排除しているので結果的に大丈夫スマート安全化になってるようだけど…🤔
ひとまずこの null を検査しておく事でヨシ、ってのは変わらないみたいだからこれはこのままで大丈夫かな🤤
ラムダをもう少し理解できたら記事みたいな書き換えもアリだけど Swift のラムダ次第かな🙄
軽く調べると Java でもラムダは可能になっているし C++ でも可能なようなので OCObjective-C (正しくは OC++ ) でも可能という事になるかな🤤
これはこのファイルとデータベース終わったら第二の文法学習として取り掛かるのも有りかも?🤔

まぁ今はまだ半分も(言語が)終わってないから先に進むぽ🤪

話を戻して

Java でひな形に引数が書いてあって Kotlin でも入ってて直さないとってなってたんだけど…なぜか無い🙄

違う機能の All の方だった🤪
まぁ、修正…😑

後は doc の改行問題かな?🤔

markdown 使ってないけどタブや改行が有効になってる…🙄ナンデ?
@ のある行だけ * の後に空白が有って文本体は無しになってるからその違いかな?🤔

こいつで試してみようね🤤

🙄🙄🙄
もっと早く教えてよー😞

markdown の分の行数増えなくて凄い有り難い🤤捗るぅ
ただ、角括弧'[]'で括ってもリンクを貼ってくれなくなるのでそういうのが欲しい場合はやっぱり * の後にタブじゃなく空白にして markdown を入れないとならないかな🤔
あと、タブだと一見整ってる様に見えるけど、いわゆる自動改行word wrapしてくれないので文が長いとツールチップからはみ出て要スクロールになっちゃう🤪
markdown だとインデント設定とかあるだろうから自動改行込みでインデントもしたくてリンクも有効にしたいってなら markdown 使うしかないかな🤔
こいつはそこまで細かい書式を求めてなくてタブで字下げできてればいいかな程度なので今の方式で進むぽ🤤
(というか移植終わったから進むもなにももう追加されない🤪)


次回は

ようやく動作試験へ🤤
コンパイルエラーは無いけど果たして…🙄
Java 的には動作してたけど Kotlin 式にした事で起きる「誤り」が有るだろうからその辺りが焦点になるかな🤔

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