5 perguntas javascript para entrevista de emprego
1 - Quais são os Paradigmas de programação do javascript ?
Os paradigmas são uma forma de classificar a escrita de um codigo com base em certos fatores. As linguagens podem ser classificadas em vários paradigmas.
alguns paradigmas são:
imperativo em que o programador instrui a máquina como mudar seu estado,
procedural que agrupa instruções em procedimentos,
orientado a objetos, que agrupa instruções com a parte do estado em que operam,
declarativa em que o programador meramente declara propriedades do resultado desejado, mas não como calculá-lo
funcional em que o resultado desejado é declarado como o valor de uma série de aplicativos de função,
lógica em que o resultado desejado é declarado como a resposta a uma pergunta sobre um sistema de fatos e regras,
matemática em que o resultado desejado é declarado como a solução de um problema de otimização
reativa em que o resultado desejado é declarado com fluxos de dados e a propagação da mudança
A sua resposta deve ser algo como:
O javascript é uma linguagem de multiparadigmas. Ela tem o paradigma procedural, orientado a objetos e funcional
A programação baseada em protótipos é um estilo de programação orientada a objetos em que a reutilização de comportamento é realizada por meio de um processo de reutilização de objetos existentes que servem como protótipos.
2 - O que é Programação funcional?
Programação funcional (functional programming) é um dos conceitos principais do javascript e um de seus pilares.
A programação funcional é um paradigma de programação. Em outras palavras, é uma maneira de pensar sobre como escrever software com base em princípios específicos que foram definidos e listados abaixo. Outros exemplos de paradigmas de programação incluem programação orientada a objetos e programação procedural.
Pure functions: Dadas as mesmas entradas, sempre retorna a mesma saída, e Não tem efeitos colaterais.
Function composition: é o processo de combinar duas ou mais funções para produzir uma nova função ou realizar algum cálculo. Não tem efeitos colaterais
Avoid shared state: shared state é qualquer variável, objeto ou espaço de memória que pode ser alterado em mais de um lugar ou por mais de uma função. A ideia é evitar estados assim para evitar bugs. Uma função pode ser chamada em muitos estados diferentes e pode rebaixar esse estado ou desatualiza-lo.
Avoid mutating state: Imutabilidade e criar objetos que não podem ser alterados depois de criados. Esse é o conceito central da programação funcional
Avoid side effects: Um efeito colateral é qualquer mudança de estado do aplicativo que é observável fora da função chamada diferente de seu valor de retorno. Os efeitos colaterais incluem Modificar qualquer variável externa ou propriedade de objeto (por exemplo, uma variável global ou uma variável na cadeia de escopo da função pai), escrever no console, imprimir algo na tela, gravar em um arquivo, enviar algo para a rede, acionar qualquer processo externo, chamar qualquer outra função com efeitos colaterais.
É bom saber: de forma reduzida pode-se entender programação funcional como: o processo de construir software através de composição de funções puras, evitando compartilhamento de estados, dados mutáveis e efeitos colaterais. - caso você precise decorar o conceito de forma mais fácil essa é a definição a se seguir.
3 - Qual a diferença entre herança de classe e herança prototípica (classical inheritance and prototypal inheritance)
Herança de classe: Nas linguagens de programação orientadas a objetos clássicas, os objetos são abstrações de entidades do mundo real e as classes são generalizações (ou seja, abstrações de objetos ou de outras classes). As instâncias são normalmente instanciadas por meio de funções de construtor com a palavra-chave "NEW"
Herança prototípica: Em linguagens de programação orientadas a objetos prototípicas, os objetos são abstrações de entidades do mundo real ou de outros objetos. Portanto, um protótipo é uma generalização. As instâncias são tipicamente instanciadas por meio de funções de fábrica ou Object.create (). As instâncias podem ser compostas de muitos objetos diferentes, permitindo uma herança seletiva fácil.
É bom saber: Protótipos são o mecanismo pelo qual os objetos JavaScript herdam funcionalidades e/ou recursos uns dos outros.
JavaScript é frequentemente descrito como uma linguagem baseada em protótipo para fornecer herança. Os objetos podem incluir objetos de protótipo que agem como objetos de modelo que herdam métodos e propriedades. O objeto de protótipo de um objeto também pode ter um objeto de protótipo que herda métodos, propriedades e assim por diante. Isso é comumente conhecido como uma cadeia de protótipo e explica por que diferentes objetos têm propriedades e métodos definidos em outros objetos que estão disponíveis. - MDN web docs
Em JavaScript, a herança de protótipo é mais simples e mais flexível do que herança de classe. Tenha preferência por ela
Entendeu? Esse conceito foi o último que eu aprendi do javascript e também foi o mais complexo. Mas nao quero que você sofra. Caso você precise decorar um conceito decore esse: A herança tradicional é limitada a classes que herdam de outras classes. No entanto, a herança prototípica inclui não apenas protótipos herdados de outros protótipos, mas também objetos herdados de protótipos.
saiba mais sobre a diferença entre herança de classe e herança prototípica aqui
4. Quais são as vantagens e desvantagens da programação funcional vs programação orientada a objetos?
Prós Orientada a objetos:
É fácil entender os fundamentos dos objetos e explicar o significado das chamadas de método. Orientado a Objetos tende a usar o imperativo em vez do declarativo. Parece uma série de instruções simples que um computador deve seguir.
Orientada a objetos Contras:
A orientação do objeto geralmente depende do estado compartilhado. Objetos e comportamentos são frequentemente agrupados na mesma entidade e qualquer número de funções é acessado aleatoriamente em uma ordem não especificada, o que pode levar a comportamentos inesperados, como condições de corrida.
Prós da programação funcional:
Os modelos funcionais permitem que os programadores evitem condições de corrida e efeitos colaterais, eliminando erros causados ​​por várias funções competindo pelo mesmo recurso.
Recursos como disponibilidade do tipo não-ponto (também conhecido como programação implícita) tendem a simplificar muito as funções e torná-lo mais fácil de recompilar em um código reutilizável mais comum do que a programação. Programa orientado a objetos.A programação funcional também tende a ser declarativa e declarativa. Eles não fornecem instruções passo a passo para a operação, mas se concentram no que fazer, portanto, a função subjacente precisa executar qual delas. Isso lhe dá muita liberdade na refatoração e no ajuste de desempenho, permitindo substituir todo o algoritmo por um algoritmo mais eficiente com muito pouca alteração de código. (Por exemplo, salve ou use avaliação preguiçosa em vez de avaliação ansiosa.) O processamento com funções puras é um processador múltiplo ou um processo distribuído sem medo de enfrentar desafios, conflitos de recursos, conflitos etc. Pode ser facilmente estendido a um cluster. ..
Contras da programação funcional:
O uso excessivo de recursos de programação funcionais, como estilo sem ponto e contornos grandes, pode reduzir a legibilidade, porque o código resultante costuma ser menos abstrato, conciso e concreto. Mesmo a linguagem cotidiana da programação funcional pode confundir os novos membros da equipe, já que muitos estão mais familiarizados com a programação imperativa e orientada a objetos do que com a programação funcional.
A programação funcional tem uma curva de aprendizado muito mais íngreme do que a programação orientada a objetos. Na verdade, a prevalência da programação orientada a objetos tornou as linguagens de objetos e os materiais de aprendizagem mais familiares, enquanto o aprendizado de línguas tende a ser muito mais acadêmico e formal. O conceito de programação funcional é frequentemente escrito sobre o uso de expressões idiomáticas e notações no cálculo lambda, álgebra e teoria das categorias. Tudo isso requer uma base de conhecimento anterior nessas áreas para ser compreensível.
5. Quando a herança clássica é uma escolha apropriada?
A resposta é nunca ou quase nunca. Certamente, nunca mais de um nível. Hierarquias de classes de vários níveis são um antipadrão.