見出し画像

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

ファイルとかデータベースの話🤤
(今回脱線してるけど)

Q.
`public statc void main(String[] args)` が無いって言われてるのに `fun main(args: Array<String>)` ?
A.
前者は Java で後者は Kotlin 。 main は特殊なので後者の Kotlin は前者の Java にコンパイル変換されるお🤤

→ main をクラスで包みたい場合「エントリーポイント」等で調べると出てくる模様
・ Kotlin の static である companion object として定義する
・そのままだと companion グループになってしまうので特殊な main は @JvmStatic というアノテーション装飾語が要る
・ build.gradle の application セクションの mainClass は set() でなくても通るがもしかしたら set 無しの挙動は廃止予定の可能性有り
→ main を Java みたくクラス所属にしようというのはかなり酔狂な手法(コンパニオン句やアノテーションなど不要な追記が多く要るので無駄の多いコーデょング扱いと思われる

#学習記 #Kotlin #アノテーション #エントリーポイント

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

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


main のクラス化

それじゃ、気になってた main のクラス化実験するぽ🤤
Kotlin の記事は殆どのものが Android を前提にしていて、それ以外は学習用にコンソールアプリを作るから fun main() をクラスで囲もうなんていう酔狂な初歩の学習者に有るまじき改修記事が無いんだと思う🤪

開いたら Unresolved 出てるんだけど…🙄ナンデ?

プロジェクトの再ビルドやったら消えた😞メンドクサイ
ダメなのこういうとこだぞ、 IntelliJ !

で、ついでだけどこの build.gradle.kts の application28行目 のとこにある mainClassName って項目😑
これ、 IntelliJ の機能で打ち消し線が出てるけど、多分この名前のクラスであれば通ると思うのよね🤤

つまり、こう🤤
さぁデバグよー👇ぽちっとな

………🙄

いいもん、 jar 作ってターミナルで叩くから!😩

………😞

確か基本文法やってる最中に「 Kotlin は基本全て instance 」というのをどこかで見た気がするのよね🤔
素直に解釈するなら現在のクラスは特にこれと言った言語装飾語が付いてないので dynamic なクラス定義になってて static じゃないと困る main は「いいから static にしろよ」って文句を言っている(ただし Java で)………のかな?🙄
static にすれば解決なんだろうか………?😑

………🙄ヤッパダメカ

………

………

………

調べても殆どが fun main() で書くのが当たり前になっててやはり main をクラスで囲もうっていうのは酔狂な試みなんだろうか…🙄

Kotlinのエントリポイントの話
Kotlinのmainメソッドをクラスメソッドとして書いてみる
https://qiita.com/hisuie08/items/5e6409b23aa15ec51cf7#kotlin%E3%81%AEmain%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A8%E3%81%97%E3%81%A6%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%82%8B

さて、Kotlinをコンパイルすると特殊クラスが作られてJavaバイトコードにしたとき矛盾が発生しない仕組みになっていることはわかりました。
これで枕を高くして寝られる方は帰って大丈夫です。

同じ事思う人、居るねやっぱり🤤
でもこの人は「エントリーポイント」という概念からの話題なので自分が望んでいた「 main をクラスで囲むには?」と筋道がだいぶ違う🙄
(結果的に欲しかった答えがこれなので関係ないけど)

この記事を見る限りだとやはり companion object で囲って static 化が要る様だぬ🤤
'@JvmStatic' というアノテーションCの@pragmaみたいなやつを加える必要が有るみたい🤔
記事だと build.gradle の mainClass は set というメンバ関数を呼ぶように書いてるけれど要るのかな?🤔
もしかして IntelliJ が初期に吐き出したソースなのに打ち消し線が付いてるのは互換性で残ってるだけで set を付けないといけないんだろうか?とりあえず無しでポチってみる🤤

set 無くても行けるじゃん🙄
もしかしたら廃止予定なのかな?🤔
じゃぁとりあえず、 MainKT じゃなくてプロジェクト名クラスにして Java と揃えておこうかな🤤


次回は

Console とかの標準系から移植を始めようかな🤤

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