Perguntas e Respostas de Entrevista em Scala

Bem-vindo às perguntas e respostas da entrevista Scala. Hoje em dia, a maioria das empresas de Finanças/Bancos, Governo, Telecomunicações, Redes Sociais, etc., estão utilizando Scala, Play e Akka Framework para desenvolver seus projetos, pois esses frameworks suportam tanto as características de Programação Orientada a Objetos (OOPs) quanto as de Programação Funcional (FP), proporcionando diversas vantagens.

Perguntas de Entrevista Scala

Vou compartilhar meu conhecimento de entrevistas e minha experiência em desenvolvimento Ecosistema Scala ou Scala Fullstack (Scala/Play/Akka) com você através de algumas postagens. Pretendo fazer isso em 3 postagens separadas. Algumas perguntas consistem em apenas uma pergunta, enquanto outras têm subperguntas. No total, discutirei cerca de 200 perguntas. Eu aposto que se você estiver familiarizado com todas essas perguntas, certamente terá sucesso em todas as entrevistas para desenvolvedor Scala. No entanto, se você quiser continuar como desenvolvedor Fullstack Scala, é importante que aprenda a fundo todas essas tecnologias Fullstack Scala.

Introdução

I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:

  1. Perguntas e Respostas da Entrevista Scala:

    Vamos discutir algumas perguntas básicas de entrevista Scala aqui, que são úteis para recém-formados ou desenvolvedores Java que desejam migrar para o desenvolvimento Scala ou que possuem 1 ano ou mais de experiência como desenvolvedor Scala.

    Perguntas e Respostas Intermediárias da Entrevista Scala:-
    Vamos discutir algumas perguntas de entrevista, que são úteis para desenvolvedores com 2 anos ou mais de experiência como desenvolvedor Scala/Java.

    Perguntas e Respostas Avançadas da Entrevista Scala:-
    Vamos discutir algumas perguntas de entrevista, que são úteis para desenvolvedores Scala/Java sênior ou experientes.

    Perguntas e Respostas da Entrevista de Concorrência e Paralelismo Scala/Java:-
    Vamos discutir perguntas e respostas da entrevista de Concorrência e Paralelismo Scala/Java, que são úteis para desenvolvedores Scala/Java sênior ou experientes.

Vamos também discutir algumas diferenças entre os construtos Scala e Java para que os usuários (que estão migrando do Java para o Scala) possam se beneficiar dessas postagens. Neste post, vamos discutir algumas perguntas básicas de entrevista Scala. Leia meus próximos posts para o restante das duas seções.

Perguntas Básicas de Entrevista Scala

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

  1. O que é Scala? É uma Linguagem ou Plataforma? Ela suporta OOP ou FP? Quem é o pai do Scala?
  2. Scala é uma linguagem de tipagem estática? O que é uma linguagem de tipagem estática e o que é uma linguagem de tipagem dinâmica? Qual é a diferença entre linguagens de tipagem estática e dinâmica?
  3. Scala é uma linguagem puramente orientada a objetos? Java é uma linguagem puramente orientada a objetos?
  4. Scala suporta todos os conceitos de Programação Funcional? Java 8 suporta todos os conceitos de Programação Funcional?
  5. Quais são as principais vantagens da linguagem Scala? Existem desvantagens na linguagem Scala?
  6. Qual é a principal desvantagem da linguagem Scala?
  7. Qual é o lema principal da linguagem Scala?
  8. Quais são as linguagens JVM populares disponíveis agora?
  9. Assim como a classe java.lang.Object do Java, qual é a superclasse de todas as classes em Scala?
  10. Qual é o modificador de acesso padrão em Scala? Scala tem a palavra-chave “public”?
  11. O que é “Inferência de Tipo” em Scala?
  12. Diferença entre Int de Scala e java.lang.Integer do Java? Qual é a relação entre Int e RichInt em Scala?
  13. O que é Nothing em Scala? O que é Nil em Scala? Qual é a relação entre Nothing e Nil em Scala?
  14. O que é Null em Scala? O que é null em Scala? Qual é a diferença entre Null e null em Scala?
  15. O que é Unit em Scala? Qual é a diferença entre void em Java e Unit em Scala?
  16. Qual é a diferença entre `val` e `var` em Scala?
  17. O que é REPL em Scala? Qual é o uso do REPL do Scala? Como acessar o REPL do Scala a partir do Prompt de Comando?
  18. Quais são as características do Scala?
  19. Como implementamos loops de forma funcional? Qual é a diferença entre loops no estilo OOP e FP?
  20. O que é “Application” em Scala ou o que é Scala Application? O que é “App” em Scala? Qual é o uso do App do Scala?
  21. O Scala suporta sobrecarga de operadores? O Java suporta sobrecarga de operadores?
  22. O que é uma Expressão? O que é um Statement? Qual é a diferença entre Expressão e Statement?
  23. Qual é a diferença entre “If…Else” em Java e “If…Else” em Scala?
  24. O Scala é uma linguagem baseada em expressões ou em statements? O Java é uma linguagem baseada em expressões ou em statements?
  25. Diga-me algumas características que são suportadas por Java, mas não por Scala e vice-versa?
  26. Qual é a diferença entre Função e Método em Scala?
  27. Quantos arquivos de classe públicos são possíveis de definir em um arquivo de origem Scala?
  28. Assim como em Java, quais são os imports padrão na Linguagem Scala?
  29. Quantos operadores existem em Scala e por quê?
  30. Mencione algumas palavras-chave que são usadas por Java e não são necessárias em Scala? Por que Scala não as requer?
  31. O que é PreDef em Scala?

Por favor, consulte minha postagem anterior para saber mais sobre Programação Funcional (Clique neste link para abrir minha postagem anterior).

Perguntas e Respostas de Entrevista em 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.

O que é Scala? É uma Linguagem ou Plataforma? Ela suporta OOP ou FP? Quem é o pai do Scala?

Scala significa SCAlable LAnguage. Martin Odersky é o pai do Scala. Scala é uma Linguagem de Programação Multi-Paradigma, que suporta tanto conceitos de Programação Orientada a Objetos quanto de Programação Funcional. Foi projetada e desenvolvida por Martin Odersky. Scala é uma Linguagem de Programação JVM (Java Virtual Machine) que é segura para tipos de objetos e funcional. Scala é uma Linguagem de Programação Híbrida Funcional (Orientada a Objetos e Funcional) para a JVM. Scala possui um Sistema de Tipos Forte e Estático. Em Scala, todos os tipos são verificados em tempo de compilação.

O Scala é uma linguagem estaticamente tipada? O que é uma linguagem estaticamente tipada e o que é uma linguagem dinamicamente tipada? Qual é a diferença entre linguagens estaticamente tipadas e dinamicamente tipadas?

Sim, Scala é uma Linguagem Estaticamente Tipada. Linguagem Estaticamente Tipada significa que a verificação de tipo é feita em tempo de compilação pelo compilador, não em tempo de execução. A principal vantagem desses tipos de linguagens é: Como desenvolvedores, devemos nos preocupar em escrever código correto para evitar todos os erros de compilação. Como o compilador verifica muitos dos erros durante a compilação, não enfrentamos muitos problemas ou bugs durante a execução. Exemplos: Java, Scala, C, C++, Haskell etc. Linguagem Dinamicamente Tipada significa que a verificação de tipo é feita em tempo de execução, não em tempo de compilação pelo compilador. Como um compilador não verifica nenhuma verificação de tipo em tempo de compilação, podemos esperar mais problemas ou bugs em tempo de execução. Exemplo: Groovy, JavaScript, Ruby, Python, Smalltalk etc.

O Scala é uma Linguagem de Programação Orientada a Objetos Pura? O Java é uma Linguagem de Programação Orientada a Objetos Pura?

Linguagem de Programação Orientada a Objetos Pura significa que tudo deve ser um Objeto. Java não é uma Linguagem de Programação Orientada a Objetos Pura porque suporta os seguintes dois conceitos Não-OOP:

  • O Java suporta tipos de dados primitivos. Eles não são objetos.
  • O Java suporta membros estáticos. Eles não estão relacionados a objetos.

Sim, Scala é uma Linguagem de Programação Orientada a Objetos Pura porque em Scala, tudo é um Objeto e tudo é um valor. Funções são valores e valores são Objetos. Scala não tem tipos de dados primitivos e também não possui membros estáticos.

Scala suporta todos os conceitos de Programação Funcional? O Java 8 suporta todos os conceitos de Programação Funcional?

Sim, Scala suporta todos os conceitos de Programação Funcional (FP). O Java 8 introduziu algumas construções de Programação Funcional, mas NÃO suporta todos os conceitos. Por exemplo, o Java 8 não suporta Correspondência de Padrões, Currificação de Funções, Implicits, etc.

Quais são as principais vantagens da linguagem Scala? Existem desvantagens na linguagem Scala?

Se usarmos a linguagem Scala para desenvolver nossas aplicações, podemos obter os seguintes benefícios ou vantagens e desvantagens: Vantagens da Linguagem Scala:-

  • Código Simples e Conciso
  • Código Muito Expressivo
  • Código Mais Legível
  • Linguagem 100% Segura em Termos de Tipos
  • Imutabilidade e Sem Efeitos Colaterais
  • Código Mais Reutilizável
  • Maior Modularidade
  • Faça mais com menos código
  • Sintaxe muito flexível
  • Suporta todas as características da OOP
  • Suporta todas as características da FP. Altamente funcional
  • Código menos propenso a erros
  • Melhor programação paralela e de concorrência
  • Código altamente escalável e sustentável
  • Alta produtividade
  • Aplicações distribuídas
  • Interoperabilidade Java completa
  • DSLs Scala poderosos disponíveis
  • REPL para aprender os fundamentos do Scala

Desvantagens da linguagem Scala:-

  • Código menos legível
  • Um pouco difícil de entender o código para iniciantes
  • Sintaxe complexa para aprender
  • Menos compatibilidade com versões anteriores

NOTA:- Podemos escrever código Scala de forma mais legível ou menos legível

Qual é a principal desvantagem da linguagem Scala?

Além de muitos benefícios do Scala, ele tem uma grande desvantagem: Problema de Compatibilidade Reversa. Se quisermos atualizar para a versão mais recente do Scala, precisamos cuidar da alteração de alguns nomes de pacotes, nomes de classes, nomes de métodos ou funções, etc. Por exemplo, se estiver usando uma versão antiga do Scala e seu projeto estiver usando a anotação BeanProperty, ela estava disponível em “scala.reflect” como “scala.reflect.BeanProperty” nas versões antigas. Se quisermos atualizar para as novas versões do Scala, precisamos alterar este pacote de “scala.reflect” para “scala.beans”.

Qual é o lema principal da linguagem Scala?

Assim como o lema “Escreva uma vez, execute em qualquer lugar” do Java, o Scala possui o lema “Faça mais com menos” ou “Faça mais com menos código”. “Faça mais com menos” significa que podemos desenvolver programas ou lógica mais complexos com menos código.

Java, Scala, Groovy e Closure são as linguagens mais populares na JVM (Máquina Virtual Java). Scala, Groovy e Closure oferecem suporte tanto a recursos de programação orientada a objetos quanto a recursos de programação funcional na JVM. O Java SE 8 oferece suporte a todos os recursos de programação orientada a objetos. No entanto, oferece suporte a muito poucos recursos de programação funcional, como Expressões Lambda, Funções, Inferência de Tipo e Funções de Ordem Superior.

Assim como na classe java.lang.Object do Java, qual é a superclasse de todas as classes em Scala?

Como sabemos no Java, a superclasse de todas as classes (sejam elas classes da API do Java ou classes definidas pelo usuário) é java.lang.Object. Da mesma forma, em Scala, a superclasse de todas as classes ou traits é a classe “Any”. A classe Any é definida no pacote scala como “scala.Any”.

Qual é o modificador de acesso padrão em Scala? Scala possui a palavra-chave “public”?

Brazilian Portuguese Translation“`
Em Scala, se não mencionarmos nenhum modificador de acesso para um método, função, trait, objeto ou classe, o modificador de acesso padrão é “public”. Mesmo para campos (Fields), “public” é o modificador de acesso padrão. Devido a esse recurso padrão, Scala não possui a palavra-chave “public”.

O que é “Inferência de Tipo” em Scala?

Os tipos podem ser inferidos pelo compilador Scala durante o tempo de compilação. Isso é conhecido como “Inferência de Tipo”. Tipos referem-se a tipos de dados ou tipos de resultado. Utilizamos tipos em vários lugares em programas Scala, como tipos de variáveis, tipos de objetos, tipos de parâmetros de métodos/funções, tipos de retorno de métodos/funções, etc. Em termos simples, determinar o tipo de uma variável, expressão ou objeto, etc., durante o tempo de compilação pelo compilador é conhecido como “Inferência de Tipo”.

Quais são as semelhanças e diferenças entre Int em Scala e java.lang.Integer em Java? Qual é a relação entre Int e RichInt em Scala?

Semelhanças entre Int em Scala e java.lang.Integer em Java:

  • Ambos são classes.
  • Ambos são utilizados para representar números inteiros.
  • Ambos são inteiros assinados de 32 bits.

Diferenças entre Int em Scala e java.lang.Integer em Java:

  • A classe Int em Scala não implementa a interface Comparable.
  • A classe java.lang.Integer em Java implementa a interface Comparable.

O Integer em Java é algo semelhante ao Int em Scala e ao RichInt. RichInt é uma classe final definida no pacote scala.runtime, como “scala.runtime.RichInt”. Em Scala, a relação entre Int e RichInt é que quando usamos Int em um programa Scala, ele será automaticamente convertido em RichInt para utilizar todos os métodos disponíveis nesta classe. Podemos dizer que RichInt é uma classe implícita de Int. (Discutiremos “O que é Implícito e as vantagens dos Implícitos” em minha próxima postagem).

O que é Nothing em Scala? O que é Nil em Scala? Qual é a relação entre Nothing e Nil em Scala?

Em Scala, Nothing é um Tipo (classe final). É definido na base do Sistema de Tipos Scala, o que significa que é um subtipo de qualquer coisa em Scala. Não existem instâncias de Nothing. Casos de Uso de Nothing em Scala:- Se Nothing não possui instâncias, então quando usamos isso em Aplicações Scala?

  • Nil é definido usando Nothing (Veja abaixo para exemplo).
  • None é definido usando Nothing.
object None extends Option[Nothing]
  • Podemos usar Nothing como tipo de retorno de métodos que nunca retornam.
  • Podemos usar Nothing como tipo de retorno de métodos que terminam anormalmente.

Nil é um objeto, que é usado para representar uma lista vazia. Ele é definido no pacote “scala.collection.immutable”, conforme mostrado abaixo:

object Nil extends List[Nothing]

Exemplo:-

scala> Nil
res5: scala.collection.immutable.Nil.type = List()

scala> Nil.length
res6: Int = 0

O que é Null em Scala? O que é null em Scala? Qual é a diferença entre Null e null em Scala?

Null é um Tipo (classe final) em Scala. O tipo Null está disponível no pacote “scala” como “scala.Null”. Ele tem uma e apenas uma instância, que é null. Em Scala, “null” é uma instância do tipo scala.Null. Exemplo:-

scala> val myNullRef : Null = null
myNullRef: Null = null

Não podemos atribuir outros valores às referências do tipo Null. Aceita apenas o valor ‘null’. Null é um subtipo de todos os tipos de referência. Null está na parte inferior do Sistema de Tipos do Scala. Como não é um subtipo de tipos de Valor, podemos atribuir “null” a qualquer variável do tipo de Valor. Exemplo:-

scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
       val myInt : Int = null

^ Aqui ocorre um erro de tipo incompatível. encontrado: Null(null) mas necessário: Int. As conversões implícitas entre Null e Int não são aplicáveis porque são ambíguas.

O que é Unit em Scala? Qual é a diferença entre void em Java e Unit em Scala?

No Scala, Unit é usado para representar “Nenhum valor” ou “Nenhum valor útil”. Unit é uma classe final definida no pacote “scala” como “scala.Unit”. Unit é algo semelhante ao void em Java, mas eles têm algumas diferenças.

  • O void em Java não possui nenhum valor. É nada.
  • O Unit em Scala tem um valor, que é ()
  • () é o único valor do tipo Unit em Scala. No entanto, não há valores do tipo void em Java.
  • O void em Java é uma palavra-chave. O Unit em Scala é uma classe final.

Ambos são usados para representar que um método ou função não está retornando nada.

Qual é a diferença entre val e var em Scala?

No Scala, tanto val quanto var são usados para definir variáveis. No entanto, eles têm algumas diferenças significativas.

  • var significa variável.
  • val significa valor.
  • Como sabemos, variável significa mutável e valor significa constante.
  • var é usado para definir variáveis mutáveis, o que significa que podemos reatribuir valores depois de criá-las.
  • val é usado para definir variáveis imutáveis, o que significa que não podemos reatribuir valores depois de criá-las.
  • Em termos simples de Java, var significa ‘variável’ e val significa ‘variável final’.

O que é REPL em Scala? Qual é o uso do REPL do Scala? Como acessar o REPL do Scala a partir do Prompt de Comando?

REPL significa Read-Evaluate-Print Loop. Podemos pronunciá-lo como ‘ripple’. Em Scala, o REPL atua como um interpretador para executar código Scala a partir do prompt de comando. Por isso, o REPL também é conhecido como CLI do Scala (Interface de Linha de Comando do Scala) ou shell de linha de comando do Scala. O principal propósito do REPL é desenvolver e testar pequenos trechos de código Scala para fins de prática. É muito útil para iniciantes em Scala praticarem programas básicos. Podemos acessar o REPL usando o comando “scala”. Quando digitamos o comando “scala” no Prompt de Comando, obtemos um shell REPL onde podemos digitar e executar código Scala.

D:\> scala

scala>

Quais são as características do Scala?

A linguagem Scala suporta as seguintes características:

  • **Suporta tanto o estilo OOP (Programação Imperativa) quanto o estilo Funcional
  • Linguagem de Programação Pura Orientada a Objetos
  • Suporta todas as Características Funcionais
  • Interpretador REPL (Read-Evaluate-Print Loop)
  • Sistema de Tipos Fortes
  • Linguagem de Tipagem Estática
  • Inferência de Tipos
  • Suporta Correspondência de Padrões
  • Suporta Closures
  • Suporta Estruturas de Dados Persistentes
  • Usa o Modelo de Ator para desenvolver Aplicações Concorrentes
  • Interoperável com Java
  • Disponível todas as ferramentas de desenvolvimento – IDEs, Ferramentas de Compilação, Frameworks Web, Frameworks TDD e BDD

Como implementamos loops de maneira funcional? Qual é a diferença entre loops no estilo OOP e FP?

Sabemos como implementar loops no estilo Orientado a Objetos: usando variáveis temporárias mutáveis, atualizando o valor da variável e usando construções de loop. É uma abordagem muito tediosa e não segura. Não é seguro em threads. O estilo Orientado a Objetos usa as seguintes construções para implementar loops:

  • Construções de Loop
  • Mutabilidade
  • Efeitos Colaterais

Podemos implementar os mesmos loops de maneiras diferentes de forma funcional. É Thread-Safe. Podemos usar as seguintes duas técnicas para implementar os loops no estilo funcional:

  • Recursão
  • Recursão de Cauda
  • Imutabilidade
  • Sem Efeitos Colaterais

O que é “Application” em Scala ou O que é Scala Application? O que é “App” em Scala? Qual é o uso do App em Scala?

Scala Application: Em Scala, App é um traço definido no pacote scala como “scala.App”. Ele define o método principal. Se um Objeto ou uma Classe estende este traço, eles se tornarão automaticamente programas executáveis em Scala porque herdarão o método principal de Application. A principal vantagem de usar App é que não precisamos escrever o método principal. A principal desvantagem de usar App é que devemos usar o mesmo nome “args” para se referir ao argumento de linha de comando, pois o método main() de scala.App usa este nome. Exemplo:- Sem Scala App:

object MyApp {
    def main( args: Array[String]){
        println("Hello World!")
    }
}

Com Scala App:

object MyApp extends App{
   println("Hello World!")
}

Se observarmos os dois exemplos acima, no segundo exemplo não definimos o método principal porque herdamos de Scala App (Application). Antes do Scala 2.9, tínhamos o traço scala.Application. Mas ele foi depreciado pelo scala.App desde a versão 2.9 do Scala.

O Scala suporta Sobrecarga de Operadores? O Java suporta Sobrecarga de Operadores?

O Java não suporta Sobrecarga de Operadores. O Scala suporta Sobrecarga de Operadores. A razão para isso é que o Java não deseja suportar alguns nomes de método enganosos como “+*/”. O Scala oferece essa flexibilidade aos desenvolvedores para decidir quais nomes de métodos/funções devem ser usados. Quando chamamos 2 + 3, significa que ‘+’ não é um operador, é um método disponível na classe Int (ou é do tipo implícito). Internamente, essa chamada é convertida para “2.+(3)“.

O que é uma Expressão? O que é uma Declaração? Qual a diferença entre Expressão e Declaração?

Expressão: Expressão é um valor que significa que será avaliado como um valor. Como uma expressão retorna um valor, podemos atribuí-la a uma variável. Exemplo: – Condição “If” em Scala, operador ternário em Java. Declaração: A declaração define uma ou mais ações ou operações. Isso significa que a declaração executa ações. Como não retorna um valor, não podemos atribuí-la a uma variável. Exemplo: – Condição “If” em Java.

Qual é a diferença entre o “If…Else” em Java e o “If…Else” em Scala?

“If…Else” em Java: Em Java, “If…Else” é uma declaração, não uma expressão. Não retorna um valor e não pode ser atribuído a uma variável. Exemplo: –

 int year;
 if( count == 0) 
   year = 2014;
 else 
   year = 2015;

“If…Else” em Scala: Em Scala, “If…Else” é uma expressão. Avalia um valor, ou seja, retorna um valor. Podemos atribuí-lo a uma variável.

 val year = if( count == 0) 2014 else 2015

**NOTA:-** “If…Else” em Scala funciona como o Operador Ternário em Java. Podemos usar “If…Else” em Scala como uma declaração “If…Else” em Java, conforme mostrado abaixo:

 val year = 0
 if( count == 0) 
   year = 2014 
 else 
   year = 2015

O Scala é uma linguagem baseada em expressões ou uma linguagem baseada em declarações? O Java é uma linguagem baseada em expressões ou uma linguagem baseada em declarações?

No Scala, tudo é um valor. Todas as expressões ou declarações avaliam para um valor. Podemos atribuir expressões, funções, closures, objetos, etc., a uma variável. Portanto, o Scala é uma linguagem orientada a expressões. No Java, as declarações não são expressões ou valores. Não podemos atribuí-las a uma variável. Portanto, o Java não é uma linguagem orientada a expressões. É uma linguagem baseada em declarações.

Diga-me algumas características suportadas por Java, mas não por Scala, e vice-versa?

  • O Java não suporta sobrecarga de operadores, mas o Scala a suporta.
  • O Java suporta os operadores ++ e , mas o Scala não os suporta.
  • O Java tem exceções verificadas e não verificadas, mas o Scala não tem exceções verificadas.
  • Scala não suporta declarações de break e continue, mas Java as utiliza.
  • Scala não possui conversão explícita de tipos, mas Java suporta esse recurso.
  • Scala suporta Correspondência de Padrões, mas Java não.
  • Java usa tipos de dados primitivos, mas Scala não possui.
  • Java suporta membros estáticos, mas Scala não possui o conceito de membros estáticos.
  • Scala suporta Implicits e Traits, Java não os suporta.

**NOTA:-**Esta lista vai além de uma página. No entanto, estes são alguns pontos importantes a lembrar sobre as diferenças entre as funcionalidades de Scala e Java para enfrentar Entrevistas de Scala.

Qual é a diferença entre Função e Método em Scala?

Scala suporta tanto funções quanto métodos. Usamos a mesma sintaxe para definir funções e métodos, não há diferença de sintaxe. No entanto, eles têm uma diferença pequena:

  • Podemos definir um método em uma classe ou trait Scala. O método está associado a um objeto (uma instância de uma Classe). Podemos chamar um método usando uma instância de uma Classe. Não podemos usar um Método Scala diretamente sem usar um objeto.
  • Função não está associada a uma classe ou trait. É definida em um Pacote Scala. Podemos acessar funções sem usar objetos, como os Métodos Estáticos de Java.

NOTA:- Vamos discutir sobre Classe, Traço, Pacote, Objeto etc nos meus próximos posts.

Quantos arquivos de classe públicos são possíveis de definir em um arquivo fonte Scala?

No Java, podemos definir no máximo uma classe/interface pública em um arquivo fonte. Ao contrário do Java, o Scala suporta múltiplas classes públicas no mesmo arquivo fonte. Podemos definir qualquer número de classes/interfaces/pacotes públicos em um arquivo fonte Scala.

Assim como no Java, quais são as importações padrão na Linguagem Scala?

Sabemos que java.lang é o pacote padrão importado automaticamente em todos os Programas Java pelo JVM. Não precisamos importar este pacote explicitamente. Da mesma forma, as seguintes são as importações padrão disponíveis em todos os Programas Scala:

  • pacote java.lang
  • pacote scala
  • scala.PreDef

Quantos operadores existem em Scala e por quê?

Ao contrário de Java e semelhante ao C++, Scala suporta a sobrecarga de operadores. Scala possui apenas um operador que é o operador “=” (igual). Além disso, todos são apenas métodos. Por exemplo, em 2 + 3, aqui “+” não é um operador em Scala. “+” é um método disponível na classe Int. O compilador Scala observa que 2 e 3 são inteiros e tenta encontrar o método “+” na classe Int. Portanto, o compilador Scala converte a expressão “2 + 3” em “2.+(3)” e faz uma chamada ao método “+” no objeto inteiro “2” e passa o objeto inteiro “3” como parâmetro para o método “+”. Ambos “2 + 3” e “2.+(3)” são iguais. É apenas um açúcar sintático do Scala para escrever programas no estilo funcional.

Mencione algumas palavras-chave que são usadas pelo Java e não são necessárias no Scala? Por que o Scala não precisa delas?

O Java usa extensivamente as seguintes palavras-chave:

  • Palavra-chave ‘public’ – para definir classes, interfaces, variáveis etc.
  • Palavra-chave ‘static’ – para definir membros estáticos.

Scala não requer essas duas palavras-chave. Scala não possui palavras-chave ‘public’ e ‘static’.

  • No Scala, o modificador de acesso padrão é ‘public’ para classes, traits, métodos/funções, campos, etc. É por isso que a palavra-chave ‘public’ não é necessária.
  • Para apoiar os princípios de POO, a equipe do Scala evitou a palavra-chave ‘static’. Portanto, o Scala é uma linguagem de programação puramente orientada a objetos. É muito difícil lidar com membros estáticos em aplicações de concorrência.

O que é o PreDef no Scala? Qual é o principal propósito do PreDef no Scala?

No Scala, PreDef é um objeto definido no pacote scala como “scala.PreDef”. É um objeto utilitário que define muitos métodos utilitários, como mostrado abaixo:

  • Métodos utilitários de E/S de console (print, println, etc.)
  • Métodos utilitários de coleção
  • Métodos utilitários de string
  • Métodos de conversão implícita
  • Métodos utilitários de assertiva, etc.

Por exemplo, os métodos print, println, readLine, readInt, require, etc., são definidos no objeto PreDef. No Scala, o PreDef está disponível para usar seus métodos sem importar em todos os programas Scala, porque o compilador Scala importa este objeto automaticamente para todas as unidades de compilação, como Classe, Objeto, Trait, etc. É isso sobre as “Perguntas e Respostas Básicas do Scala”. Vamos discutir algumas perguntas e respostas intermediárias, avançadas e em tempo real do Scala em minhas próximas postagens. Por favor, deixe-me um comentário se você gostou da minha postagem ou se tiver algum problema/sugestão.

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