Я читаю Scala, и я задаюсь вопросом...
Почему
val capacity : Int
вместо
val Int capacity.
Любая причина, почему этот выбор был сделан. В противном случае это не кажется мне как хороший выбор отодвинуть от Java способ объявить это. Сделал бы переход от Java до Scala легче (не очень, но немного)
Потому что большую часть времени вы можете не использовать часть Int. Scala имеет гораздо более аккуратную систему вывода типов, чем Java.
x: T - стандартное обозначение типов в логике и многих языках программирования. C и его потомки, в том числе Java, отклоняются от этого. Но нотация типа C действительно ужасна (попробуйте записать тип для какой-нибудь умеренно сложной функции высшего порядка, такой как map).
Кроме того, с этой нотацией легко опустить тип (как уже писал Wysawyg) или добавить тип внутри выражения.
Вот пример утверждения Wysawyg:
val capacity = 2
Но обычно вы не можете сделать это только с val
.
trait Foo {
def capacity = 2 // Allow child classes to override and decide the value later
}
// Force instances of Bar to set the value
class Bar( override val capacity : Int ) extends Foo
// Have Bat determine it on the fly
trait Bat extends Foo {
def onlyAThird : Int
override def capacity = onlyAThird * 3
}
(Я пытался вставить это как комментарий, но, увы, без форматирования.)
В Программирование на Scala говорится, что техническая причина этого синтаксиса состоит в том, что он упрощает вывод типов.