見出し画像

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

Q.
なんで java が付くと不満なの?
A.
え?だって今やってるの Kotlin だし🙄
SQL みたいに Java でしか接続できなくて仕方なく、なら分かるけど KClass っていう Kotlin 用クラスオブジェクトが有るにも関わらず(以下云々かんぬん)

→ this::class は companion に阻まれる
 → java のリフレクションを通して外側クラスを取得するか直接クラス名を書くしかない
 →クラス名で行っても文字列ではないので一応リファクタリング対象となりソース修正時安全度は若干上がる

#学習記 #Kotlin
#readline

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

----備忘録
Java の main 側の AnalyzeArgs.arguments は String[] にして av.arguments 渡すだけ
status も忘れずに


デバグ

じゃ、裏切られた内容docでは安全なのに許容だったを修正するぽ😑
まぁ、調べてる途中で出てきたラムダを参考に直すだけなんだけど🤤

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

import java.io.BufferedReader
import java.io.File
import java.io.FileReader
import java.io.IOException
 
fun main() {
    val file = File("/home/data/file.txt")
    try {
        BufferedReader(FileReader(file)).use { br ->
            var line: String?
            while (br.readLine().also { line = it } != null) {
                println(line)
            }
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

サイトも永遠eternalではないので今回はコードも拝借コピペ

String? でも String でも怒られないとか罠がすぎる🙄
代わりに parseCsv は null 安全なので怒られる🤤
これは parseCsv を String? でも通る様にすれば良いかな🤔

parseCsv も null 安全にすべきかなと思わなくもないけど返り値が null 安全なら良いかな🤔
csv を読み込んで parse するのが目的だから大抵はファイルからの null を直接処理する事になる可能性もあるわけで🤤

あとそう言えばアプリ名取るとこ、 Companion って出てるからついでに直すぽ🙄

………

Java で言う getEnclosingClass() に相当するものがどうなってるか分からないっていうオチ😞

なんとなく、こうじゃないの?的な修正🤪
JSJavaScript とかだと概念的にこれで通るんだけど…デバグでブレイク貼って確認するぽ😑

はいハズレー😞

……… superclasses とかいうのが有るからこれかしら…?🤔

_人人人_
> Any <
 ̄Y^Y^Y^ ̄

さよか…🙄
まぁそりゃそうか😞

………

inner については一杯出てくるのに外側については殆ど語られてない😞
ただ、内側で '@' を付ける事で上位を参照できる物は見つかるんだけど「それクラス名を明記しないといけないから意味ないよね?🙄」ってなってる😑

………

java というのを経由すると enclosingClass が有るのでこれなら行ける?🤔

……… java って入れないといけないところに不満が有るけど一応これならクラス名を直接入れずに取れるのでひとまずこれで…😞

😞😞😞
まぁ、 DB は何となくすんなり行かないだろうなとは思ってた🙄


次回は

接続に失敗する原因を探るぽ😞

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