![見出し画像](https://assets.st-note.com/production/uploads/images/93372059/rectangle_large_type_2_66922a50c67f7f4ec8e2677e3754bb34.png?width=1200)
【Console Application】ファイルとデータベース 203【学習記】
ファイルとかデータベースの話🤤
Q.
static だから this が使えないとかどういう事?
A.
Kotlin はそんな事無いっぽい😑(未検証
通常の this はインスタンスとしてのクラスの情報を持っているので静的な状態だと他の言語ではだいたい this が使えないので同じだと思っていたんだけど常識的過ぎて書かれてないのか誰もやらないから書かれてないのか IntelliJ 的には問題無いって事になってるみたい🙄
→散々資料を探したけど static でも自クラスの参照は this らしい…
【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 の解析部分は独立
略値の定数化 ( Java )
DBAccessor.setValuesWithColumn data[i] の oub of index
KDoc の説明改行直したい
DBAccessor.updateDBValueWithColumn 主キー判定は無意味(キー無し DB 対応)
DBAccessor.updateDBValueWithColumn rows → loc
DBAccessor.updateDBValueWithColumn cNameCache 直取りイクナイ
DBAccessor.updateDBValusWithColumnName タイポ
DBAccessor.deleteDBWithLine 引数確認抜け
DBAccessor.deleteDBWitLineAll タイポ & Doc が All じゃない方のままになってる
DBAccessor._init rClass 不具合の検査位置は rAlias より先で try-catch にすべき
可能なら Record 派生 class 名を文字列直でなく取得で
main
それじゃ main 移植するぽ🤤
![](https://assets.st-note.com/img/1671131787840-Bi5MNkuIFa.jpg)
🙄🙄🙄
しょっぱな1行目でいきなり大技きてるんだけど?🤪
とりあえず式をコピペしてみるか…😑
![](https://assets.st-note.com/img/1671131817264-NPgrxrnJgu.jpg)
なんか Object(){} のとこなんとかしたら通りそうな気もするけどそれは結局 Java 式なので書き換えなのよね😑
自クラスとかも前回のリフレクションで見つけたやり方で参照できると思うけれど main での問題は static で呼ばれてインスタンスじゃないので this とかが使えないのでリフレクション的な参照が(そのままでは)できない事🙄
Java はそんなのが有るので main 内に限り Object から取得するのが1枚目に貼った画像の Java なんだけど…🤔
Java でもこの方法だと「別のクラス内で動かすと動作中のクラス名が返ってくる」のでアプリ名を取得できないのよね😞
さて、 Kotlin では如何に?🤤
アプリのパッケージ名をプログラムから取得する
https://androidstudio.hatenablog.com/entry/2014/07/23/153954
1枚目の画像みたいなややこしい取得じゃなく、単純に getPackageName() というのが有る模様😞
なんで「パッケージ名」という発想に至らなかったのか…🙄
C 言語の呪いかな🤪
まぁ、実行してる main の「クラス名」が欲しいわけだからパッケージ名は「ちょっと役割が違う」かな🤔
しかし kotlin って語を入れてるにも関わらず先頭に Java の記事が来るの、最近の先生の無能化がよく分かる検索結果よね😞
………
Java でのやり方が先に出てくる…勿論文は全く一緒😞
………
クラス名を書いて ::class.java.name と付けるのも出てくる…これ、手で文字列入れるのと何が違うの…?🙄
………
java の語を弾くと C# や Swift が出てくる…雲行きが怪しい☁
………
出てこないお…😞
リフレクションから探った方が良いかしら?🤔
リフレクション
https://kotlindive.hatenablog.jp/entry/2018/03/01/215611
for (i in obj::class.members) {
println(i)
}
🤔🤔🤔
どうやら名前が分からなくても同じ書き方っぽい🤔
そういやリフレクションで調べてた時に出てた記事でインスタンスからも取れるとかあるやつはそういやオブジェクト名は書いてないなって気付いた🤪
でも問題は実行中の、即ち所属しているクラスを companion object 上から得る方法なのよね😑
companion object ではない fun 内なら this でできるけど companion object では this が無い筈だから…どうするんだろ?🤔
………
this が一般語だから検索語として無視されてる…ヒドイ😞
(ページ内検索で気付く)
………
日本語指定なのに出てくる英語のみの質問サイト…
もしかして:先生脂肪
(誤字は意訳してネ
【Kotlin】companion objectに定義された関数への参照を取得する
https://qiita.com/wrongwrong/items/c199c837001f2c5ac631
参考にさせて頂いた記事
kotlin - Unable to reference companion object methods - Stack Overflow
https://stackoverflow.com/questions/35363831/unable-to-reference-companion-object-methods
fun test() {
process(::aa) // OK
process(::A.bb) // Overload resolution ambiguity
}
🤔🤔🤔
この、コロン2つの記述、手前に何かオブジェクト(とか変数)が要ると思ってたけど、文法的に演算子っぽい物だったのかな?🤔
この記法だと自分の居るスコープのクラスを見るんだろうか?文法確認したら分かるかな?🤔
とほほのKotlin入門
関数参照
https://www.tohoho-web.com/ex/kotlin.html#function-object
関数名の前に :: をつけると、関数を参照するオブジェクトを得ることができます。
惜しい…🙄
C で言う関数のポインタを得る感じ😞
………
もしかして:this::class
![](https://assets.st-note.com/img/1671131938818-6EGdSoN9WK.jpg)
え、通っちゃうの?これ😳
APPNAME の型推測が想定通りになっててどうすんのこれ動くの?状態🤪
………エラー出てないしとりあえず this::class で通ってもらおっと🙄
![](https://assets.st-note.com/img/1671131972465-GQ7SRLMFGN.jpg)
-v で起動したら、分かる…🙄
次回は
main の2行目から移植再開よー🤪
たった1行でこんな大変な目に遭うとは…😞