Antes de ler este post, por favor, passe pelos 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 Scala
Neste post, vamos discutir algumas Perguntas Avançadas de Entrevista Scala que estão relacionadas a conceitos Avançados de Scala e também alguns conceitos relacionados a projetos em tempo real. Nota: Como esta lista já se tornou muito grande, vou entregar outro post com as perguntas e respostas restantes. Por favor, consulte esse post em: “Perguntas e Respostas de Entrevista Scala Intermediário e Avançado” Também discutiremos Perguntas e Respostas de Entrevista 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 Scala
Nesta seção, vamos listar todas as Perguntas de Entrevista Intermediárias de Scala e na próxima seção vamos discuti-las em detalhes.
- Qual é a versão mais recente atual do Scala? Qual é a principal mudança ou atualização no Scala 2.12?
- O que é Option em Scala? O que são Some e None? Qual é o 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?
- Qual é o equivalente de Scala Option em Java SE 8? Qual é o uso de Option em Scala?
- Quais são as vantagens da Programação Funcional (FP) ou Vantagens de Funções Puras?
- Quais são os Frameworks Baseados em Scala Populares para desenvolver Serviços Web RESTful ou API REST?
- Qual é o melhor Framework para gerar documentação de API REST para aplicativos baseados em Scala?
- 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?
- Qual é a melhor ferramenta para desenvolver aplicativos Play/Scala para persistir dados no armazenamento de dados MongoDB NoSQL?
- Clientes populares que estão usando Play e Scala para desenvolver seus aplicativos?
- Qual é a melhor linguagem para usar com o framework Play: Scala ou Java?
- Como o Scala suporta aplicativos altamente escaláveis e de alta performance?
- Quais são as Ferramentas de Compilação disponíveis para desenvolver Aplicativos baseados em Play e Scala?
- O que é SBT? Qual é a melhor Ferramenta de Compilação para desenvolver Aplicativos Play e Scala?
- Quais são os frameworks disponíveis para teste unitário, teste funcional e/ou BDD para aplicativos baseados em Play e Scala?
- Qual é a melhor ferramenta de cobertura de código disponível para aplicativos baseados em Play e Scala?
- Qual é a melhor ferramenta de verificação de estilo Scala disponível para aplicativos baseados em Play e Scala?
- Quais IDEs suportam o desenvolvimento de aplicativos baseados em Play e Scala e como?
- Qual é o framework padrão de teste unitário e funcional para o Play? Qual é a ferramenta de construção padrão para o Play? Qual é o mecanismo de modelo padrão para o Play? Qual é o servidor web integrado disponível no framework Play?
- Por que Scala é melhor que Java? Quais são as vantagens de Scala sobre Java (Java 8)? Comparado ao Java, quais são as principais vantagens ou benefícios do Scala?
- 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?
- O que é uma função de alta ordem (HOF)?
- Quais são as diferenças entre uma classe Case e uma classe Normal?
- Quais são as vantagens do conjunto de tecnologias Play/Scala para desenvolver aplicações web?
- O que é chamada 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?
- Quais são os construtos de OOP do Java não suportados pelo Scala? Quais são os construtos de OOP do Scala não suportados pelo Java? Quais são os novos construtos de OOP introduzidos pelo Scala, mas não suportados pelo Java?
- Quais são os frameworks MVC populares para a linguagem Scala para desenvolver aplicações web?
- Qual são as principais diferenças entre a estrutura de projetos Maven baseados em Java e em Scala?
- O que é um Extrator em Scala? Qual é a diferença entre Construtor e Extrator em Scala? Qual é o uso de um Extrator em Scala?
- Qual é o uso de ‘???’ em Aplicações baseadas em Scala?
- Explique a principal diferença entre List e Stream na API de Coleções Scala. Como podemos comprovar essa diferença? Quando devemos escolher Stream?
- Qual é a diferença entre :: e #:: em Scala? Qual é a diferença entre ::: e #::: em Scala?
- Se eu quiser me tornar um desenvolvedor Fullstack Scala, quais tecnologias devo aprender?
Perguntas e Respostas Avançadas sobre Scala
Nesta seção, abordaremos cada pergunta da lista acima em detalhes, com exemplos adequados (se necessário). Se você deseja entender esses conceitos a fundo com exemplos, consulte minhas postagens anteriores na seção de Tutoriais Scala.
Qual é a versão mais recente atual do Scala? Qual é a principal mudança ou atualização no Scala 2.12?
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. O Scala 2.12 não é compatível binariamente com a série 2.11.x. Ainda está em Construções de Marcos apenas.
O que é Option em Scala? O que são Some e None? Qual é o padrão de design Option/Some/None em Scala?
No Scala, Option é usado para representar valores opcionais que podem ou não existir. 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 em 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 não existente. Exemplo:-
def get(val index: Int): Option[String]
Vamos assumir que este método pertence à lista. Este método possui um tipo de retorno Option[String]. Se a lista contiver elementos, este método get retorna o elemento “Some[String]” disponível nessa posição de índice. Caso contrário, ele retorna “None” (ou seja, nenhum elemento). Some é uma classe de caso (case class) e None é um Objeto. Como ambos são classes de caso/objetos, podemos utilizá-los muito bem em Pattern Matching. A combinação de todas essas três definições é conhecida como o 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 recebe dois parâmetros de tipo: Either[A,B]. Exatamente possui dois subtipos: Left e Right. Se Either[A,B] representar uma instância A, significa que é Left. Se representar uma instância B, significa que é Right. Isso é conhecido como o 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 indesejadas de nulos 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 Paralelismo e generalizar
Quais são os frameworks populares baseados em Scala para desenvolver Serviços Web RESTful ou APIs REST?
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 só lugar no framework Play. É um framework web sem estado para desenvolver APIs REST facilmente.- Scalatra Framework
É um framework web baseado em Scala muito simples e fácil de usar para desenvolver APIs REST.- Spray Framework
É muito conciso e construído em cima do framework Akka, então é melhor desenvolver APIs REST usando o Modelo de Ator.- Lift Framework
Ele permite o roteamento usando o conceito de Correspondência de Padrões.
Qual é o melhor framework para gerar documentação de API REST para aplicações baseadas em Scala?
O Swagger é a melhor ferramenta para esse fim. É uma ferramenta muito 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 o Hibernate para aplicações baseadas em Java, quais são os frameworks ORM populares disponíveis para uso em aplicações baseadas em Play/Scala?
Assim como o 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 armazenamento de dados NoSQL MongoDB. Ele suporta operações de I/O totalmente não bloqueantes e assíncronas.
Clientes populares que estão usando Play e Scala para desenvolver suas aplicações?
Milhares de clientes estão usando Play e Scala em produção. A lista a seguir são os clientes mais populares que estão usando Play e Scala ativamente.
- 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, precisaremos enfrentar muitos problemas porque o Java não suporta todos os recursos de FP. Scala é a melhor opção para usar com o framework Play para desenvolver aplicações Altamente Escaláveis, Melhor Desempenho com Concorrência/Paralelismo e Baixa latência, porque:
- O Play 2 é completamente escrito em Scala.
- Suporta recursos completos de FP.
- É mais uma linguagem de expressão do que Java.
- Suporta o modelo de ator Akka muito facilmente
- Suporta alguns novos recursos de OOP como Traits.
- Os modelos embutidos do Play são desenvolvidos em Scala
Como o Scala suporta tanto aplicações altamente escaláveis quanto altamente performáticas?
Como o Scala suporta a Programação Multi-Paradigma (tanto OOP quanto FP) e utiliza o Modelo de Concorrência de Atores, podemos desenvolver aplicações altamente escaláveis e de alto desempenho com muita facilidade.
Quais são as Ferramentas de Compilação disponíveis para desenvolver Aplicações baseadas em Play e Scala?
As três seguintes são as ferramentas de compilaçã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 construção para desenvolver aplicações Play e Scala?
O SBT significa Scala Build Tool. É uma ferramenta de construção simples para desenvolver aplicações baseadas em Scala. A maioria das pessoas utiliza a ferramenta de construção SBT para aplicações Play e Scala. Por exemplo, o plugin Scala do IntelliJ IDEA usa por padrão o SBT como ferramenta de construçã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?
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. Possui três plug-ins separados para suportar as 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?
Como o Checkstyle para Aplicações Baseadas em Java, 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 problemas potenciais com ele. Possui três plug-ins separados para suportar as seguintes ferramentas de construção:
- SBT
- Maven
- Gradle
Possui dois plug-ins separados para suportar os seguintes dois IDEs:
- IntelliJ IDEA
- Eclipse IDE
Quais IDEs suportam o desenvolvimento de aplicações Play e Scala, e como?
As duas IDEs populares a seguir oferecem suporte para o desenvolvimento de aplicações Play e Scala:
- IntelliJ IDEA
- Eclipse IDE
Elas oferecem suporte por meio de plugins Scala, como o Eclipse IDE, que possui um Scala IDE for Eclipse para dar suporte ao desenvolvimento de aplicações Play e Scala. IntelliJ IDEA possui um plugin chamado “Scala Plugin for IntelliJ IDEA” para oferecer suporte a aplicações baseadas em “Scala, SBT e Play 2 Framework”.- Qual é o Framework de Testes Unitários e Funcionais padrão para o Play? Qual é a ferramenta de compilação padrão para o Play? Qual é o mecanismo de modelo padrão para o Play? Qual é o servidor web integrado disponível no Play Framework?
O Framework de Testes Unitários e Funcionais padrão do Play Framework é o Spec2. É muito fácil testar aplicações baseadas em Play/Scala usando o Framework Spec2. O modelo padrão integrado ao Play Framework é o “Twirl”, desenvolvido em Scala. Ao utilizar esses modelos, podemos desenvolver aplicações Play/Scala com facilidade. O servidor web integrado padrão no Play Framework é o Netty Server.
Por que Scala é melhor que Java? Quais são as vantagens do Scala sobre o Java (Java 8)? Comparado ao Java, quais são as principais vantagens ou benefícios do Scala?
Porque o Scala suporta os seguintes recursos extras, ele é melhor que o Java 8:
- Recursos completos de FP
- Expressividade maior na linguagem
- Correspondência de padrões
- Melhor suporte para o modelo de ator Akka
- Resolução automática para o Problema do Diamante de Herança com Traits
- Programação de IO 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 de Função 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 outro resultado/valor de retorno de 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 das seguintes coisas:
- Receber outras funções como argumentos
- Retornar funções como seus resultados
Quais são as diferenças entre Classe Case e 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 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 correspondência de padrões.
Todas essas funcionalidades são adicionadas pelo compilador Scala em tempo de compilação. Não é possível com uma classe normal.
Quais são as vantagens da pilha Play/Scala para desenvolver aplicações web?
As seguintes são as principais vantagens da pilha Play/Scala para desenvolver aplicações web:
- O Play é uma estrutura de software livre de código aberto para desenvolver aplicações web, proporcionando uma melhor produtividade.
A funcionalidade de recarregamento automático do framework Play melhora a produtividade do desenvolvedor. Não há necessidade de compilar, implantar e testar nossas alterações. Basta fazer nossas alterações e atualizar a página para ver as mudanças.
O Play é um modelo stateless baseado em HTTP para atender solicitações da web, tornando muito fácil desenvolver APIs REST ou serviços da web RESTful.
Se desenvolvermos nossa aplicação web usando o framework Play, ele informará todos os erros no navegador em um formato 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 facilmente.
O framework Play é desenvolvido seguindo padrões de design reativo 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 aplicativos altamente escaláveis e de alto desempenho com muita facilidade.
O Play é uma estrutura muito flexível e suporta o desenvolvimento de plug-ins, facilitando muito a extensão de suas funcionalidades e recursos.
Como Scala e Play suportam a Programação Funcional, é muito fácil desenvolver aplicativos altamente concorrentes e com melhor paralelismo, pois a PF suporta Imutabilidade, Funções Puras (Funções sem efeitos colaterais), Correspondência de Padrões, Modelo de Ator, etc.
Como Scala e Play suportam a Programação Funcional, podemos desenvolver aplicativos mais modulares e reutilizáveis. Também é muito fácil testar aplicativos mais modulares.
Quais são os construtos de OOP do Java não suportados pelo Scala? Quais são os construtos de OOP do 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 do 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 do Scala não suportados pelo Java ou Os novos construtos de OOP introduzidos pelo Scala, mas não suportados pelo Java:
- Traits do Scala
- Resolução automática do problema do diamante da 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 os 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, mas 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 os acessamos e são avaliados cada vez que os usamos nessa 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 Call-by-value para myFunction. Call-by-name:
def myFunction(a: Int, b: => Int) { }
Aqui, a é um parâmetro Call-by-value e b é um parâmetro Call-by-name para myFunction.
Quais são os frameworks MVC populares para a linguagem Scala para desenvolvimento de Aplicações Web?
Os seguintes são os frameworks MVC mais populares disponíveis para a linguagem Scala para desenvolvimento de Aplicações Web:
- Play Framework
- Scalatra Framework
- Spray Framework
- Lift Framework
Quais são as principais diferenças entre a estrutura de um projeto Maven baseado em Java e um baseado 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 uma mudança no nome da pasta, conforme mostrado nos diagramas abaixo: nomes das pastas java e scala. Estrutura de Pasta de Projeto Maven Baseado em Java: Estrutura de Pasta de Projeto Maven Baseado em Scala:
O que é um Extrator em Scala? Qual é a diferença entre Construtor e Extrator em Scala? Qual é o uso de um Extrator em Scala?
Não apenas em Java e Scala, mas em quase todas as linguagens OOP, o Construtor é usado para criar (ou montar) um objeto ou uma instância de uma Classe usando seus parâmetros (ou componentes). Extractor é o oposto do Construtor. Em Scala, o Extractor é usado para decompor ou desmontar um objeto em seus parâmetros (ou componentes). Em Scala, o método apply é um Construtor. Internamente, o Extractor usa o método unapply para decompor um objeto em suas partes (ou parâmetros). Em Scala, o Extractor é principalmente usado no conceito de Pattern Matching. Vamos discutir o conceito de Pattern Matching em breve.
Qual é a utilidade de ‘???’ em Aplicações baseadas em Scala?
Esses três pontos de interrogação ‘???’ não são um operador, nem 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 esse método. Esse método é definido na classe scala.PreDef, como mostrado abaixo:
def ??? : Nothing = throw new NotImplementedError
Se executarmos esse método sem fornecer uma implementação, ele lançará um erro ‘NotImplementedError’, como 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 provar essa diferença? Quando devemos escolher Stream?
No Scala, tanto List quanto Stream fazem parte da API de Coleções e funcionam de forma 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: List avalia os elementos com avidez (eagerly) e Stream avalia os elementos de forma preguiçosa (lazy), ou seja, quando os acessamos.
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 em que o objeto List é criado. No entanto, se fizermos a mesma coisa com um Stream, não poderemos ver todos os elementos. Podemos ver apenas o primeiro elemento avaliado e os demais elementos são avaliados preguiçosamente, como mostrado abaixo:
scala> var s1 = Stream(1,2,3,4)
s1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
Quando queremos uma coleção preguiçosa que avalia os elementos apenas quando os acessamos, é melhor usar Stream.
Qual é a diferença entre :: e #:: em Scala? Qual é a diferença entre ::: e #::: em Scala?
No Scala Collection API,
- :: 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 no 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.
- ::: o método funciona como um operador de concatenação para a classe List e o método #::: funciona como um operador de concatenação para a classe Stream.
Se eu quiser me tornar um Desenvolvedor Scala Fullstack, qual pilha de tecnologia devo aprender?
Se você quer se tornar um Desenvolvedor Scala Fullstack, você deve aprender a seguinte pilha de tecnologia:
- Scala 2.11.7
- Framework Play 2.4.6
- Framework Akka 2.3
- Uma Ferramenta de Construção: SBT/Maven
- Um Framework JS: CoffeeScript/JavaScript
- Uma IDE: IntelliJ IDEA 15/ Eclipse IDE 4.x
- Um Framework TDD & BDD: ScalaTest, Spec2, ScalaCheck, Mockito
- Micro Serviços com Play e Scala
- SCoverage
- Scalastyle
- Padrões de Design de Programação Funcional
- Aprendizado de Máquina com Scala
NOTA: – Em Scala, Extractor segue o Padrão de Design Extractor. Se você quiser aprender em profundidade, por favor, passe pelo meu Tutorial Scala (A maioria dos posts segue este padrão: Scala xxxx In Depth onde xxxx é um conceito como Extractor). Isso é tudo sobre “Perguntas e Respostas Avançadas de Scala”. Vamos discutir algumas perguntas e respostas adicionais de Scala em meus próximos posts. Por favor, deixe um comentário se você gostou do meu post ou tem algum problema/sugestão.
Source:
https://www.digitalocean.com/community/tutorials/scala-advanced-interview-questions