|
| 1 | +--- |
| 2 | +title: O módulo embutido console |
| 3 | +date: '2011-08-26T10:08:50.000Z' |
| 4 | +tags: |
| 5 | + - core |
| 6 | + - cli |
| 7 | + - globals |
| 8 | +difficulty: 1 |
| 9 | +layout: knowledge-post.hbs |
| 10 | +--- |
| 11 | + |
| 12 | +Qualquer pessoa familiarizada com o desenvolvimento voltado para navegadores provavelmente já usou `console.log` para fins de debug - O Node.js implementou um objeto `console` próprio para imitar grande parte desta experiência. Porém, como nós estamos trabalhado do lado do servidor, ela funciona como uma camada acima do `stdout`, `stdin` e `stderr` em vez do console de debug do navegador. |
| 13 | + |
| 14 | +Por conta deste paralelo com o navegador, o módulo `console` se tornou a principal API para grande parte da funcionalidade de "output" do Node. O mais simples é o `console.log()`. |
| 15 | + |
| 16 | +```javascript |
| 17 | +console.log('Olá, pessoal!'); |
| 18 | +console.log('Este script é:', __filename); |
| 19 | +console.log(__filename, process.title, process.argv); |
| 20 | +``` |
| 21 | + |
| 22 | +O primeiro exemplo mais simples, apenas exibe a string fornecida no `stdout`. Também há a possibilidade de exibir o conteúdo das variáveis, como demonstrado no exemplo #2; e além disso, `console.dir()` é chamado em todos os objetos que são passados como argumentos, enumerando suas propriedades. |
| 23 | + |
| 24 | +DICA VALIOSA NODE.JS: |
| 25 | +`console.log()` aceita três caracteres para formatação, `%s`, `%d`, and `%j`. Estes caracteres de formatação podem ser usados para exibir strings, dígitos, ou dados formatos como JSON - A ordem dos caracteres precisa corresponder com a ordem dos argumentos. |
| 26 | + |
| 27 | +```javascript |
| 28 | +const name = 'Harry'; |
| 29 | +const number = 17; |
| 30 | +const myObj = { |
| 31 | + propOne: 'alguma coisa', |
| 32 | + propTwo: 'outras coisas' |
| 33 | +}; |
| 34 | +console.log('Meu nome é %s, meu número é %d, e o objeto é %j', name, number, myObj); |
| 35 | +``` |
| 36 | + |
| 37 | +Uma pegadinha com a função `console.log`, e todas as funções que dependem dela, é que ela possui um "buffer" para a sua saída. Portanto se o processo é interrompido abruptamente, seja por meio de algum erro ou através do `process.exit()`, é bem possível que o conteúdo no buffer nunca seja definitivamente enviado para a tela. Isso pode causar certa frustração, portanto fique atento para esta situação. |
| 38 | + |
| 39 | +`console.error()` funciona do mesmo modo que `console.log`, exceto pelo fato que o conteúdo enviado para `stderr` em vez de `stdout`. Isso é, na realidade, uma diferença extremamente importante, pois o conteúdo enviado para `stderr` é sempre escrito de forma síncrona. Qualquer uso de `console.error`, ou qualquer outra função no core do Node.js que escreva para `stderr`, irá bloquear o processo até que todo o conteúdo seja escrito. Isso é útil para mensagens de erro - você as recebe no momento que elas acontecem - porém se usado de forma indiscriminada, pode tornar o processo do Node.js bastante lento. |
| 40 | + |
| 41 | +`console.dir()`, como mencionado acima, é um "alias" para `util.inspect()` - é uma função usada para enumerar as propriedades de um objeto. [Leia mais](/pt-br/knowledge/getting-started/how-to-use-util-inspect/) |
| 42 | + |
| 43 | +Isso cobre o básico da funcionalidade do módulo `console`, porém há certos metódos que merecem ser mencionados também. Primeiro, o módulo `console` permite marcar o tempo através das funções `console.time()` e `console.timeEnd()`. Aqui um exemplo: |
| 44 | + |
| 45 | +```javascript |
| 46 | +console.time('timer'); |
| 47 | +var string = ''; |
| 48 | +for (var i = 0; i < 300; i++) { |
| 49 | + (function (i) { |
| 50 | + string += 'aaaa' + i.toString(); |
| 51 | + })(i); |
| 52 | +} |
| 53 | +console.timeEnd('timer'); |
| 54 | +``` |
| 55 | + |
| 56 | +Isto irá determinar a quantidade de tempo necessária para executar as ações entre as chamadas de `console.time` e `console.timeEnd`. |
| 57 | + |
| 58 | +Uma última função que merece ser mencionada é `console.trace()`, que exibe o conteúdo da pilha (stack trace) do momento que é chamado, sem ocasionar um erro. Isso ocasionalmente pode vir a ser útil caso você queira descobrir de onde determinada função com erro foi chamada. |
0 commit comments