Int
をにマップする無名関数を割り当てたいとします。Int
このように割り当てることができます
val double = (x: Int) => x * 2
またはこのように
val double: Int => Int = x => x * 2
どちらがより慣用的ですか?または、一方が他方よりも好ましい状況はありますか?
Int
をにマップする無名関数を割り当てたいとします。Int
このように割り当てることができます
val double = (x: Int) => x * 2
またはこのように
val double: Int => Int = x => x * 2
どちらがより慣用的ですか?または、一方が他方よりも好ましい状況はありますか?
これはJavaの予約語であり、データ型(つまり、Java)との混同を促す可能性があるため、 2回呼び出します。いずれにせよ、どちらも実際には他よりも慣用的です。他のすべてが等しい場合、最初の形式の方が短く、必要に応じてタイプが自動的に修正されるため、最初のフォームをお勧めします(つまり、タイプを1か所で変更するだけで済みます)。それが重要であるが自明ではないと判断した場合、またはケースがより複雑で、適切な型推論を行うためにその情報が必要である場合は、2番目を優先します。実際、この単純な状況では、ケースを次のように記述します。double
Double
double
x
Float
Int => Int
val twice = (x: Int) => x * 2
val twice: Int => Int = _ * 2
同じ長さになります。(最初のものはもうないので、私はまだ最初のものを好みます。変数を複数回参照する必要がある場合は、同じ形式を維持できます。)
同僚の経歴にもよると思います。
2つ目は私にはもっとハスケルリッシュに見え、1つ目はもう少しジャワっぽく見えます。
また、2番目のものは実際にreturnタイプを指定します。これは、doubleがパブリックAPIの一部である場合に適していますが、最初のものはそれを推測するだけであり、実装が変更されたときに誤って変更される傾向があります。