見出し画像

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

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

Q.
inner? static?
A.
inner が付くと外側がインスタンス化前提の内部クラス、付いてない場合は単に外側のクラスはコンテナ入れ物の役割しか持たない、という違いが生まれるっぽい🤤

→今回内容的には最初に移植したライブラリのデバグ準備

#学習記 #Kotlin #typealias #内部クラス #inner

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

----備忘録
(現在無し)

の前に

言語的な違いにより Kotlin が Java よりすっきりしたコードとは言え動作試験debugは要る気がした🤤
IntelliJ がエラーで教えてくれるとは言え、理論的不具合logic errorまでは教えてくれないからやっといた方が良いよねっていう🤔

Console
 readLineKT
 AnalyzeArgs
  _init
  validOpt
MathUtil
 rnd
StdlibKT
 arrayStringToString
 tableStringToArrayString

………あれ? typealias ってこういう使い方じゃなかったっけ?🙄何か勘違いしてる?

………

軽く文献をググってみたけどそんなおかしな使い方ではないみたいなんだけどなんか拒否られる…😞ナンデ

【Console Application】基本文法 26【学習記】
https://note.com/sayka/n/n667bdfc687ad

過去の学習記で書いた記憶が有ったので検索したらヒット☺️
どうやらクラスの名前を略的に使いたい用途では良くないっぽい🙄
static クラスなら構わないけどインスタンス前提になってるクラスで typealias は余り都合が良くないみたい😞
過去の学習記と同じく、 jsx と同じ手法で行くぽ🤤

🙄🙄🙄

[Kotlin]内部クラス – 入れ子クラスとの違いとは?
https://pouhon.net/kotlin-inner/3513/

………

どうやらこの場合

Console.AnalyzeArgs()
Console().AnalyzeArgs()

という違いが存在していて現状の Console クラスの書き方だと前者の書き方をしないと通らないみたい😞
その割には typealias 通らないな!🤬そういうとこだぞIntelliJ
で、↑の内部変数化の方だと CON は Console()インスタンス なので inner が付いてない AnalyzeArgs は「そんな内部クラス知らんUnresolved」となるっぽい…🙄
inner 付けると Console.AnalyzeArgs() ができなくなるし両対応って無いのかな…🤔

ネストされたクラス
https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/nested-classes.html

想定以上の事は書いてない…😞

Kotlin - 内部クラスとネストされたクラス
https://blog.y-yuki.net/entry/2019/05/23/003000

Kotlin の場合は、明示的な修飾子を付与しない内部クラスは、Javaにおける static 修飾子が付与されたネストされたクラスと同等です。
そのため、暗黙的に内側のクラスは、外側のクラスへの参照を持っていません。
逆に、内部クラスが外側のクラスへの参照を持った状態にするには、内部クラスに innrer 修飾子を付与する必要があります。

………🤔
こうやって Java と static の話を出してくれるのは有り難い🤤
理論的にどうとか以前に中身は Java なのよねそういえば🤪
StdlibKT はそもそもただのライブラリでそれ自体のインスタンスには大きな意味を持たないので inner は別に要らないかなこれは🤔

念の為 null 許容で作ったけど最初から main の args の型を良く見ればよかった…🤪
null チェック要らなくなるっぽい🤔

? とか !! が外れて null チェックが消える…🤤

………

これ、 args が String? だったから null 非許容の a に一旦入れるって処理だったんだけど args に戻せるよねこれ?🤔

args に戻して平和に🤤
これ `if(validOpt(args[i])){this.options}else{this.arguments} = args[i]` みたいにして代入する変数を if で選ぶとかできたらいいのになって思った🤔

………

流石に左辺の if は無理ぽだった🤪
これが JSJavaScript なら `this[validOpt(args[i])?"options":"arguments"] = args[i]` なんだけど…🙄


次回は

動作試験のコード組むぽ🤤
準備だけで終わっちゃった…やっぱり言語が違うと大きく勝手が変わる🙄

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