Skip to content

Commit 74cb0ad

Browse files
Added syntax highlighting in examples (#438)
1 parent 2e98ee0 commit 74cb0ad

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

chapters/10-modulos.md

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
Capítulo 10
23

34
# Módulos
@@ -64,7 +65,7 @@ Funções são o único construtor em JavaScript que criam um novo escopo. Entã
6465

6566
Considere este módulo trivial que associa nomes com o número dos dias da semana retornado pelo método `getDay` de um objeto *date*.
6667

67-
```
68+
```javascript
6869
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
6970
"Thursday", "Friday", "Saturday"];
7071
function dayName(number) {
@@ -79,7 +80,7 @@ A função `dayName` é parte desta interface, mas a variável `names` não. Nó
7980

8081
Podemos fazer isso:
8182

82-
```
83+
```javascript
8384
var dayName = function() {
8485
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
8586
"Thursday", "Friday", "Saturday"];
@@ -96,7 +97,7 @@ Agora `names` é uma variável local dentro de uma função (anônima). Esta fun
9697

9798
Um padrão similar é usado para isolar inteiramente código do mundo exterior. O módulo abaixo tem algum efeito, mas não fornece qualquer valor para outros módulos usarem.
9899

99-
```
100+
```javascript
100101
(function() {
101102
function square(x) { return x * x; }
102103
var hundred = 100;
@@ -114,7 +115,7 @@ Por que a função namespace está encapsulada em uma par de parênteses? Isso t
114115

115116
Agora imagine que o módulo dia-da-semana (*day-of-the-week*) precise fornecer não uma, mas duas funções, porque nós adicionamos uma função `dayNumber` que vai de um nome para um número. Nós podemos mais simplesmente retornar a função, mas devemos encapsular as duas funções em um objeto.
116117

117-
```
118+
```javascript
118119
var weekDay = function() {
119120
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
120121
"Thursday", "Friday", "Saturday"];
@@ -130,7 +131,7 @@ console.log(weekDay.name(weekDay.number("Sunday")));
130131

131132
Para módulos maiores, juntar todos os módulos exportados em um objeto no fim da função se torna algo incômodo, e geralmente requer que façamos algo repetido. Isso pode ser melhorado declarando um objeto, usualmente nomeado `exports`, e adicionando propriedades a este objeto sempre que nós definirmos algo que precise ser exportado. Este objeto pode então ser retornado, ou aceito como um parâmetro armazenado em algum lugar pelo código exterior ao módulo.
132133

133-
```
134+
```javascript
134135
(function(exports) {
135136
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
136137
"Thursday", "Friday", "Saturday"];
@@ -167,7 +168,7 @@ Existem várias formas de se pegar dados (uma `string` de código) e rodá-los n
167168

168169
A mais óbvia maneira é o operador padrão especial `eval`, que vai executar a string de código no escopo atual. Isso usualmente é uma ideia muito ruim, porque quebra algumas propriedades que escopos normalmente tem (ser isolado do mundo externo é a mais notável).
169170

170-
```
171+
```javascript
171172
function evalAndReturnX(code) {
172173
eval(code);
173174
return x;
@@ -179,7 +180,7 @@ console.log(evalAndReturnX("var x = 2"));
179180

180181
A melhor forma de converter dados dentro do programa é usar uma função construtora. Ela recebe como argumentos uma lista de nomes de argumentos separados por vírgula, e então uma string contendo o corpo da função.
181182

182-
```
183+
```javascript
183184
var plusOne = new Function("n", "return n + 1;");
184185
console.log(plusOne(4));
185186
// → 5
@@ -191,7 +192,7 @@ Isso é precisamente o que precisamos - podemos encapsular o código para um mó
191192

192193
Se a nova função construtora, usada pelo nosso módulo de carregamento, encapsula o código em uma função de qualquer forma, nós podemos omitir a função *namespace* encapsuladora atual dos arquivos. Nós também vamos fazer `exports` um argumento à função módulo, então o módulo não precisará de declarar isso. Isso remove um monte de barulho supérfluo do nosso módulo de exemplo:
193194

194-
```
195+
```javascript
195196
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
196197
"Thursday", "Friday", "Saturday"];
197198

@@ -205,7 +206,7 @@ exports.number = function(name) {
205206

206207
Essa é uma implementação mínima de `require`:
207208

208-
```
209+
```javascript
209210
function require(name) {
210211
var code = new Function("exports", readFile(name));
211212
var exports = {};
@@ -219,7 +220,7 @@ console.log(require("weekDay").name(1));
219220

220221
Quando usando este sistema, um módulo tipicamente começa com pequenas declarações de variáveis que carregam os módulos que ele precisa.
221222

222-
```
223+
```javascript
223224
var weekDay = require("weekDay");
224225
var today = require("today");
225226

@@ -234,7 +235,7 @@ O segundo problema é que não é possível para um módulo expor diretamente um
234235

235236
A solução tradicional para isso é fornecer outra variável, `module`, que é um objeto que tem a propriedade `exports`. Essa propriedade inicialmente aponta para o objeto vazio criado por require, mas pode ser sobrescrita com outro valor para exportar algo a mais.
236237

237-
```
238+
```javascript
238239
function require(name) {
239240
if (name in require.cache)
240241
return require.cache[name];
@@ -263,7 +264,7 @@ Outra solução é encapsular seu módulo em uma função, carregar os módulos
263264

264265
Nosso programa trivial com dependências, em AMD, se parece com isso:
265266

266-
```
267+
```javascript
267268
define(["weekDay", "today"], function(weekDay, today) {
268269
console.log(weekDay.name(today.dayNumber()));
269270
});
@@ -273,7 +274,7 @@ A função `define` é o conceito central nessa abordagem. Ela primeiro recebe u
273274

274275
Os módulos que são carregados dessa forma devem conter uma chamada a `define`. O valor usado para sua interface é qualquer valor retornado pela função que é o segundo argumento passado nessa chamada. Aqui está o módulo `weekDay` de novo.
275276

276-
```
277+
```javascript
277278
define([], function() {
278279
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
279280
"Thursday", "Friday", "Saturday"];
@@ -286,7 +287,7 @@ define([], function() {
286287

287288
Para mostrar uma simples implementação de `define`, vamos supor que também temos uma função `backgroundReadFile`, que pega o nome do arquivo e uma função, e vai chamar a função com o conteúdo do arquivo assim que este for carregado.
288289

289-
```
290+
```javascript
290291
function define(depNames, moduleFunction) {
291292
var deps = [], myMod = define.currentModule;
292293

@@ -377,7 +378,7 @@ Existem duas abordagens populares para tais módulos. Uma é chamada "Módulos C
377378

378379
Escreva um simples módulo similar ao módulo `weekDay`, que pode converter os números dos meses (*zero-based*, assim como o tipo `Date`) para nomes, e nomes para números. Dê a este módulo seu próprio namespace, pois ele vai precisar de um array interno com o nome dos meses, mas use JavaScript puro, sem nenhum sistema de carregamento de módulos.
379380

380-
```
381+
```javascript
381382
// Your code here.
382383

383384
console.log(month.name(2));

0 commit comments

Comments
 (0)