Javascript advanced technics Flashcards

Tecnicas avançadas de javascript

1
Q

Explique esta tecnica avançada em Javascript:

Destructuring with Aliasing

A

Destructuring allows you to unpack values from arrays or properties from objects into distinct variables. Aliasing enables you to rename the variables during this process, which is particularly useful when dealing with data from external sources like APIs.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Explique esta tecnica avançada em Javascript:

Currying

A

Permite criar funções que podem ser chamadas com pocos argumentos, retornando uma nova função que aceita os argumentos restantes. É especialmente util na programação funcional.

function curry(func) {
  return function curried(…args) {
    if (args.length >= func.length) {
      return func.apply(this, args);
    }
    return function (…nextArgs) {
      return curried.apply(this, args.concat(nextArgs));
    };
  };
}
const sum = (a, b, c) => a + b + c;
const curriedSum = curry(sum);
console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3)); // 6
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Explique esta tecnica avançada em Javascript:

Debouncing and Throttling

A

Debouncing:

Debouncing ensures that a function is not called again until a certain amount of time has passed since the last call. This is useful for scenarios like search input fields where you want to wait until the user has stopped typing before making an API call.

Throttling:

Throttling ensures that a function is called at most once in a specified time period. This is useful for scenarios like scroll events where you want to limit the frequency of function calls.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Explique esta tecnica avançada em Javascript:

Memoization

A

Memoization is an optimization technique that involves caching the results of expensive function calls and returning the cached result when the same inputs occur again. This can significantly improve performance for functions with heavy computation, particularly those that are called frequently with the same arguments.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Explique esta tecnica avançada em Javascript:

Proxy

A

The Proxy object allows you to create a proxy for another object, enabling you to intercept and redefine fundamental operations such as property lookup, assignment, enumeration, function invocation, etc. This provides a powerful way to add custom behavior to objects.

const user = {
  name: 'John',
  age: 30
};

const handler = {
  get: (target, prop) => {
    console.log(`Getting ${prop}`);
    return target[prop];
  },
  set: (target, prop, value) => {
    if (prop === 'age' && typeof value !== 'number') {
      throw new TypeError('Age must be a number');
    }
    console.log(`Setting ${prop} to ${value}`);
    target[prop] = value;
    return true;
  }
};

const proxyUser = new Proxy(user, handler);
console.log(proxyUser.name); // Getting name, John
proxyUser.age = 35; // Setting age to 35
// proxyUser.age = '35'; // Throws TypeError
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Explique esta tecnica avançada em Javascript:

Generators

Inclua alguns use cases

A

Generators são funções simples que podem ser pausadas e retomadas a qualquer momento, sem perder seu contexto e definições das variáveis a cada re-execução.

A função Generator retorna um Iterador. Os valores da função Generator são retornados sob demanda, executando o metodo .next() do iterador. A instrução yield definida dentro da função Generator retornará o valor da função. Quando não tiver mais instruções yield o iterador mudará seu estado done para true, concluindo a iteração.

function* myGenerator() {
  yield 'Hello';
  yield 'World';
}

const iterator = myGenerator();

console.log(iterator.next()); // {value: 'Hello', done: false}
console.log(iterator.next()); // {value: 'World', done: false}
console.log(iterator.next()); // {value: undefined, done: true}
async function* streamVideo({ id }) {
  let endOfVideo = false;
  const downloadChunk = async (sizeInBytes) => {
    const response = await fetch(
      `api.example.com/videos/${id}`
    );
    const { chunk, done } = await response.json();
    if (done) endOfVideo = true;
    return chunk;
  };
  while (!endOfVideo) {
    const bufferSize = 500 * 1024 * 1024;
    yield await downloadChunk(bufferSize);
  }
}

Master JavaScript generators: 5 inspiring practical use cases
https://www.codingbeautydev.com/blog/javascript-generators

10 Advanced JavaScript Tricks You Don’t Know
https://medium.com/@bjprajapati381/10-advanced-javascript-tricks-you-dont-know-f1929e40703d

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Explique esta tecnica avançada em Javascript:

Self-Invoking Functions

Immediately Invoked Function Expressions (IIFE)

A

Permite executar uma função imediatamente após sua criação. São uteis para criar escopos isolados e evitar poluir o escopo global, o que é essencial para manter código limpo e modular.

(function () {
  console.log('This runs immediately!');
})();
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Explique esta tecnica avançada em Javascript

Short-Circuit Evaluation

A

Permite a avaliação otimizada e simplificada de expressões condicionais. É usada com operadores lógicos && (AND) e || (OR).

Como funciona:
No caso do &&, se o primeiro valor for falso, a segunda parte da expressão não será avaliada, pois o resultado já será falso. Já no ||, se o primeiro valor for verdadeiro, a segunda parte também não é avaliada, já que o resultado final será verdadeiro. Isso é útil para definir valores padrão ou evitar a execução de funções desnecessárias, melhorando a eficiência do código.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Explique esta tecnica avançada em Javascript

Optional Chaining

A

Permite acessar com segurança propriedades aninhadas dos objetos sem ter que explicitamente checar cada nivel em busca de null or undefined.

Em outras palavras, se tentar acessar alguma propriedade não definida ou com valor null num objeto, não será disparado um erro de sintaxe, mas será exibido um valor undefined.

const user = { profile: { name: 'Jane' } };
const userName = user?.profile?.name;
console.log(userName); // "Jane"
const user = { profile: { lastName: 'Doe' } };
const userName = user?.profile?.name;
console.log(userName); // SintaxError: 'name' is undefined
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Explique esta tecnica avançada em Javascript

Nullish Coalescing

A

Permite definir um valor padrão (à direita da expressão) a uma variável somente quando o lado esquerdo da expressão (left-hand side) for null ou undefined.

Usar || pode resultar em valores inesperados quando a expressão avaliada à esquerda for 0 or ""

const user = { name: '', age: 0 };
const userName = user.name ?? 'Anonymous';
const userAge = user.age ?? 18;
console.log(userName); // ""
console.log(userAge); // 0
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Explique esta tecnica avançada em Javascript

Promisify Callbacks

A

Permite converter uma função baseada em callback (require(‘fs’).readFile) numa Promise, fazendo mais fácil trabalhar com a sintaxe async/await.

function promisify(fn) {
  return function (…args) {
    return new Promise((resolve, reject) => {
      fn(…args, (err, result) => {
        if (err) reject(err);
        else resolve(result);
      });
    });
  };
}
const readFile = promisify(require('fs').readFile);
readFile('path/to/file.txt', 'utf8')
  .then(data => console.log(data))
  .catch(err => console.error(err));
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Explique esta tecnica avançada em Javascript

Function Composition

A

Permite criar uma nova função por combinar multiplas funções, fazendo o código mais modular e resusavel.

const compose = (…funcs) => (arg) =>
  funcs.reduceRight((prev, fn) => fn(prev), arg);
const add = (x) => x + 1;
const multiply = (x) => x * 2;
const addThenMultiply = compose(multiply, add);
console.log(addThenMultiply(5)); // 12
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Explique esta tecnica avançada em Javascript

Function Pipelining

A

Permite aplicar uma série de funções a um valor em sequencia, melhorando a legibilidade e manutenção.

const pipe = (…funcs) => (arg) =>
  funcs.reduce((prev, fn) => fn(prev), arg);
const add = (x) => x + 1;
const multiply = (x) => x * 2;
const addThenMultiply = pipe(add, multiply);
console.log(addThenMultiply(5)); // 12
How well did you know this?
1
Not at all
2
3
4
5
Perfectly