Vamos colocar a mão na massa agora! Como primeiro assunto, iremos aprender como funciona a declaração de variáveis no Scala. Entre no console do Scala e vamos estudar!
Declaração
[escopo] [tipo da acesso] [nome da variável]: [tipo da variável] = [Valor padrão]
Exemplo:
Essa é a forma completa de declaração, porém não precisamos declarar sempre a forma completa, podemos omitir alguns parâmetros. Mas antes disso iremos entender cada parte da declaração completa. ### 1) Escopo Escopo de acesso da sua variável, podendo ser: #### a) public Será uma variável pública, ou seja, será acessível dentro de sua própria classe, instancias dessa classe e subclasses. Esse é o escopo default na declaração de variável no Scala, então podemos omiti-lo.
Pontos a observar:
- Utilizamos extends para herdar uma classe
- O Scala criou automaticamente os métodos get/set para a variável name
- Uma instância de User tem acesso ao get/set gerado pelo Scala
- Uma instância de Employee, que herda de User, também tem acesso ao get/set gerado pelo Scala
b) private
Será uma variável privada, ou seja, somente os métodos da classe em questão terão acesso a ela, nem uma subclasse terá acesso.
Pontos a observar:
- O Scala criou automaticamente os métodos get/set para a variável name somente dentro da classe User
- Uma instância de User NÃO tem acesso ao get/set gerado pelo Scala
- A classe Employee, que herda de User, NÃO tem acesso ao get/set gerado pelo Scala
- Uma instância de Employee, que herda de User, também NÃO tem acesso ao get/set gerado pelo Scala
c) protected
Será uma variável protegida, ou seja, somente poderá ser acessada em sua própria classe ou subclasse. Suas instancias assim como o private não terão acesso a mesma.
Pontos a observar:
- O Scala criou automaticamente os métodos get/set para a variável name dentro da classe User
- Uma instância de User NÃO tem acesso ao get/set gerado pelo Scala
- A classe Employee, que herda de User, tem acesso ao get/set gerado pelo Scala
- Uma instância de Employee, que herda de User, NÃO tem acesso ao get/set gerado pelo Scala
2) Tipo de acesso
O tipo de acesso definimos se nossa variável é mutável ou imutável, ou seja, quando imutável, temos seu comportamento como uma constante.
a) val
Utilizado para deixar a variável imutável. Uma vez o valor definido, não poderá ser mais alterado.
b) var
Utilizado para deixar a variável mutável. Podemos definir e re-definir a qualquer momento o valor da variável.
Qual devemos utilizar?
Devemos tentar utilizar ao máximo o val, assim nos beneficiaremos da programação funcional, que é um dos pontos fortes da linguagem, além de ser extremamente recomendado pela comunidade do Scala.
3) Nome da variável
Nome da variável em questão. Devemos ficar atentos aos nomes das variáveis em nossa aplicação, utilize sempre nomes façam sentido para as quais as variáveis foram criadas. Caso o nome de uma variável seja muito grande, você pode abreviar, mas sempre mantendo a coesão.
4) Tipo da variável
Assim como em outras linguagens, o Scala possui todos os tipos padrões: String, Int, Double, Boolean entre muitos outros. Além do benefício de podermos utilizar variáveis do Java:
Quando o tipo da variável for omitido, o Scala irá atribuir um tipo baseando-se no valor que foi passado.
4) Valor padrão
Por último, podemos informar algum valor padrão para nossa variável. Note que caso a variável seja declarada utilizando o val, esse será seu valor único, pois variáveis declaradas com val não podem ser alteradas.
Declaração múltipla
Podemos definir várias variáveis ao mesmo tempo e informando um valor padrão pra elas também.
Lazy (variável preguiçosa)
Um recurso bastante interessante é o lazy, quando informado na declaração de uma variável, faz com que o valor padrão somente seja executado no momento da primeira chamada a variável. Vamos ver como funciona:
Sem lazy
Repare que no momento que declaramos a variável numbers, automaticamente foi criado um vetor com o retorno do nosso loop for. Agora iremos criar o mesmo exemplo utilizando o lazy.
Com lazy
Agora utilizando lazy, somente foi processado nosso loop for no momento em que chamamos a variável. Isso é bastante útil, pois pode evitar um processamento desnecessário.
Bem, acho que é isso aí! Até o próximo post!