Scala - sintaxe básica
Se você tiver um bom conhecimento de Java, será muito fácil aprender Scala. A maior diferença sintática entre Scala e Java é que o ';' o caractere de fim de linha é opcional.
Quando consideramos um programa Scala, ele pode ser definido como uma coleção de objetos que se comunicam por meio da invocação dos métodos uns dos outros. Vamos agora dar uma olhada rápida no que significam classes, objetos, métodos e variáveis de instância.
Object- Os objetos têm estados e comportamentos. Um objeto é uma instância de uma classe. Exemplo - Um cão tem estados - cor, nome, raça e também comportamentos - abanar, latir e comer.
Class - Uma classe pode ser definida como um template / blueprint que descreve os comportamentos / estados relacionados à classe.
Methods- Um método é basicamente um comportamento. Uma classe pode conter muitos métodos. É nos métodos onde as lógicas são escritas, os dados são manipulados e todas as ações são executadas.
Fields- Cada objeto tem seu conjunto único de variáveis de instância, que são chamadas de campos. O estado de um objeto é criado pelos valores atribuídos a esses campos.
Closure - A closure é uma função, cujo valor de retorno depende do valor de uma ou mais variáveis declaradas fora desta função.
Traits- Uma característica encapsula definições de método e campo, que podem ser reutilizadas misturando-as em classes. Traits são usados para definir tipos de objetos especificando a assinatura dos métodos suportados.
Primeiro Programa Scala
Podemos executar um programa Scala em dois modos: um é interactive mode e outro é script mode.
Modo Interativo
Abra o prompt de comando e use o seguinte comando para abrir o Scala.
\>scala
Se Scala estiver instalado em seu sistema, a seguinte saída será exibida -
Welcome to Scala version 2.9.0.1
Type in expressions to have them evaluated.
Type :help for more information.
Digite o seguinte texto à direita do prompt do Scala e pressione a tecla Enter -
scala> println("Hello, Scala!");
Isso produzirá o seguinte resultado -
Hello, Scala!
Modo Script
Use as instruções a seguir para escrever um programa Scala no modo de script. Abra o bloco de notas e adicione o seguinte código a ele.
Exemplo
object HelloWorld {
/* This is my first java program.
* This will print 'Hello World' as the output
*/
def main(args: Array[String]) {
println("Hello, world!") // prints Hello World
}
}
Salve o arquivo como - HelloWorld.scala.
Abra a janela do prompt de comando e vá para o diretório onde o arquivo do programa foi salvo. O 'scalac'comando é usado para compilar o programa Scala e irá gerar alguns arquivos de classe no diretório atual. Um deles será chamadoHelloWorld.class. Este é um bytecode que será executado na Java Virtual Machine (JVM) usando 'scala'comando.
Use o seguinte comando para compilar e executar seu programa Scala.
\> scalac HelloWorld.scala
\> scala HelloWorld
Resultado
Hello, World!
Sintaxe Básica
A seguir estão as sintaxes básicas e convenções de codificação na programação Scala.
Case Sensitivity - Scala diferencia maiúsculas de minúsculas, o que significa identificador Hello e hello teria um significado diferente em Scala.
Class Names- Para todos os nomes de turmas, a primeira letra deve estar em maiúsculas. Se várias palavras forem usadas para formar o nome da classe, a primeira letra de cada palavra interna deve estar em maiúsculas.
Example - classe MyFirstScalaClass.
Method Names- Todos os nomes de métodos devem começar com uma letra minúscula. Se várias palavras forem usadas para formar o nome do método, a primeira letra de cada palavra interna deve estar em maiúsculas.
Example - def myMethodName ()
Program File Name- O nome do arquivo do programa deve corresponder exatamente ao nome do objeto. Ao salvar o arquivo, você deve salvá-lo usando o nome do objeto (Lembre-se de que Scala diferencia maiúsculas de minúsculas) e acrescente '.scala'ao final do nome. (Se o nome do arquivo e o nome do objeto não corresponderem, seu programa não será compilado).
Example- Suponha que 'HelloWorld' seja o nome do objeto. Em seguida, o arquivo deve ser salvo como 'HelloWorld.scala'.
def main(args: Array[String]) - O processamento do programa Scala começa a partir do método main (), que é uma parte obrigatória de todo Programa Scala.
Identificadores Scala
Todos os componentes do Scala requerem nomes. Os nomes usados para objetos, classes, variáveis e métodos são chamados de identificadores. Uma palavra-chave não pode ser usada como identificador e os identificadores diferenciam maiúsculas de minúsculas. Scala oferece suporte a quatro tipos de identificadores.
Identificadores Alfanuméricos
Um identificador alfanumérico começa com uma letra ou sublinhado, que pode ser seguido por outras letras, dígitos ou sublinhados. O caractere '$' é uma palavra-chave reservada no Scala e não deve ser usado em identificadores.
A seguir estão legal alphanumeric identifiers -
age, salary, _value, __1_value
A seguir estão illegal identifiers -
$salary, 123abc, -salary
Identificadores de operador
Um identificador de operador consiste em um ou mais caracteres de operador. Os caracteres do operador são caracteres ASCII imprimíveis, como +,:,?, ~ Ou #.
A seguir estão os identificadores legais de operador -
+ ++ ::: <?> :>
O compilador Scala internamente "mutilará" identificadores de operador para transformá-los em identificadores Java legais com $ caracteres incorporados. Por exemplo, o identificador: -> seria representado internamente como $ dois pontos $ menos $ maior.
Identificadores mistos
Um identificador misto consiste em um identificador alfanumérico, que é seguido por um sublinhado e um identificador de operador.
A seguir estão os identificadores mistos legais -
unary_+, myvar_=
Aqui, unário_ + usado como um nome de método define um operador unário + e myvar_ = usado como nome de método define um operador de atribuição (sobrecarga de operador).
Identificadores literais
Um identificador literal é uma string arbitrária encerrada em marcas de retorno (`...`).
A seguir estão os identificadores literais legais -
`x` `<clinit>` `yield`
Palavras-chave Scala
A lista a seguir mostra as palavras reservadas em Scala. Essas palavras reservadas não podem ser usadas como constantes ou variáveis ou quaisquer outros nomes de identificador.
abstrato | caso | pegar | classe |
def | Faz | outro | estende |
falso | final | finalmente | para |
forSome | E se | implícito | importar |
preguiçoso | partida | Novo | Nulo |
objeto | sobrepor | pacote | privado |
protegido | Retorna | selado | super |
esta | lançar | traço | Experimentar |
verdadeiro | tipo | val | Var |
enquanto | com | produção | |
- | : | = | => |
<- | <: | <% | >: |
# | @ |
Comentários no Scala
Scala oferece suporte a comentários de uma e de várias linhas muito semelhantes ao Java. Os comentários de várias linhas podem ser aninhados, mas devem ser aninhados corretamente. Todos os caracteres disponíveis em qualquer comentário são ignorados pelo compilador Scala.
object HelloWorld {
/* This is my first java program.
* This will print 'Hello World' as the output
* This is an example of multi-line comments.
*/
def main(args: Array[String]) {
// Prints Hello World
// This is also an example of single line comment.
println("Hello, world!")
}
}
Linhas em branco e espaços em branco
Uma linha contendo apenas espaços em branco, possivelmente com um comentário, é conhecida como linha em branco e o Scala a ignora totalmente. Os tokens podem ser separados por caracteres de espaço em branco e / ou comentários.
Caracteres de Newline
Scala é uma linguagem orientada por linha em que as instruções podem ser encerradas por ponto-e-vírgula (;) ou novas linhas. Um ponto-e-vírgula no final de uma instrução geralmente é opcional. Você pode digitar um se quiser, mas não precisa se a instrução aparecer sozinha em uma única linha. Por outro lado, um ponto-e-vírgula é necessário se você escrever várias instruções em uma única linha. A sintaxe abaixo é o uso de várias instruções.
val s = "hello"; println(s)
Pacotes Scala
Um pacote é um módulo de código nomeado. Por exemplo, o pacote do utilitário Lift é net.liftweb.util. A declaração do pacote é a primeira linha sem comentários no arquivo de origem da seguinte forma -
package com.liftcode.stuff
Os pacotes Scala podem ser importados para que possam ser referenciados no escopo de compilação atual. A instrução a seguir importa o conteúdo do pacote scala.xml -
import scala.xml._
Você pode importar uma única classe e objeto, por exemplo, HashMap do pacote scala.collection.mutable -
import scala.collection.mutable.HashMap
Você pode importar mais de uma classe ou objeto de um único pacote, por exemplo, TreeMap e TreeSet do pacote scala.collection.immutable -
import scala.collection.immutable.{TreeMap, TreeSet}
Aplicar Dinâmica
Um traço de marcador que permite invocações dinâmicas. As instâncias x desta característica permitem invocações de método x.meth (args) para nomes de métodos arbitrários meth e args de listas de argumentos, bem como acessos a campos x.field para campos de nomes de campos arbitrários. Este recurso é apresentado no Scala-2.10.
Se uma chamada não for nativamente suportada por x (ou seja, se a verificação de tipo falhar), ela será reescrita de acordo com as seguintes regras -
foo.method("blah") ~~> foo.applyDynamic("method")("blah")
foo.method(x = "blah") ~~> foo.applyDynamicNamed("method")(("x", "blah"))
foo.method(x = 1, 2) ~~> foo.applyDynamicNamed("method")(("x", 1), ("", 2))
foo.field ~~> foo.selectDynamic("field")
foo.varia = 10 ~~> foo.updateDynamic("varia")(10)
foo.arr(10) = 13 ~~> foo.selectDynamic("arr").update(10, 13)
foo.arr(10) ~~> foo.applyDynamic("arr")(10)