click below
click below
Normal Size Small Size show me how
Clean Code
| Question | Answer |
|---|---|
| Qual é a regra de ouro para nomes de variáveis? | Use nomes descritivos que expliquem o propósito da variável. |
| Como devem ser as funções? | Funções devem ser pequenas e fazer apenas uma coisa. |
| Qual é a importância de comentários? | Comentários devem explicar “por que”, não “o que” o código faz. |
| Como organizar constantes? | Coloque valores constantes em variáveis com nomes claros. |
| Qual é a recomendação sobre complexidade de função? | Funções devem ter complexidade baixa (poucos if/else, loops simples). |
| Qual é a prática recomendada para valores booleanos? | vite nomes genéricos; seja explícito sobre o que o booleano representa. // ruim let flag = true; // bom let isUserLoggedIn = true; |
| Como lidar com números mágicos? | // ruim if(score > 10){ ... } // bom const MIN_SCORE = 10; if(score > MIN_SCORE){ ... } |
| Qual é a recomendação para funções com muitos parâmetros? | Evite funções com muitos parâmetros; prefira objetos para agrupar dados. // ruim function createUser(name, age, email, address){ ... } // bom function createUser({name, age, email, address}) { ... } |
| O que é importante sobre tratamento de erros? | Evite capturar erros silenciosamente; sempre trate ou repasse. // ruim try { riskyOperation(); } catch(e){} // bom try { riskyOperation(); } catch(e){ console.error('Falha na operação:', e); throw e; } |
| Como melhorar legibilidade de expressões booleanas complexas? | Quebre expressões em variáveis com nomes significativos. // ruim if(user.isAdmin && user.isActive && !user.isBanned){ ... } // bom const isEligibleUser = user.isAdmin && user.isActive && !user.isBanned; if(isEligibleUser){ ... } |
| Qual é a regra sobre indentação? | Mantenha indentação consistente para legibilidade. if(user.isActive){ console.log('Usuário ativo'); } |
| Qual a prática para classes? | Cada classe deve ter uma única responsabilidade. class UserValidator { ... } class UserRepository { ... } |
| Como escrever loops legíveis? | refira métodos de array (map, filter, forEach) em vez de loops complexos. |
| Como lidar com funções longas? | Quebre em funções menores ou helpers. function processOrder(order){ validate(order); calculateTotal(order); sendInvoice(order); } |
| Como nomear funções? | Use verbos claros que descrevam a ação. function getUserName(){ ... } function sendEmail(){ ... } |
| O que evitar em funções? | Evite funções que dependem de variáveis externas (side effects). // ruim let total = 0; function add(value){ total += value; } // bom function add(total, value){ return total + value; } |
| Como organizar arquivos? | Um arquivo = uma responsabilidade / módulo. user.js → funções de usuário order.js → funções de pedido |
| Qual é a prática com strings? | const STATUS_ACTIVE = 'active'; if(user.status === STATUS_ACTIVE){ ... } |
| Como lidar com if/else complexos? | Prefira early return para reduzir aninhamento. function checkUser(user){ if(!user) return; if(user.isBanned) return; // resto do código } |
| Como organizar funções utilitárias? | Agrupe em módulos e dê nomes claros. // utils/math.js export function sum(a, b){ return a + b; } export function multiply(a, b){ return a * b; } |
| Como nomear funções de evento? | Use prefixo que indica ação, ex: onClick, handle. button.addEventListener('click', handleSubmit); function handleSubmit() { ... } |
| Como tratar funções com efeito colateral? | Evite efeitos colaterais dentro de funções; prefira retorno explícito. // ruim function incrementGlobal(){ counter++; } // bom function increment(value){ return value + 1; } |
| Como escrever testes unitários simples? | function sum(a, b){ return a + b; } // teste console.assert(sum(2,3) === 5); |
| Como organizar imports em JavaScript? | Importe por módulo e agrupe por tipo (libs externas / internas). import React from 'react'; import { sum } from './utils/math.js'; |
| Como melhorar código repetitivo? | Extraia funções reutilizáveis. function showMessage(msg){ console.log(msg); } showMessage('Hello'); showMessage('Bye'); |
| Qual é a regra sobre variáveis temporárias? | Use nomes claros, evite abreviações inúteis. const maxRetries = 3; |
| Como lidar com valores nulos? | Use checagem explícita e retorno antecipado. if(!user) return; |
| Como melhorar legibilidade de objetos? | const user = { name: 'Claudio', age: 48, role: 'dev' }; |
| Como escrever funções puras? | Função pura depende só dos parâmetros e retorna valor previsível. function square(x){ return x * x; } |
| Como lidar com variáveis globais? | Evite, prefira passar como parâmetro ou encapsular em módulo. // ruim let counter = 0; // bom function increment(value){ return value + 1; } |
| Como organizar arquivos JS grandes? | Separe por responsabilidade: serviços, utilidades, componentes. services/userService.js components/UserCard.js utils/format.js |
| Qual é a prática com callbacks? | Use nomes descritivos e evite callbacks aninhados demais. function fetchData(callback){ ... } fetchData(handleResponse); |
| Como lidar com funções assíncronas? | Prefira async/await em vez de callbacks aninhados. async function getData(){ const data = await fetch(url); return data.json(); } |
| Como evitar código morto? | Remova funções, variáveis e imports que não são usados. |
| Qual é a regra sobre try/catch? | Use apenas onde necessário e trate o erro adequadamente. try { readFile(); } catch(e){ console.error(e); } |
| Como escrever loops legíveis em JS moderno? | Prefira métodos de array ao invés de for clássico. users.forEach(u => console.log(u.name)); |
| Como nomear classes? | Nome substantivo, singular, claro sobre responsabilidade. class UserRepository { ... } |
| Como lidar com funções muito parecidas? | Evite duplicação; extraia helpers reutilizáveis. function formatDate(date){ ... } function formatTime(date){ ... } |
| Como evitar funções com muitos if/else? | Prefira early return ou objetos para mapear comportamento. const actions = { admin: () => console.log('admin'), user: () => console.log('user') }; actions[role](); |
| O que significa SRP (Single Responsibility Principle)? | Uma função ou classe deve ter apenas uma responsabilidade. function processUser(user){ validateUser(user); saveUser(user); sendEmail(user); } |
| O que significa OCP (Open Closed Principle)? | Código deve ser aberto para extensão e fechado para modificação. function calculateDiscount(user){ if(user.type === "premium") return 0.2; if(user.type === "normal") return 0.1; } |
| O que significa DRY (Don't Repeat Yourself)? | Não repita código, reutilize funções. // ruim price = price * 0.9 total = total * 0.9 // bom function applyDiscount(value){ return value * 0.9 } |
| Como evitar duplicação de lógica? | Extraindo funções reutilizáveis. function formatPrice(price){ return `$${price.toFixed(2)}` } |
| O que é KISS (Keep It Simple, Stupid)? | Prefira soluções simples ao invés de complexas. // ruim let result = numbers.reduce((a,b)=>a+b,0) // simples let result = 0 for(let n of numbers){ result += n } |
| Como evitar aninhamento profundo? | Como evitar aninhamento profundo? function process(user){ if(!user) return if(!user.active) return console.log("processando") } |
| Qual é a boa prática com parâmetros booleanos? | Evitar, pois tornam funções ambíguas. // ruim function createUser(name, isAdmin){} // melhor function createAdmin(name){} function createNormalUser(name){} |
| Como melhorar legibilidade de condições? | Extraindo para variáveis. const isEligible = user.age > 18 && user.active && !user.banned if(isEligible){ ... } |
| Como evitar switch muito grande? | Usar objetos de mapeamento. const handlers = { admin: () => console.log("admin"), user: () => console.log("user") } handlers[type]() |
| Como evitar números mágicos em loops? | Usar constantes. const MAX_RETRIES = 3 for(let i = 0; i < MAX_RETRIES; i++){ retry() } |
| Como melhorar leitura de transformações de array? | Como melhorar leitura de transformações de array? const names = users.map(u => u.name) |
| Como filtrar dados de forma limpa? | Como filtrar dados de forma limpa? const activeUsers = users.filter(u => u.active) |
| Como evitar loops complexos? | Encadeando métodos. const names = users .filter(u => u.active) .map(u => u.name) |
| Como melhorar clareza ao procurar item em array? | Usando find. const user = users.find(u => u.id === 10) |
| Como verificar existência em array? | Como verificar existência em array? const hasAdmin = users.some(u => u.role === "admin") |
| Como verificar se todos elementos atendem condição? | Usando every. const allActive = users.every(u => u.active) |
| Como reduzir array em valor único? | Como reduzir array em valor único? const total = prices.reduce((sum,p)=>sum+p,0) |
| Como evitar mutação de arrays? | Criar novo array. const newArray = [...oldArray, 5] |
| Como remover duplicatas de forma limpa? | Como remover duplicatas de forma limpa? const unique = [...new Set(numbers)] |
| Como melhorar legibilidade em objetos complexos? | Usar destructuring. const {name, age} = user |
| O que é refatoração? | Melhorar o código sem mudar o comportamento. // antes function calc(a,b){return a+b} // depois function sum(a,b){ return a + b } |
| Quando refatorar código? | Sempre que ele estiver difícil de entender ou duplicado. |
| Como melhorar nomes de função durante refatoração? | Usar nomes que expliquem claramente a intenção. // ruim function run() // bom function processPayment() |
| Como reduzir tamanho de funções? | Extraindo partes em funções auxiliares. function createOrder(order){ validate(order) save(order) } |
| O que é código legível? | Código que outro desenvolvedor entende sem precisar de explicação. |
| Como melhorar legibilidade de condicionais? | Como melhorar legibilidade de condicionais? function isAdult(user){ return user.age >= 18 } |
| Qual é o problema de funções gigantes? | Elas são difíceis de entender, testar e manter. |
| Como melhorar leitura de cálculos? | Usar variáveis intermediárias. const tax = price * 0.1 const total = price + tax |
| Como evitar dependência escondida? | Passando dependências como parâmetros. function calculateTotal(price, taxRate){ return price * taxRate } |
| Qual é o problema de comentários demais? | Geralmente indicam que o código está confuso. |
| Por que preferir async/await? | Porque melhora legibilidade comparado a .then(). const data = await fetch(url) |
| Como tratar erro em async? | try{ const data = await fetch(url) }catch(err){ console.error(err) } |
| Como evitar código assíncrono confuso? | Quebrar em funções menores. |
| Como nomear funções async? | Use verbos claros. async function fetchUsers(){} |
| Como evitar múltiplos awaits em sequência? | const [users,posts] = await Promise.all([ getUsers(), getPosts() ]) |
| Como organizar projeto JS? | Separar responsabilidades. controllers services utils models |
| Qual é o objetivo de módulos? | Dividir código em partes independentes. |
| Como exportar funções? | export function sum(a,b){ return a + b } |
| Como importar módulos? | import {sum} from "./math.js" |
| Por que dividir código em arquivos pequenos? | Facilita manutenção e leitura. |
| O que é teste unitário? | Teste de uma pequena unidade de código. |
| O que um bom teste deve ter? | previsível simples independente |
| Exemplo simples de teste. | function sum(a,b){ return a + b } console.assert(sum(2,2) === 4) |
| Por que testes ajudam no Clean Code? | Permitem refatorar sem medo. |
| Como nomear testes? | should_return_total_price |
| O que significa YAGNI? | ou Aren’t Gonna Need It Não implemente coisas desnecessárias. |
| O que evitar em código? | duplicação complexidade nomes ruins |
| O que é código expressivo? | Código que explica a intenção. |
| Como melhorar leitura de lógica? | const isValid = user.active && user.age > 18 |
| Qual é o problema de variáveis genéricas? | let data let thing Não explicam o que representam. |
| O que entrevistadores buscam em Clean Code? | nomes claros funções pequenas lógica simples |
| Qual erro comum em entrevistas? | Funções gigantes. |
| Como impressionar em entrevista? | Explicando o raciocínio. |
| Explicando o raciocínio. | for(const user of users){ console.log(user.name) } |
| Como deixar código mais declarativo? | const activeUsers = users.filter(u => u.active) |
| O que é código declarativo? | Descreve o que fazer, não como fazer. |
| Como evitar bugs comuns? | Usando testes e validações. |
| O que significa código sustentável? | O que significa código sustentável? |
| Qual é a essência do Clean Code? | Código que humanos conseguem entender facilmente. |