質問: 3.0F // OK. ``` ### 質問 質問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については https://kotlinlang.org/docs/reference/basic-types.html 公式ドキュメントには、数値についてはByteからIntのような小さい型から大きい型への暗黙的な変換は行われない、と書かれています。 数値リテラルについては大きい型から小さい型への暗黙的な変換が許されているのでしょう。 一度変数に入れた場合は型にしばられるため異なる型には暗黙的に変換されません。 DoubleとFloatはそれぞれリテラルが用意されているので明示的に書きなさいという言語設計なのでしょう。 質問1に関連して数値リテラルを細かく分ける統一性よりも、記述の簡潔さを優先したのだと思います。