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 recursos de OOP quanto de FP, proporcionando diversas vantagens.
Perguntas de Entrevista Scala
Vou compartilhar meu conhecimento de entrevistas e minha experiência em desenvolvimento Ecossistema Scala ou Fullstack Scala (Scala/Play/Akka) com você por meio de algumas postagens. Pretendo abordar 3 postagens separadas. Algumas perguntas são únicas, enquanto outras têm subperguntas. No total, vou discutir cerca de 200 perguntas. Aposto que se estiver familiarizado com todas essas perguntas, certamente terá sucesso em todas as entrevistas para desenvolvedor Scala. No entanto, se quiser seguir como desenvolvedor Fullstack Scala, é importante aprender a fundo todas essas tecnologias Fullstack Scala.
Introdução
I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:
- Perguntas e Respostas de 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 para quem possui 1+ ano de experiência como Desenvolvedor Scala.2. Perguntas e Respostas Intermediárias de Entrevista Scala:-
Vamos discutir algumas perguntas de entrevista, que são úteis para quem possui 2+ anos de experiência como Desenvolvedor Scala/Java.3. Perguntas e Respostas Avançadas de Entrevista Scala:-
Vamos discutir algumas Perguntas de Entrevista, que são úteis para Desenvolvedor Scala/Java Sênior ou Experiente.4. Perguntas e Respostas de Entrevista Concorrência e Paralelismo Scala/Java:-
Vamos discutir Perguntas e Respostas de Entrevista Concorrência e Paralelismo Scala/Java, que são úteis para Desenvolvedor Scala/Java Sênior ou Experiente.
Também vamos discutir algumas diferenças entre construções Scala e Java para que os Usuários (que estão migrando de Java para Scala) possam se beneficiar desses posts. 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 discutiremos detalhadamente.
- O que é Scala? É uma Linguagem ou Plataforma? Ela suporta OOP ou FP? Quem é o pai do Scala?
- 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?
- Scala é uma Linguagem OOP Pura? Java é uma Linguagem OOP Pura?
- Scala suporta todos os conceitos de Programação Funcional? Java 8 suporta todos os conceitos de Programação Funcional?
- Quais são as principais vantagens da Linguagem Scala? Existem desvantagens na Linguagem Scala?
- Qual é a principal desvantagem da Linguagem Scala?
- Qual é o principal lema da Linguagem Scala?
- Quais são as Linguagens JVM populares disponíveis agora?
- Assim como a classe java.lang.Object de Java, qual é a superclasse de todas as classes em Scala?
- Qual é o modificador de acesso padrão em Scala? Scala tem a palavra-chave “public”?
- O que é “Inferência de Tipo” em Scala?
- Diferença entre Int de Scala e java.lang.Integer de Java? Qual é a relação entre Int e RichInt em Scala?
- O que é Nothing em Scala? O que é Nil em Scala? Qual é a relação entre Nothing e Nil em Scala?
- O que é Null em Scala? O que é null em Scala? Qual é a diferença entre Null e null em Scala?
- O que é Unit em Scala? Qual é a diferença entre void de Java e Unit de Scala?
- Qual é a diferença entre val e var em Scala?
- O que é REPL em Scala? Qual é o uso do REPL do Scala? Como acessar o REPL do Scala a partir do Prompt de Comando (CMD)?
- Quais são as características do Scala?
- Como implementamos loops de maneira funcional? Qual é a diferença entre loops no estilo OOP e FP?
- O que é “Application” em Scala ou o que é Scala Application? O que é “App” em Scala? Qual é o uso do App do Scala?
- O Scala suporta sobrecarga de operadores? O Java suporta sobrecarga de operadores?
- O que é uma Expressão? O que é uma Declaração? Qual é a diferença entre Expressão e Declaração?
- Qual é a diferença entre o “If…Else” em Java e o “If…Else” em Scala?
- O Scala é uma linguagem baseada em expressões ou em declarações? O Java é uma linguagem baseada em expressões ou em declarações?
- Diga-me algumas características suportadas pelo Java, mas não pelo Scala, e vice-versa?
- Qual é a diferença entre Função e Método em Scala?
- Quantos arquivos de classe públicos são possíveis de definir em um arquivo fonte do Scala?
- Assim como no Java, quais são as importações padrão na linguagem Scala?
- Quantos operadores existem no Scala e por quê?
- Mencione algumas palavras-chave usadas pelo Java e não necessárias no Scala. Por que o Scala não as requer?
- O que é o PreDef no Scala?
Por favor, consulte a minha postagem anterior para saber mais sobre Programação Funcional (Clique neste link para abrir minha postagem anterior).
Questões 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 a fundo 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 SCAlável 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 programação funcional. Foi projetado e desenvolvido por Martin Odersky. Scala é uma linguagem de programação JVM (Java Virtual Machine) segura em termos de tipo e funcionalidade de objeto. Scala é uma linguagem de programação híbrida funcional (orientada a objetos e funcional) que roda na 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 e dinamicamente tipadas?
Sim, Scala é uma linguagem de programação de Tipagem Estática. Linguagem de Tipagem Estática significa que a verificação de tipo é feita durante o tempo de compilação pelo compilador, não durante o tempo de execução. A principal vantagem desses tipos de linguagens é que, como desenvolvedores, devemos nos preocupar em escrever código correto para evitar erros de compilação. Como o compilador verifica muitos erros durante o tempo de compilação, não enfrentamos muitos problemas ou bugs durante o tempo de execução. Exemplos: Java, Scala, C, C++, Haskell, etc. Linguagem de Tipagem Dinâmica significa que a verificação de tipo é feita durante o tempo de execução, não durante o tempo de compilação pelo compilador. Como o compilador não verifica nenhum tipo durante o tempo de compilação, podemos esperar mais problemas ou bugs durante o tempo de execução. Exemplo: Groovy, JavaScript, Ruby, Python, Smalltalk, etc.
Scala é uma linguagem de programação puramente orientada a objetos? Java é uma linguagem de programação puramente orientada a objetos?
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 (OOP) porque suporta os seguintes dois conceitos não OOP:
- Java suporta tipos de dados primitivos. Eles não são objetos.
- 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 possui tipos de dados primitivos e também não possui membros estáticos.
O Scala suporta todos os conceitos de Programação Funcional? O Java 8 suporta todos os conceitos de Programação Funcional?
Sim, o Scala suporta todos os conceitos de Programação Funcional (FP). O Java 8 introduziu alguns construtos de Programação Funcional, mas NÃO suporta todos os conceitos de Programação Funcional. Por exemplo, o Java 8 não suporta Correspondência de Padrões, Currying de Funções, Implicits etc.
Quais são as principais vantagens da Linguagem Scala? Existem desvantagens na Linguagem Scala?
Se utilizarmos 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 Todos os Recursos de OOP
- Suporta Todos os Recursos de FP. Altamente Funcional.
- Código Menos Propenso a Erros
- Melhor Programação Paralela e de Concorrência
- Código Altamente Escalável e Mantível
- Alta Produtividade
- Aplicações Distribuídas
- Interoperabilidade Total com Java
- DSLs Poderosas Disponíveis em Scala
- REPL para aprender o Básico de 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 um grande problema: Questão de Compatibilidade Reversa. Se quisermos atualizar para a versão mais recente do Scala, então precisamos cuidar da alteração de alguns nomes de pacotes, nomes de classes, nomes de métodos ou funções, etc. Por exemplo, se você está usando uma versão antiga do Scala e seu projeto está usando a anotação BeanProperty. Ela estava disponível em “scala.reflect” como “scala.reflect.BeanProperty” em versões antigas. Se quisermos atualizar para novas versões do Scala, então precisamos mudar esse pacote de “scala.reflect” para “scala.beans”.
Qual é o principal lema da Linguagem Scala?
Assim como o lema do Java “Escreva Uma Vez, Execute em Qualquer Lugar”, Scala tem 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ógicas mais complexas com menos código.
Quais são as linguagens JVM populares disponíveis agora?
Java, Scala, Groovy e Closure são as linguagens mais populares da JVM (Java Virtual Machine). Scala, Groovy e Closure suportam tanto as características de Programação Orientada a Objetos quanto as características de Programação Funcional. O Java SE 8 suporta todas as características de Programação Orientada a Objetos. No entanto, suporta muito poucas características de Programação Funcional, como Expressões Lambda, Funções, Inferência de Tipo e Funções de Alta Ordem.
Assim como na classe java.lang.Object do Java, qual é a superclasse de todas as classes em Scala?
Como sabemos em Java, a superclasse de todas as classes (Classes da API Java ou Classes Definidas pelo Usuário) é a classe 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 tem a palavra-chave “public”?
Em Scala, se não mencionarmos nenhum modificador de acesso a 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 em tempo de compilação. Isso é conhecido como “Inferência de Tipo”. Tipos referem-se a tipos de dados ou tipos de resultado. Usamos tipos em muitos lugares nos 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., em 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 de 32 bits assinados.
Diferenças entre a classe Int do Scala e java.lang.Integer do Java:
- A classe Int do Scala não implementa a interface Comparable.
- A classe java.lang.Integer do Java implementa a interface Comparable.
O Integer do Java é algo semelhante ao Int do Scala e ao RichInt. RichInt é uma classe final definida no pacote scala.runtime, como “scala.runtime.RichInt”. No 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 nessa classe. Podemos dizer que RichInt é uma classe implícita de Int. (Vamos discutir “O que é Implícito e as vantagens dos Implícitos” em meu próximo post).
O que é Nothing no Scala? O que é Nil no Scala? Qual é a relação entre Nothing e Nil no Scala?
No Scala, Nothing é um Tipo (classe final). Ele é definido no fundo do Sistema de Tipos do Scala, o que significa que é um subtipo de qualquer coisa no Scala. Não há instâncias de Nothing. Casos de Uso de Nothing no Scala:- Se Nothing não tem instâncias, quando devemos usar isso em Aplicações Scala?
- Nil é definido usando Nothing (Veja abaixo o 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. É definido no pacote “scala.collection.immutable”, como 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. Ele aceita apenas o valor ‘null’. Null é um subtipo de todos os tipos de referência. Null está na parte inferior do Sistema de Tipos Scala. Como não é um subtipo de tipos de valor, podemos atribuir “null” a qualquer variável de 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 incompatibilidade de tipo. 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 “Sem valor” ou “Sem valor útil”. Unit é uma classe final definida no pacote “scala” que é “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 possui um valor ()
- () é o único valor do tipo Unit em Scala. No entanto, não existem 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 alterável e valor significa constante.
- var é usado para definir variáveis mutáveis, o que significa que podemos reatribuir valores uma vez que são criados.
- val é usado para definir variáveis imutáveis, o que significa que não podemos reatribuir valores uma vez que são criados.
- 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 em 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 age como um interpretador para executar código Scala a partir do prompt de comando. É por isso que o REPL também é conhecido como Scala CLI (Interface de Linha de Comando do Scala) ou shell de linha de comando do Scala. O principal objetivo 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 de programação OOP (Imperative-Style) quanto o estilo de programação Funcional
- Linguagem de Programação Orientada a Objetos Pura
- Suporta todos os Recursos Funcionais
- Interpretador REPL (Read-Evaluate-Print Loop)
- Sistema de Tipos Forte
- Linguagem de Tipagem Estática
- Inferência de Tipo
- Suporta Correspondência de Padrões
- Suporta Closures
- Suporta Estruturas de Dados Persistentes
- Utiliza 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 de TDD e BDD
Como implementamos loops de forma funcional? Qual é a diferença entre loops no estilo OOP e FP?
Nós 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 insegura. Não é à prova de threads. O estilo Orientado a Objetos utiliza 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 é Application em Scala? O que é “App” em Scala? Qual é o uso do App em Scala?
Aplicação Scala: Em Scala, App é um trait definido no pacote scala como “scala.App”. Ele define o método principal. Se um Objeto ou uma Classe estende este trait, então eles se tornarão programas executáveis automaticamente em Scala, pois 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 da linha de comando, porque o método main() de scala.App usa esse 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 trait scala.Application. Mas 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 é que o Java não deseja suportar alguns nomes de métodos enganosos como “+*/”. O Scala dá essa flexibilidade ao desenvolvedor para decidir quais nomes de métodos/funções devem ser usados. Quando chamamos 2 + 3, isso significa que ‘+’ não é um operador, é um método disponível na classe Int (ou seu tipo implícito). Internamente, essa chamada é convertida em “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í-lo a uma variável. Exemplo: – Condição If em Scala, Operador ternário em Java.
Declaração: Declaração define uma ou mais ações ou operações. Isso significa que a Declaração realiza 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: -** O “If…Else” em Scala funciona como o Operador Ternário em Java. Podemos usar o “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 em instruções? O Java é uma linguagem baseada em expressões ou em instruções?
No Scala, tudo é um valor. Todas as expressões ou instruções avaliam a um valor. Podemos atribuir uma expressão, função, fechamento, objeto, etc., a uma variável. Portanto, o Scala é uma linguagem orientada a expressões. No Java, as instruçõ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 instruções.
Diga-me algumas características suportadas pelo Java, mas não pelo Scala, e vice-versa?
- O Java não suporta sobrecarga de operadores, mas o Scala 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 de tipo explícita, mas Java suporta esse recurso.
- Scala suporta Correspondência de Padrões, mas Java não.
- Java utiliza 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 ultrapassa uma página. No entanto, estes são alguns pontos importantes a lembrar sobre as diferenças nas características 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 mínima:
- 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.
- A função não está associada a uma classe ou trait. Ela é 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, Trait, Pacote, Objeto etc nos meus próximos posts.
Quantos arquivos de classe públicos são possíveis de definir em um arquivo de origem Scala?
No Java, podemos definir no máximo uma classe/interface pública em um arquivo de origem. Ao contrário do Java, o Scala suporta várias classes públicas no mesmo arquivo de origem. Podemos definir qualquer número de classes/interfaces/traits públicos em um arquivo de origem Scala.
Assim como no Java, quais são as importações padrão na Linguagem Scala?
Nós sabemos, java.lang é o pacote padrão importado automaticamente em todos os Programas Java pelo JVM. Não precisamos importar esse 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ê?
À diferença de Java e semelhante a C++, Scala suporta a sobrecarga de operadores. Scala tem apenas um operador, que é o operador “=” (igual). Além disso, todos os outros são métodos. Por exemplo, em “2 + 3”, o “+” não é um operador em Scala, mas sim um método disponível na classe Int. O compilador Scala identifica que 2 e 3 são inteiros, e tenta encontrar o método “+” na classe Int. Assim, a expressão “2 + 3” é convertida para “2.+(3)”, fazendo uma chamada ao método “+” no objeto inteiro “2” e passando o objeto inteiro “3” como parâmetro para o método “+”. Tanto “2 + 3” quanto “2.+(3)” são equivalentes. É apenas uma sintaxe açucarada do Scala para escrever programas no estilo funcional.
Mencione algumas palavras-chave usadas pelo Java e não necessárias no Scala. Por que o Scala não as requer?
O Java utiliza extensivamente as seguintes palavras-chave:
- A palavra-chave ‘public’ – para definir classes, interfaces, variáveis etc.
- A palavra-chave ‘static’ – para definir membros estáticos.
Scala não requer essas duas palavras-chave. Scala não possui as palavras-chave ‘public’ e ‘static’.
- Em 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 Scala evitou a palavra-chave ‘static’. É por isso que Scala é uma Linguagem de Programação Orientada a Objetos Pura. É muito difícil lidar com membros estáticos em aplicações de concorrência.
O que é PreDef em Scala? Qual é o principal objetivo do PreDef em Scala? Em Scala, PreDef é um objeto definido no pacote scala como “scala.PreDef”. É um objeto utilitário. Ele define muitos métodos utilitários como mostrado abaixo:
- Métodos utilitários de IO 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 asserção, etc.
Por exemplo, métodos como print, println, readLine, readInt, require, etc. são definidos no objeto PreDef. Em Scala, PreDef está disponível para usar seus métodos sem importação em todos os programas Scala porque o compilador Scala importa este objeto em todas as unidades de compilação como Classe, Objeto, Trait etc. automaticamente. É isso tudo sobre “Perguntas e Respostas Básicas de Scala”. Vamos discutir algumas perguntas e respostas de Scala Intermediárias, Avançadas e em Tempo Real em meus próximos posts. Por favor, deixe-me um comentário se você gostou do meu post ou tem alguma questão/sugestão.
Source:
https://www.digitalocean.com/community/tutorials/scala-interview-questions-answers