Aqui estão alguns motivos, que podem ser mais ou menos atraentes para você, dependendo de suas próprias preferências:
Não basta descontá-lo por ser "açúcar sintático". Embora você possa dizer que algo é apenas açúcar sintático, é o açúcar que adoça sua vida - como programador e bebedor de café ou chá.
Singletons - todo Scala object
é inerentemente um singleton. Considerando que no mundo Java as pessoas estão implementando singletons de todos os tipos e de maneira mais frequente, acabam cometendo algum erro em sua implementação, não é possível cometer um erro tão simples como o do Scala. Escrevendo object
em vez class
do torna um singleton e está feito.
Acesso a métodos estáticos: Os métodos estáticos em Java podem ser acessados a partir de objetos. Por exemplo, suponha que você tenha uma classe C
com um método estático f
e um objeto c
do tipo C
. Então você deve ligar C.f
, mas o Java permite que você (embora com um aviso) use c.f
, o que, quando você vem do plano de fundo do Scala, não faz muito sentido, porque os objetos não têm um método f
realmente.
Separação clara: em Java, você pode misturar atributos e métodos estáticos e não estáticos em uma classe. Se você trabalha disciplinado, isso não se torna um problema; no entanto, se você (ou outra pessoa) não o faz, você acaba com as partes estáticas e não estáticas intercaladas e é difícil dizer rapidamente. o que é estático e o que não é. No Scala, tudo o que está localizado dentro do objeto complementar claramente não faz parte dos objetos de tempo de execução da classe correspondente, mas está disponível em um contexto estático. Vice-versa, se estiver escrito dentro de uma classe, estará disponível para instâncias dessa classe, mas não de um contexto estático. Isso se torna especialmente oneroso em Java, quando você começa a adicionar blocos inicializadores estáticos e não estáticos à sua classe. Isso pode acabar sendo muito difícil de entender em termos de ordem de execução dinâmica.
Menos código: você não precisa adicionar a palavra estática a todos os atributos ou métodos em um object
, mantendo assim o código mais conciso (na verdade, não é realmente uma vantagem importante).
As desvantagens são muito mais difíceis de encontrar. Pode-se argumentar que as partes estáticas e não estáticas devem pertencer juntas, mas são separadas pelo conceito Scala de objetos complementares. Por exemplo, pode parecer estranho ter um diagrama de classes, mas depois é necessário criar duas coisas no código e dissecar qual atributo vai para onde.