いつもありがとうございます。
Kotlin の数値リテラルと型変換?についての質問です。
###ソースコード
Kotlin
1val a = 3 // OK. 型推論されInt型の数値みなされる。 2val l:Long = 3 // OK. Long型の3とみなしてくれる。 3L でもよい。 3val i:Int = 3 // OK. 4val s:Short = 3 // OK Short型の3とみなしてくれる。 Short型の数値リテラルがない。 5val b:Byte = 3 // OK. Byte型の3とみなしてくれる。 Byte型の数値リテラルがない。 6val d:Double = 3 // NG. Double型の3.0とはみなしてくれない。 3.0 としなければならない。 7val f:Float = 3.0 // NG. Float型の3.0とはみなしてくれない。 3.0f or 3.0F としなければならない。 8 9val l1:Long = 3l // NG. 10val l2:Long = 3L // OK. 11val f1:Float = 3.0f // OK. 12val f2:Float = 3.0F // OK. 13
###質問
質問1.
Long・Floatの数値リテラル指定方法はあるのに、Short・Byte・Doubleにないのはなぜ?
→Long, Short, Byte, Double, Float 全てに数値リテラル指定があったほうが統一感があると思います。(2L, 2S, 2B, 3.0D, 2.0F のように)
質問2.
Long・Short・Byteはリテラル代入時に自動的に型変換をしてくれるのにDouble・Floatではしてくれないのはなぜ?
→整数値と浮動小数値の違いはわかりますが、変数の型に応じて自動的に型変換するという意味では機械的に 3 を Double の 3.0 とみなしたほうが統一感があるのではないかと思います。
→少なくともFloat型に関してはShort・Byteに合わせて3.0でも可としないと統一感がない気がします。
質問3.
Float は 3.0f
3.0F
と両方の表記が許されるのに、Long は 3l
という表記が許されないのはなぜ?
→小文字の「エル」が数字の「いち」と見分けづらいから?
合理的な理由があってのものだと思うのですが、なんだか統一感が無い気がして質問させていただきました。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/26 07:06 編集
2017/09/26 07:19
2017/09/26 08:01
2017/09/26 08:33
2017/09/26 08:34
2017/09/26 08:49
2017/09/26 09:12
2017/09/28 01:32