click below
click below
Normal Size Small Size show me how
Scala
CONCEITOS, TIPOS E MÉTODOS GENÉRICOS, TUPLAS E FUNÇÕES COMO OBJETOS
Term | Definition |
---|---|
scala> class Reference[a] { private var contents: a = _ } | Declaração de uma classe de tipo genérica, esse denominado "a". |
scala> val x = new Reference[Int] | Definição da variável x de Tipo Genérica sendo instanciada por por uma nova refência onde o tipo será Inteiro. |
val t = new Tuple3(10, 20, 30) | Declaração de uma tupla de forma explicita. Tupla de Inteiros. (Int, Int, Int) |
object Timer { def oncePerSecond(callback: () => unit) { while (true) { callback(); Thread sleep 1000 } | Exemplo de uma função tratada como objeto. Onde a função Timer, tem como argumento um elemento do tipo Unit, esse que é outra Função. Unit, é o elemento nulo retorno de funções que não tem retorno. |
scala> val hostPort = ("localhost", 80) | Declaração de uma tupla de forma implícita. Como "val" é um tipo genérico, esse pode receber qualquer valor, ou estrutura, como estão sendo passados dois dados de tipagem diferente, "hostport" é uma tupla (string, int); |
scala> val endereco = newTuple2(123,"rua", 8.7) | Declaração de uma tupla de forma explícita. "endereco" é uma tupla (String, Int, Float); |
scala> val things = ("u", 2013, "c", "P","-") | println(things._4) println(things._1) println(things._3) println(things._5) println(things._2) | Exemplo de Impressão desordenada de elementos em uma tupla, saida: "PUC-2013" |
scala> val t = ("Al", 42, 200.0) | scala> t.productIterator.foreach(println+"dado") | Interação foreach em uma tupla, o qual executa a impressão de todos os dados concatenado com a palavra "dado"; |
scala> val t = new Tuple3(1, "Amarildo", 3.5, 'c' ) scala> t.tostring() | Convertendo todos os elementos da Tupla "t" (int, string, float) de 3 elementos, para string, resulta: (string, string, string) |
scala> val t = new Tuple2("minas", "Puc") scala> t.swap() | Inverte a ordem dos elementos de uma tupla, resultando neste caso a saída ("puc", "Minas"); |
abstract class Pilha[A] { def push(x: A): Pilha[A] = new PilhaNaoVazia[A](x, this)} | A Classe Abstrata Pilha é de tipo genérico, definido por "[A]", onde toda chamada local do tipo "A" faz referência a um elemento de seu propio tipo. A generelização nesse caso permite elementos de todos os tipos, em uma pilha declarada dessa forma. |
def isPrefix[A](p: Pilha[A], s: Pilha[A]): Boolean = { p.isEmpty || p.top == s.top && isPrefix[A](p.pop, s.pop) } | Exemplo de método genérico, para verificar se e os elementos da pilha genérica "p" estão contidos na pilha genérica "s" |
object Soma1 { def funcao1(funcaoX: () => Unit) { 1+funcao2() } def funcao2(){ 1+1) } def main(args: Array[String]) { val x = funcao1(funcao2) } } | Exemplo Básico de uma função tratada como objeto. Aqui, o Objeto soma1 tem duas funções onde uma tem retorno Unit se argumentos, e outra recebe como argumento uma função como objeto do tipo unit. No Main, basta chama-las; |
Vector[(String,String)](("Mario Soares","MM"),("Janaina Paiva","SS"),("Johnny Souza","MS")) | Quando é necessário usar serie de tuplas, ou seja uma estrutura de dados de varias tuplas, usa-se Vector, que nesse caso é um vetor de Tuplas, do tipo (String, String) |
val testeLimite = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22) | Por trás das cortinas scala faz com que os parâmetros de funções sejam tratados como tuplas. E como todas as tuplas em Scala, todas as funções são limitadas a apenas 22 membros, mais que 22 membros causará um erro de compilação: |
abstract class Fila[F] { def push(x: F): Fila[F] = new FilaVaiza[F](x, this)} | A Classe Abstrata Fila é de tipo genérico, definido por "F", onde toda chamada local do tipo "F" faz referência a um elemento de seu propio tipo. A generelização nesse caso permite elementos de todos os tipos, em uma fila declarada dessa forma. |
def estacontido[F](f: Fila[F], e: Fila[F]): Boolean = { f.isEmpty || f.top == e.top && estacontido[F](f.pop, e.pop) } | Método genérico, para verificar se algum elemento (Sendo ele de qualquer tipo) da fila genérica "f" estão contidos na fila genérica "e". |
object forca{ def massa(aceleracaoconstante () => Float: massa: Float) { massa*aceleracaoconstante} def aceleracaoconstante(){ ac:float=2.5) } def main(args: Array[String]) { val forca = massa(aceleracaoconstante, 5.51) } } | Função que retorna a força em Newtons exercida por um projétil qualquer acelerado constantemente. Onde a função "aceleracaoconstante" está sendo tratada como ojeto. |
class Reference[x] { private var contents: x = _ def set(value: a) { contents = value } def get: a = contents } | Exemplificação de tipo genérico onde _ representa um valor padrão. Este valor padrão é 0 para os tipos numéricos, false para o tipo booleano, () para o tipo unit e null para todos os tipos de objetos. Uma propriedade de tipo genérico |
object flipView { def visualizaperfil(seleciona: () => unit) { while (true) { seleciona(); Thread sleep 1000 } | Função como objeto. Enquanto a função Seleciona estiver sendo usada, ou seja, enquanto o usuario emitir comandos de seleção, a função thread sleep será executada com 1000 ms de intervalo. Essa passada como argumento. |