見出し画像

【Console Application】基本文法 25【学習記】

制御構造if,switch,tryとか特殊な演算三項演算子,ビット,論理,算術関数とかそういう手合の話🤤

Q.
なんかやけに進んだ?
A.
ちょっと時間あったから一気に🤤

→ enum での別名定義は lazy とやらで遅延生成される…?(挙動要確認
→ Kotlin に switch は無い
 →代わりに when という case に式を書ける感じの分岐処理構造が存在
→ typealias が使えるが狭いスコープ内で使える様な自由度ではないっぽい
→ Kotlin の instanceof は Swift と同じく is

#学習記 #Kotlin
#enum #typealias
#switch #when
#instanceof #is

基準のコードはこちら

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


【 Kotlin 】変数種別判定クラス

そんじゃ今度は Kotlin で作ろうね🤤
まずはファイル作って元コードをペーストするとこから🤪

画像1

多分に洩れず、まっかっか🤪
まずは enum からかな。 Java でできるんだから Kotlin は勿論できる筈🤤

列挙型クラス (Enum Classes)
https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/enum-classes.html

値を対応させるための関数を作らなくて良くなったのかな?
そこは進化だと思う🤤

画像2

内部値の名前と型を指定する必要は有るけど値割付用の関数書かなくて良いのは楽かな🤤
そしてやはり使えない "????" 😞
他の言語でもそうだけど enum ではなく JSJavaScript と同じく連想配列でやれば移植性は高くなるのかなと思うけど switch 書く時に楽したいなら断然 enum よね🤤
というか、これは JS 側が enum 使えなくて弱い、と考えるべきかな🤔
JS は柔軟性が高いので Object連想配列 でそのまま enum の役割もこなせ、 switch の case 式も "===" 前提でほぼなんでも持ってこれるから要らないんかなとも思うのよね🙄
勿論その分、処理速度低下と中身の要事前の検査という損害デメリットが出るわけだけど😞
まぁそれに寄せる為に各言語 Any が有ったり Swift みたいに nil 許容の Optional が実装されたりとかが有るわけで、速度を出しつついかに柔軟な型へ寄せられるかが新しい言語の課題になってるのかな🤔
それを実現するための付随技術にガベージコレクションというのが存在するわけだけど開発者は段々考えなくて良くなってきてて楽になってるなと感じるとこだよね🤤
でも、メモリ管理を放棄して良いって話じゃ、ないのよね。資源リソースは有限😞

画像3

🙄🙄🙄❓❓❓❓❓

エイリアスはこの方法じゃダメっぽ?🤔

画像5

なんか提案見ると lazy に変換とか有る🤔

画像5

一応エラーでは無くなったけど…合ってるのかな?これ?🙄

画像6

釈然としない…😞
後でちゃんと働くのか確認してみないとだめかな…
Java では許されるのに Kotlin だとダメってのが良くわからない🙄最終実行コード同じじゃないの?

画像7

🤔🤔🤔

switchみたいな条件分岐がしたい
https://kotlin-rev-solution.herokuapp.com/site/when/
Kotlinにはswitch構文はありません。
代替としてwhenを使います。

………出たよ、オレオレフォーマット…😞
Swift の try-catch 然り、なんでこう「俺はヨソの言語とは違うんだ!」って要素入れようとするのよ…🙄
糖衣構文syntaxSugarとして switch 実装しとけよって言いたい…😞
こういう、不必要に学習の障壁を高める言語仕様嫌い😞

画像8

………これはこれで悪くないね🤔
ただ、今回みたいな default でその他をもう一回審査する compressTypeString みたいなやつだと工夫が要るか、一々波括弧{...}でブロック作って return 書くか、になるのかな😞
elseif の羅列よりは良いけど switch だって elseif の糖衣構文じゃんみたいな事言われると、まぁ when も自由度高そうなわりに打鍵負荷は高いっていうどっこいどっこいな感じになってるのがなんとも… switch だと一々 break 必要だったしそういうの嫌だったんだろうなって思う🙄

画像9

なんか when は自由度高いなって思った🙄

画像10

画像11

Kotlin は typealias が使えるみたい☺️
var や let を val に書き換えるだけでエラーが余り無いとこ見ると移植互換性については typealias や define に軍配が上がるなって思う🤤
define はグローバルスコープで良くない気がするけど🙄

JavaのinstanceofをKotlinでやる
https://a2hs.dev/2019/04/27/java-instanceof-in-kotlin/

Kotlin で instanceof は Swift 同様 is でやるみたい🤔

kotlinの型と変換
https://qiita.com/nimani/items/040dd28717eabe3ea781

どうやら Java の時みたいに Object でキャストして is Number とやるのは無理っぽい🤤
しかし型が多くないから力技でもいいのかな?って思った🙄
↑の記事を見る限りだと配列も判定できそうだから連想配列だけ探したらいいのかな?🤔
連装配列は Map オブジェクトだから is Map でできそうだけど🤪

画像12

Kotlin でも Any == null は常に false って怒られる🙄
null チェックって無いの…?🤔
まぁ、 Kotlin でもこの判定は無効化で良いか🤤

画像13

単純に is Map ではダメっぽい🙄
提案見ると Kotlin では <*,*> になるみたい🤤

画像14

画像15

🤔もしかして

画像16

早速 when で置き換えてみるの図🤪

画像17

関数を変数に入れられるみたいだから打鍵してみた補完してくれる機能使ったら通る等🤤

[pict compressTypeString]

コーディング的には enum とその関数があると少なくていいなって感じする🤤


次回は

組み込んで走らせようかな🤤
特にエラーになってないのでこのまま組み込んで動くのかも🤔

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