Perguntas Avançadas de Entrevista em Scala e Respostas

Antes de ler este post, por favor, revise os meus dois posts anteriores em “Scala Básico” e “Scala Intermediário” Perguntas e Respostas de Entrevista para obter algum conhecimento básico sobre a Linguagem Scala.

Perguntas Avançadas de Entrevista em Scala

Neste post, vamos discutir algumas Perguntas Avançadas de Entrevista em Scala que estão relacionadas aos conceitos Avançados de Scala e também alguns conceitos relacionados a projetos em tempo real. Nota: Como esta lista já se tornou muito extensa, vou entregar outro post com as perguntas e respostas restantes. Por favor, consulte esse post em: “Scala Intermediário e Avançado Perguntas e Respostas de Entrevista” Também vamos discutir Perguntas e Respostas sobre Concorrência e Paralelismo em Scala/Java, que são úteis para Desenvolvedores Scala/Java Sênior ou Experientes.

Perguntas Avançadas de Entrevista em Scala

Brazilian Portuguese
Nesta seção, vamos listar todas as Perguntas de Entrevista Intermediárias sobre Scala, e na próxima seção, vamos discuti-las em detalhes.

  1. Qual é a versão mais recente atual do Scala? Qual é a mudança ou atualização principal no Scala 2.12?
  2. O que é Option em Scala? O que são Some e None? Qual é o padrão de design Option/Some/None em Scala?
  3. O que é Either em Scala? O que são Left e Right em Scala? Explique o padrão de design Either/Left/Right em Scala?
  4. Qual é o equivalente de Scala’s Option em Java SE 8? Qual é o uso de Option em Scala?
  5. Quais são as vantagens da Programação Funcional (FP) ou vantagens das Funções Puras?
  6. Quais são os Frameworks Populares baseados em Scala para desenvolver Serviços Web RESTful ou APIs REST?
  7. Qual é o melhor Framework para gerar documentação de API REST para aplicativos baseados em Scala?
  8. Assim como o Hibernate para aplicativos baseados em Java, quais são os Frameworks ORM Populares disponíveis para uso em aplicativos baseados em Play/Scala?
  9. Qual é a melhor ferramenta para desenvolver aplicativos Play/Scala para persistir dados no banco de dados NoSQL MongoDB?
  10. Clientes populares que estão usando Play e Scala para desenvolver seus aplicativos?
  11. Qual é a melhor linguagem para usar com o framework Play: Scala ou Java?
  12. Como o Scala suporta aplicativos altamente escaláveis e de alto desempenho?
  13. Quais são as Ferramentas de Compilação disponíveis para desenvolver Aplicações baseadas em Play e Scala?
  14. O que é SBT? Qual é a melhor Ferramenta de Compilação para desenvolver Aplicações Play e Scala?
  15. Quais são os frameworks disponíveis para Testes Unitários, Testes Funcionais e/ou BDD para aplicações baseadas em Play e Scala?
  16. Qual é a melhor ferramenta de cobertura de código disponível para aplicações baseadas em Play e Scala?
  17. Qual é a melhor ferramenta de verificação de estilo Scala disponível para aplicações baseadas em Play e Scala?
  18. Quais IDEs oferecem suporte para o desenvolvimento de aplicações baseadas em Play e Scala e como?
  19. Qual é o framework padrão de Testes Unitários e Funcionais para o Play? Qual é a ferramenta de construção padrão para o Play? Qual é o motor de template padrão para o Play? Qual é o servidor web integrado disponível no Play Framework?
  20. Por que Scala é melhor que Java? Quais são as vantagens de Scala sobre Java (Java 8)? Comparando com Java, quais são as principais vantagens ou benefícios de Scala?
  21. O que é uma Função Anônima em Scala? O que é um Literal de Função em Scala? Quais são as vantagens de uma Função Anônima/Literal de Função em Scala?
  22. O que é uma Função de Alta Ordem (HOF)?
  23. Quais são as diferenças entre Case class e Classe Normal?
  24. Quais são as vantagens do conjunto Play/Scala para desenvolver aplicações web?
  25. O que é chamado por nome? Scala e Java suportam chamada por nome? Qual é a diferença entre parâmetros de função chamados por valor e chamados por nome?
  26. Quais são os construtos de OOP de Java não suportados por Scala? Quais são os construtos de OOP de Scala não suportados por Java? Quais são os novos construtos de OOP introduzidos por Scala, mas não suportados por Java?
  27. Quais são os frameworks MVC populares para a linguagem Scala para desenvolver Aplicações Web?
  28. Quais são as principais diferenças entre a estrutura de projetos baseados em Java e em Scala com o Maven?
  29. O que é um Extrator em Scala? Qual é a diferença entre um Construtor e um Extrator em Scala? Qual é o uso de um Extrator em Scala?
  30. Qual é o uso de ‘???’ em Aplicações baseadas em Scala?
  31. Explique a principal diferença entre Lista e Stream na API de Coleções do Scala. Como podemos comprovar essa diferença? Quando devemos escolher Stream?
  32. Qual é a diferença entre :: e #:: em Scala? Qual é a diferença entre ::: e #::: em Scala?
  33. Se eu quiser me tornar um Desenvolvedor Fullstack Scala, qual conjunto de tecnologias devo aprender?

Perguntas e Respostas Avançadas de Scala

Nesta seção, vamos abordar cada pergunta da lista acima e discutir detalhadamente com exemplos adequados (se necessário). Se você deseja entender esses conceitos em profundidade com exemplos, por favor, consulte minhas postagens anteriores na seção de Tutoriais de Scala.

Qual é a versão mais recente atualmente do Scala? Qual é a principal mudança ou atualização na versão 2.12 do Scala?

A versão estável atual do Scala é a 2.11.7. Ela suporta o Java SE 7. A principal mudança ou atualização na versão 2.12 do Scala é que ela suporta apenas o Java SE 8 ou versões posteriores. A versão 2.12 do Scala não é compatível binariamente com a série 2.11.x. Ela ainda está em construções de marcos (Mile Stone Builds) apenas.

O que é Option no Scala? O que são Some e None? Qual é o padrão de design Option/Some/None no Scala?

No Scala, Option é usado para representar valores opcionais, ou seja, que podem existir ou não. Option é uma classe abstrata. Option tem duas subclasses: Some e None. Todas as três (Option, Some e None) são definidas no pacote “scala” como “scala.Option”. Option é uma coleção limitada no Scala, que contém zero ou um elemento. Se Option contém zero elementos, é None. Se Option contém um elemento, é Some. Some é usado para representar um valor existente. None é usado para representar um valor inexistente. Exemplo:-

def get(val index: Int): Option[String]

Vamos assumir que este método é da Lista. Este método tem um tipo de retorno Option[String]. Se a Lista contiver elementos, este método get retorna o elemento “Some[String]” disponível na posição do índice. Caso contrário, retorna “None” (ou seja, nenhum elemento). Some é uma classe de caso e None é um Objeto. Como ambos são classe de caso/objeto, podemos usá-los muito bem em Correspondência de Padrões. A combinação dessas três definições é conhecida como Padrão de Design Option/Some/None em Scala.

O que é Either em Scala? O que são Left e Right em Scala? Explique o Padrão de Design Either/Left/Right em Scala?

No Scala, Either é uma classe abstrata. É usada para representar um valor de dois tipos possíveis. Ela possui dois parâmetros de tipo: Either[A, B]. Tem exatamente dois subtipos: Left e Right. Se Either[A, B] representa uma instância de A, isso significa que é Left. Se representa uma instância de B, significa que é Right. Isso é conhecido como Padrão de Design Either/Left/Right em Scala.

Qual é o equivalente do Option em Scala no Java SE 8? Qual é o uso do Option em Scala?

O Option em Scala é semelhante ao Optional do Java SE 8. O Java SE 8 introduziu uma nova classe utilitária Optional para representar a existência ou não de algum valor. Optional está disponível no pacote java.util. Tanto o Option em Scala quanto o Optional do Java SE 8 são usados para representar valores opcionais. Ambos são usados para evitar verificações de null indesejadas e NullPointerException.

Quais são as vantagens da Programação Funcional (FP) ou vantagens das Funções Puras?

As seguintes são as vantagens da Programação Funcional (FP) ou vantagens das Funções Puras:

  • Mais Modular
  • Mais fácil de entender ou mais fácil de raciocinar
  • Mais fácil de testar
  • Menos propenso a bugs
  • Mais fácil de reutilizar
  • Mais fácil de paralelizar e generalizar

Há muitos Frameworks Baseados em Scala para desenvolver Serviços Web RESTful. Os frameworks mais populares são:

  • Play Framework
    No Play, chamamos URLs de API REST de rotas. Colocamos todas as rotas em um único lugar no framework Play. É um framework web sem estado para desenvolver APIs REST facilmente.- Scalatra Framework
    É um framework web simples e fácil baseado em Scala para desenvolver APIs REST.- Spray Framework
    É muito conciso e construído em cima do framework Akka, sendo melhor para desenvolver APIs REST usando o Modelo de Ator.- Lift Framework
    Permite o roteamento usando o conceito de Pattern Matching.

Qual é o melhor Framework para gerar documentação de API REST para aplicações baseadas em Scala?

O Swagger é a melhor ferramenta para esse propósito. É uma ferramenta simples e de código aberto para gerar documentação de APIs REST com JSON para aplicações baseadas em Scala.

  • Se usarmos o Play com Scala para desenvolver sua API REST, então use o módulo play-swagger para a documentação da API REST.
  • Se usarmos o Spray com Scala para desenvolver sua API REST, então use o módulo spray-swagger para a documentação da API REST.

Assim como JPA, Hibernate e Toplink etc Frameworks ORM para aplicações baseadas em Java, existem muitos frameworks ORM para usar em aplicações baseadas em Play/Scala. Frameworks ORM populares para aplicações baseadas em Play/Scala:

  • Slick
  • Anorm
  • SORM(Scala ORM)
  • Squeryl

Qual é a melhor ferramenta para desenvolver aplicações Play/Scala para persistir dados no banco de dados NoSQL MongoDB?

ReactiveMongo é o melhor driver Scala para desenvolver aplicações Play/Scala para persistir dados no banco de dados NoSQL MongoDB. Ele oferece suporte total a operações de E/S não bloqueantes e assíncronas.

Milhares de clientes estão utilizando Play e Scala em produção. A seguir está a lista dos clientes mais populares que estão utilizando ativamente Play e Scala.

  • LinkedIn
  • The Guardian
  • Ocado
  • LuchidChart
  • GOV.UK

Qual é a melhor linguagem para usar com o framework Play: Scala ou Java?

O Play 2 é completamente escrito em Scala. Se usarmos Java com o framework Play, enfrentaremos muitos problemas, pois Java não oferece suporte completo a recursos de programação funcional. Scala é a melhor opção para usar com o framework Play no desenvolvimento de aplicações altamente escaláveis, com melhor desempenho, concorrência/paralelismo e baixa latência, porque:

  • O Play 2 é completamente escrito em Scala.
  • Ele suporta recursos de FP completos.
  • É mais uma linguagem de expressão do que Java.
  • Ele suporta o modelo de ator Akka muito facilmente.
  • Ele suporta alguns novos recursos de OOP como Traits.
  • Os modelos integrados do Play são desenvolvidos em Scala.

Como o Scala suporta aplicações altamente escaláveis e de alta performance?

Como o Scala suporta Programação Multi-Paradigma (tanto OOP quanto FP) e usa o Modelo de Concorrência de Ator, podemos desenvolver aplicativos altamente escaláveis e de alta performance com muita facilidade.

Quais são as Ferramentas de Construção disponíveis para desenvolver Aplicações baseadas em Play e Scala?

As três seguintes são as Ferramentas de Construção mais populares disponíveis para desenvolver Aplicações baseadas em Play e Scala:

  • SBT
  • Maven
  • Gradle

O que é SBT? Qual é a melhor Ferramenta de Compilação para desenvolver Aplicações Play e Scala?

O SBT significa Scala Build Tool. É uma Ferramenta de Compilação Simples para desenvolver aplicações baseadas em Scala. A maioria das pessoas utiliza a Ferramenta de Compilação SBT para Aplicações Play e Scala. Por exemplo, o plugin Scala do IntelliJ IDEA utiliza por padrão o SBT como ferramenta de compilação para esse fim.

Quais são os Frameworks disponíveis para Testes Unitários, Testes Funcionais e/ou BDD para aplicações baseadas em Play e Scala?

Os seguintes são os Frameworks mais populares disponíveis para Testes Unitários, Testes Funcionais e/ou BDD para aplicações baseadas em Play/Scala:

  • Spec2
  • ScalaTest
  • ScalaCheck
  • Mokito

Qual é a melhor ferramenta de cobertura de código disponível para aplicações baseadas em Play e Scala?

O SCoverage é a ferramenta de cobertura de código para aplicações baseadas em Play e Scala. SCoverage significa ferramenta de cobertura de código Scala. Ele possui três plug-ins separados para dar suporte às seguintes ferramentas de construção:

  • SBT
  • Maven
  • Gradle

Qual é a melhor ferramenta de verificação de estilo Scala disponível para aplicações baseadas em Play e Scala?

Assim como o Checkstyle para aplicações baseadas em Java, o Scalastyle é a melhor ferramenta de verificação de estilo Scala disponível para aplicações baseadas em Play e Scala. O Scalastyle observa nosso código-fonte Scala e indica possíveis problemas com ele. Ele possui três plug-ins separados para dar suporte às seguintes ferramentas de construção:

  • SBT
  • Maven
  • Gradle

Ele possui dois plug-ins separados para dar suporte aos seguintes dois IDEs:

  • IntelliJ IDEA
  • Eclipse IDE

Quais IDEs suportam o desenvolvimento de aplicações baseadas em Play e Scala e como?

As duas IDEs populares a seguir oferecem suporte ao desenvolvimento de aplicações baseadas em Play e Scala:

  • IntelliJ IDEA
  • Eclipse IDE

Elas oferecem suporte usando plugins Scala, como o Eclipse IDE, que possui o Scala IDE for Eclipse para suportar o desenvolvimento de aplicações baseadas em Play e Scala. O IntelliJ IDEA possui um plugin chamado “Scala Plugin for IntelliJ IDEA” para dar suporte a aplicações baseadas em “Scala, SBT, and Play 2 Framework”. – Qual é o Framework padrão de teste unitário e funcional para o Play? Qual é a ferramenta de compilação padrão para o Play? Qual é o mecanismo de template padrão para o Play? Qual é o servidor web integrado disponível no Play Framework?
O Framework padrão de teste unitário e funcional do Play Framework é o Spec2. É muito fácil testar aplicações baseadas em Play/Scala usando o Framework Spec2. O template padrão integrado do Play Framework é o “Twirl”, desenvolvido em Scala. Usando esses templates, podemos desenvolver aplicações baseadas em Play/Scala com facilidade. O servidor web integrado padrão no Play Framework é o Netty Server.

Por que o Scala é melhor que o Java? Quais são as vantagens do Scala sobre o Java (Java 8)? Compare com o Java, quais são as principais vantagens ou benefícios do Scala?

Porque o Scala suporta as seguintes características extras, é melhor que o Java 8:

  • Recursos completos de FP
  • Mais expressividade na linguagem
  • Correspondência de padrões
  • Melhor suporte para o modelo de ator Akka
  • Resolução automática para o Problema do Diamante na Herança com Traits
  • Programação de E/S assíncrona e não bloqueante usando o Framework Akka
  • API de streaming totalmente reativa

O que é uma Função Anônima em Scala? O que é um Literal de Função em Scala? Quais são as vantagens de uma Função Anônima/Literal em Scala?

Função Anônima também é uma Função, mas não possui nenhum nome de função. Também é conhecida como Função Literal. As vantagens de uma Função Anônima/Função Literal em Scala:

  • Podemos atribuir uma Função Literal a uma variável
  • Podemos passar uma Função Literal para outra função/método
  • Podemos retornar uma Função Literal como resultado/valor de retorno de outra função/método.

O que é uma Função de Ordem Superior (HOF)?

Função de Ordem Superior (HOF) também é uma função, mas que realiza uma, duas ou ambas as seguintes coisas:

  • Recebe outras funções como argumentos
  • Retorna funções como seus resultados

Quais são as diferenças entre a Classe Case e a Classe Normal?

A Classe Case também é uma classe, no entanto, quando a comparamos com uma classe normal, ela oferece os seguintes recursos ou benefícios adicionais:

  • Por padrão, os parâmetros do construtor da Classe Case são ‘val’. Não precisamos declarar os parâmetros com ‘val’.
  • Por padrão, os parâmetros do construtor da Classe Case tornam-se campos da classe.
  • Esses métodos são adicionados automaticamente: toString, equals, hashCode, copy, apply e unapply.
  • Ele obtém automaticamente o objeto Companion.
  • Não é necessário usar a palavra-chave ‘new’ para criar uma instância de Case Class.
  • Fácil de usar em Pattern Matching.

Todas essas funcionalidades são adicionadas pelo compilador Scala durante o tempo de compilação. Isso não é possível com uma classe normal.

Quais são as vantagens da pilha Play/Scala para desenvolver aplicações web?

As principais vantagens da pilha Play/Scala para desenvolver aplicações web são as seguintes:

  • **Código Aberto**
    O Play é um framework de software livre de código aberto para desenvolver aplicações web. – **Melhor Produtividade**
    A funcionalidade de recarregamento automático do framework Play melhora a produtividade do desenvolvedor. Não é necessário compilar, implantar e testar as mudanças. Apenas faça as mudanças e atualize a página para ver as alterações. – **Estado Independente e Fácil de Desenvolver APIs REST**
    O Play é baseado em modelo sem estado HTTP para atender a requisições web, sendo assim muito fácil de desenvolver APIs REST ou Serviços Web RESTful. – **Melhor Tratamento de Erros**
    Ao desenvolvermos nossa aplicação web usando o framework Play, ele informa todos os erros no navegador de uma forma muito útil. Ele mostra a mensagem de erro, a localização do arquivo, o número da linha onde o erro ocorreu, destacando o trecho de código para entender o erro de forma muito fácil. – **Alto Desempenho e Melhor Escalabilidade com Reactividade**
    O framework Play é desenvolvido seguindo padrões de design reativos e é construído em cima do servidor Netty para utilizar a funcionalidade de E/S não bloqueante. Devido a essa característica, podemos desenvolver aplicações altamente escaláveis e de alto desempenho muito facilmente. – **Fácil de Estender**
    O Play é um framework muito flexível e suporta o desenvolvimento de plugins de forma muito fácil para estender suas funcionalidades e recursos. – **Alta Concorrência e Melhor Paralelismo**
    Como Scala e Play suportam Programação Funcional, é muito fácil desenvolver aplicações de alta concorrência e melhor paralelismo, pois a PF suporta Imutabilidade, Funções Puras (funções sem efeitos colaterais), Correspondência de Padrões, Modelo de Ator, etc. – **Melhor Reutilização, Fácil de Testar e Mais Modular**
    Como Scala e Play suportam Programação Funcional, podemos desenvolver aplicações mais modulares e reutilizáveis. Também é muito fácil testar aplicações mais modulares.

Quais são os construtos de OOP em Java não suportados pelo Scala? Quais são os construtos de OOP em Scala não suportados pelo Java? Quais são os novos construtos de OOP introduzidos pelo Scala, mas não suportados pelo Java?

Construtos de OOP em Java não suportados pelo Scala:

  • Não há conceito de interface no Scala
  • Não há conceito de Enum no Scala

Construtos de OOP em Scala não suportados pelo Java OU Novos construtos de OOP introduzidos pelo Scala, mas não suportados pelo Java:

  • Traits do Scala
  • Resolução automática do problema do Diamante de Herança.

O que é chamado por nome? Scala e Java suportam chamada por nome? Qual é a diferença entre parâmetros de função chamados por valor e chamados por nome?

Chamado por nome significa avaliar os parâmetros do método/função apenas quando precisamos deles ou quando acessamos. Se não os utilizarmos, então não os avalia. Scala suporta tanto parâmetros de função chamados por valor quanto chamados por nome. No entanto, Java suporta apenas chamada por valor, mas não chamada por nome. Diferença entre chamada por valor e chamada por nome: A principal diferença entre esses dois é descrita abaixo:

  • No chamado por nome, os parâmetros da função são avaliados apenas quando são necessários, não quando a função é chamada.
  • No chamado por valor, os parâmetros da função são avaliados quando a função é chamada.
  • No chamado por valor, os parâmetros são avaliados antes de executar a função e são avaliados apenas uma vez, independentemente de quantas vezes os usamos nessa função.
  • No chamado por nome, os parâmetros são avaliados sempre que acessamos e são avaliados cada vez que os usamos naquela função.
  • Diferenças de Sintaxe em Scala
    Chamada por valor:
def myFunction(a: Int, b: Int) { }

Aqui, tanto a como b são parâmetros de chamada por valor para minhaFunção. Chamada por nome:

def myFunction(a: Int, b: => Int) { }

Aqui, a é um parâmetro de chamada por valor e b é um parâmetro de chamada por nome para minhaFunção.

Os seguintes são os frameworks MVC mais populares disponíveis para a linguagem Scala para desenvolver Aplicações Web:

  • Play Framework
  • Scalatra Framework
  • Spray Framework
  • Lift Framework

Quais são as principais diferenças entre a estrutura de projetos Maven baseados em Java e baseados em Scala?

A maioria dos projetos baseados em Java usa o Maven como sua ferramenta de construção. No entanto, a maioria das pessoas usa o SBT como ferramenta de construção para desenvolver suas aplicações baseadas em Scala, mas algumas equipes também usam o Maven como ferramenta de construção para desenvolver suas aplicações baseadas em Scala. A estrutura de pastas do Maven para projetos baseados em Java e Scala é quase a mesma, apenas com uma mudança no nome da pasta, como mostrado nos diagramas abaixo: nomes das pastas java e scala. Estrutura de Pastas de Projetos Maven Baseados em Java: Estrutura de Pastas de Projetos Maven Baseados em Scala:

O que é um Extractor em Scala? Qual é a diferença entre Construtor e Extractor em Scala? Qual é o uso de um Extractor em Scala?

Brazilian Portuguese
Não apenas em Java e Scala, mas em quase todas as linguagens de programação orientadas a objetos, o Construtor é usado para criar (ou montar) um objeto ou uma instância de uma Classe usando seus parâmetros (ou componentes). O Extrator é bastante oposto ao Construtor. Em Scala, o Extrator é usado para decompor ou desmontar um objeto em seus parâmetros (ou componentes). Em Scala, o método apply é um Construtor. Internamente, o Extrator usa o método unapply para decompor um objeto em suas partes (ou parâmetros). Em Scala, o Extrator é principalmente usado no conceito de Correspondência de Padrões. Discutiremos em breve o conceito de Correspondência de Padrões.

Qual é o uso de ‘???’ em Aplicações baseadas em Scala?

Esses três pontos de interrogação ‘???’ não são um operador, mas um método em Scala. Eles são usados para marcar um método que está ‘Em Progresso’, o que significa que o desenvolvedor deve fornecer a implementação para ele. Este método é definido na classe scala.PreDef, como mostrado abaixo:

def ??? : Nothing = throw new NotImplementedError

Se executarmos esse método sem fornecer a implementação, ele lançará um erro ‘NotImplementedError’, conforme mostrado abaixo:

scala> def add(a:Int, b:Int) : Int = ???
add: (a: Int, b: Int)Int

scala> add(10,20)
scala.NotImplementedError: an implementation is missing

Explique a principal diferença entre List e Stream na API de Coleções do Scala? Como podemos comprovar essa diferença? Quando devemos escolher Stream?

No Scala, tanto List quanto Stream fazem parte da API de Coleções e funcionam de maneira quase semelhante. Ambos são coleções imutáveis. No entanto, há uma diferença principal entre List e Stream na API de Coleções do Scala: os elementos da List são avaliados de forma ávida (Eagerly), enquanto os elementos da Stream são avaliados de forma preguiçosa (Lazily), o que significa que ocorre apenas quando acessamos os elementos.

scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)

Aqui podemos observar que todos os elementos da List são avaliados no momento da criação do objeto List. No entanto, se fizermos a mesma coisa com Stream, não conseguimos ver todos os elementos. Podemos ver apenas o primeiro elemento avaliado, e os elementos restantes são avaliados preguiçosamente, conforme mostrado abaixo:

scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)

Quando desejamos uma coleção preguiçosa que avalie os elementos apenas quando acessados, é melhor usar Stream.

Qual é a diferença entre :: e #:: em Scala? Qual é a diferença entre ::: e #::: em Scala?

Na API de Coleções do Scala,

  • :: e ::: são métodos disponíveis na classe List.
  • #:: e #::: são métodos disponíveis na classe Stream
  • Na classe List, o método :: é usado para anexar um elemento ao início da lista.
scala> var list1 = List(1,2,3,4)
list1: List[Int] = List(1, 2, 3, 4)

scala> list1 = 0 :: list1
list1: List[Int] = List(0, 1, 2, 3, 4)
  • Na classe List, o método ::: é usado para concatenar os elementos de uma lista dada na frente desta lista.
scala> var list1 = List(3,4,5)
list1: List[Int] = List(3, 4, 5)

scala> val list2 = List(1,2) ::: list1
list2: List[Int] = List(1, 2, 0, 1, 2, 3, 4)
  • Na classe Stream, o método #:: é usado para anexar um elemento dado no início da stream. Apenas este elemento recém-adicionado é avaliado e seguido por elementos de stream avaliados preguiçosamente.
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> s1 = 0 #:: s1
s1: scala.collection.immutable.Stream[Int] = Stream(0, ?)
  • Na classe Stream, o método #::: é usado para concatenar uma stream dada no início da stream. Apenas este elemento recém-adicionado é avaliado e seguido por elementos de stream avaliados preguiçosamente.
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> val s2 = Stream(-1,0) #::: s1
s2: scala.collection.immutable.Stream[Int] = Stream(-1, ?)
  • O método :: funciona como um operador cons para a classe List e o método #:: funciona como um operador cons para a classe Stream. Aqui, ‘cons’ significa construir.
  • ::: método funciona como um operador de concatenação para a classe List e #::: método funciona como um operador de concatenação para a classe Stream.

Se eu quiser me tornar um Desenvolvedor Fullstack em Scala, qual conjunto de tecnologias devo aprender?

Se você deseja se tornar um Desenvolvedor Fullstack em Scala, deve aprender o seguinte conjunto de tecnologias:

  • Scala 2.11.7
  • Play 2.4.6 Framework
  • Akka 2.3 Framework
  • Uma ferramenta de construção: SBT/Maven
  • Um framework JS: CoffeeScript/JavaScript
  • Um IDE: IntelliJ IDEA 15/Eclipse IDE 4.x
  • Um framework TDD & BDD: ScalaTest, Spec2, ScalaCheck, Mockito
  • Microservices com Play e Scala
  • SCoverage
  • Scalastyle
  • Padrões de Design de Programação Funcional
  • Aprendizado de Máquina com Scala

NOTE:- Em Scala, o Extrator segue o Padrão de Design do Extrator. Se você deseja aprender isso a fundo, por favor, passe pelo meu Tutorial de Scala (A maioria das postagens segue esse padrão: Scala xxxx A Fundo, onde xxxx é um conceito como Extrator). Isso é tudo sobre “Perguntas e Respostas Avançadas sobre Scala”. Vamos discutir mais algumas Perguntas e Respostas sobre Scala em minhas próximas postagens. Por favor, deixe um comentário se você gostou da minha postagem ou se tiver algum problema/sugestão.

Source:
https://www.digitalocean.com/community/tutorials/scala-advanced-interview-questions