Skip to content
This repository

Two new [br] translations. #328

Merged
merged 7 commits into from about 1 month ago

2 participants

aramisf Gabor Szabo
This page is out of date. Refresh to see the latest.
4  sites/br/pages/aspas-interpolacao-e-strings-escapadas.tt
@@ -83,8 +83,8 @@ correio eletrônico precisam de um pouco mais atenção.
83 83
 Em aspas simples <hl>@</hl> não interpola.
84 84
 
85 85
 Em aspas duplas esse código gera um erro:
86  
-<a href="/global-symbol-requires-explicit-package-name">Global symbol "@bar"
87  
-requires explicit package name at ... line ...</a> (em inglês por enquanto)
  86
+<a href="/simbolo-global-requer-nome-de-pacote-explicito">Global symbol "@bar"
  87
+requires explicit package name at ... line ...</a>
88 88
 
89 89
 e um alerta:
90 90
 <b>Possible unintended interpolation of @bar in string at ... line ...</b>
2  sites/br/pages/conversao-automatica-entre-valores.tt
@@ -113,7 +113,7 @@ Este é o aviso que você recebe quando o perl está tentando converter um texto
113 113
 em um número e a conversão não é perfeita.
114 114
 
115 115
 Existe ainda uma série de outros avisos e erros comuns em Perl.
116  
-Por exemplo <a href="http://perlmaven.com/global-symbol-requires-explicit-package-name">Global symbol requires explicit package name</a>
  116
+Por exemplo <a href="/simbolo-global-requer-nome-de-pacote-explicito">Global symbol requires explicit package name</a>
117 117
 e <a href="/uso-de-valor-nao-inicializado">Use of uninitialized value</a>.
118 118
 
119 119
 <h2>Como evitar os avisos?</h2>
2  sites/br/pages/escopo-das-variaveis-em-perl.tt
@@ -42,7 +42,7 @@ No interior do bloco anônimo (formado pelo par de chaves <hl>{}</hl>), primeiro
42 42
 chamada <hl>$email</hl>. Esta variável existe a partir da linha de sua declaração até o final do bloco. Então isso significa
43 43
 que a linha logo após o fechamento do bloco <hl>}</hl> precisa ser comentada. Se você remover o <hl>#</hl> da linha contendo
44 44
 <hl># print $email;</hl> e tentar rodar o script, você terá o seguinte erro:
45  
-<a href="/global-symbol-requires-explicit-package-name">Global symbol "$email" requires explicit package name at ...</a>.
  45
+<a href="/simbolo-global-requer-nome-de-pacote-explicito">Global symbol "$email" requires explicit package name at ...</a>.
46 46
 
47 47
 Em outras palavras, o <b>escopo de toda variável declarada com o comando my é o bloco em que se encontra cercado por chaves.</b>
48 48
 
175  sites/br/pages/nome-usado-apenas-uma-vez.tt
... ...
@@ -0,0 +1,175 @@
  1
+=title Nome "main::x" usado apenas uma vez: possível erro em ...
  2
+=timestamp 2014-02-21T00:50:10
  3
+=indexes warnings, strict, possible typo
  4
+=status show
  5
+=original name-used-only-once-possible-typo
  6
+=books beginner_book
  7
+=author szabgab
  8
+=translator aramisf
  9
+=archive 1
  10
+=comments 1
  11
+=social 1
  12
+
  13
+=abstract start
  14
+
  15
+Se você ver este alerta em um script Perl você está com sérios problemas.
  16
+
  17
+=abstract end
  18
+
  19
+<h2>Atribuição para uma variável</h2>
  20
+
  21
+Atribuir algo para uma variável mas nunca usá-la, ou usar uma variável uma
  22
+única vez sem jamais atribuir-lhe valor algum, raramente é algo correto de se
  23
+fazer em um programa.
  24
+
  25
+Talvez o único caso "legítimo" é você ter cometido um erro de digitação e
  26
+acabou ficando com uma variável que é utilizada somente uma vez.
  27
+
  28
+Aqui está um exemplo de código onde nós <b>apenas atribuímos a uma variável</b>:
  29
+
  30
+<code lang="perl">
  31
+use warnings;
  32
+
  33
+$x = 42;
  34
+</code>
  35
+
  36
+Isto vai gerar um alerta como este:
  37
+
  38
+<code>
  39
+Name "main::x" used only once: possible typo at ...
  40
+</code>
  41
+
  42
+Aquele "main::" e a falta do $ podem estar lhe confundindo.
  43
+
  44
+Aquele "main::" está lá porque, por padrão, toda variável no Perl está dentro
  45
+do escopo (ou em inglês: 'namespace') do "main". Existem também outras coisas
  46
+que poderiam ser chamadas de "main::x" e apenas uma delas possui um $ no
  47
+início. Se isso lhe parece um pouco confuso, não se preocupe.
  48
+
  49
+É confuso, mas espero que você não tenha que lidar com isso por um longo
  50
+tempo.
  51
+
  52
+<h2>Buscar apenas o valor</h2>
  53
+
  54
+Se acontecer de você <b>usar uma variável apenas uma vez</b>
  55
+
  56
+<code lang="perl">
  57
+use warnings;
  58
+
  59
+print $x;
  60
+</code>
  61
+
  62
+então você provavelmente vai ter dois alertas:
  63
+
  64
+<code>
  65
+Name "main::x" used only once: possible typo at ...
  66
+Use of uninitialized value $x in print at ...
  67
+</code>
  68
+
  69
+Um deles nós estamos discutindo agora, o outro é discutido em
  70
+<a href="/uso-de-valor-nao-inicializado">Uso de valor não inicializado</a>.
  71
+
  72
+
  73
+<h2>Qual é o erro aí?</h2>
  74
+
  75
+Você pode perguntar.
  76
+
  77
+Só imagine alguém usando uma variável chamada <hl>$l1</hl>. Então, você vem e
  78
+tenta usar a mesma variável, mas você escreve <hl>$ll</hl>.
  79
+Dependendo da fonte que você usa, ambas podem ser muito parecidas.
  80
+
  81
+Ou talvez havia uma variável chamada <hl>$color</hl> mas você é Britânico e
  82
+automaticamente escreve <hl>colour</hl> quando pensa nela.
  83
+
  84
+Ou ainda havia uma variável chamada <hl>$numero_de_errros</hl> e você não
  85
+percebe o erro no nome original da variável e escreve
  86
+<hl>$numero_de_erros</hl>.
  87
+
  88
+Você já pegou a idéia.
  89
+
  90
+Se você tiver sorte, você comete esse erro apenas uma vez, mas caso contrário,
  91
+se você usar a variável incorreta duas vezes, então este alerta
  92
+provavelmente não aparecerá.
  93
+Afinal de contas, se você está usando a mesma variável duas vezes, você
  94
+provavelmente tem uma boa razão para isso.
  95
+
  96
+Então como você pode evitar isso?
  97
+
  98
+Procure evitar variáveis com letras ambíguas e seja bastante cauteloso ao
  99
+digitar os nomes de variáveis.
  100
+
  101
+Se você quiser resolver isso de uma vez por todas, então <b>use strict</b>!
  102
+
  103
+<h2>use strict</h2>
  104
+
  105
+Como você pode ver nos exemplos acima, eu não usei o strict. Se eu estivesse
  106
+usando-o, então ao invés de receber um alerta sobre um possível erro de
  107
+digitação, eu receberia um alerta de erro em tempo de compilação:
  108
+<a href="/simbolo-global-requer-nome-de-pacote-explicito">Símbolo global
  109
+requer nome de pacote explícito</a>.
  110
+
  111
+Isso aconteceria mesmo se você usasse o nome incorreto de variável mais de uma vez.
  112
+
  113
+Então, é claro que existem pessoas que imediatamente escreveriam "my" na
  114
+frente da variável incorreta, mas você não é uma dessas pessoas, é? Você
  115
+pensaria no problema e procuraria até encontrar o nome da verdadeira variável.
  116
+
  117
+A forma mais comum de ver esse alerta é se você não estiver usando o
  118
+<b>strict</b>.
  119
+
  120
+Então você está em sérios apuros.
  121
+
  122
+<h2>Outros casos usando o strict</h2>
  123
+
  124
+Como os comentaristas GlitchMr e Anonymous apontaram, existem alguns outros
  125
+casos:
  126
+
  127
+Este código, também gera o alerta
  128
+
  129
+<code lang="perl">
  130
+use strict;
  131
+use warnings;
  132
+
  133
+$main::x = 23;
  134
+</code>
  135
+
  136
+O alerta é: <b>Name "main::x" used only once: possible typo ...</b>
  137
+
  138
+Aqui ao menos está claro de onde aquele 'main' é proveniente, ou no próximo
  139
+exemplo, de onde o Mister vem.
  140
+(dica: 'main' e 'Mister' são ambos nomes de pacotes. Se você estiver
  141
+interessado, você pode ver outra <a
  142
+href="/simbolo-global-requer-nome-de-pacote-explicito">mensagem de erro,
  143
+envolvendo nomes de pacotes perdidos</a>.)
  144
+No próximo exemplo, o nome do pacote é 'Mister'.
  145
+
  146
+<code lang="perl">
  147
+use strict;
  148
+use warnings;
  149
+
  150
+$Mister::x = 23;
  151
+</code>
  152
+
  153
+O alerta é <b>Name "Mister::x" used only once: possible typo ...</b>.
  154
+
  155
+O exemplo a seguir também gera o aviso. Duas vezes:
  156
+
  157
+<code lang="perl">
  158
+use strict;
  159
+use warnings;
  160
+
  161
+use List::Util qw/reduce/;
  162
+print reduce { $a * $b } 1..6;
  163
+</code>
  164
+
  165
+<code>
  166
+Name "main::a" used only once: possible typo at ...
  167
+Name "main::b" used only once: possible typo at ...
  168
+</code>
  169
+
  170
+Isso acontece porque <hl>$a</hl> e <hl>b</hl> são variáveis especiais usadas
  171
+na função <b>sort</b> do Perl, então você não precisa declara-las, mas você as
  172
+está usando apenas uma vez neste código.
  173
+(Na verdade não é claro para mim porque isto gera os alertas, enquanto o mesmo
  174
+código usando o <b>sort</b> não o faz, mas os <a
  175
+href="http://www.perlmonks.org/?node_id=1021888">Perl Monks</a> talvez saibam.
193  sites/br/pages/simbolo-global-requer-nome-de-pacote-explicito.tt
... ...
@@ -0,0 +1,193 @@
  1
+=title Símbolo Global requer nome explícito de pacote
  2
+=timestamp 2014-02-13T02:00:00
  3
+=indexes strict, my, package, global symbol
  4
+=status show
  5
+=original global-symbol-requires-explicit-package-name
  6
+=books beginner_book
  7
+=author szabgab
  8
+=translator aramisf
  9
+=index 1
  10
+=archive 1
  11
+=feed 1
  12
+=comments 1
  13
+=social 1
  14
+
  15
+=abstract start
  16
+
  17
+<b>Global symbol requires explicit package name</b> é uma mensagem de erro
  18
+comum do Perl, e na minha humilde opinião, bastante enganosa. Ao menos para
  19
+iniciantes.
  20
+
  21
+A tradução rápida para isto seria "Você precisa declarar a variável usando
  22
+<b>my</b>."
  23
+
  24
+=abstract end
  25
+
  26
+<h2>O exemplo mais simples</h2>
  27
+
  28
+<code lang="perl">
  29
+use strict;
  30
+use warnings;
  31
+
  32
+$x = 42;
  33
+</code>
  34
+
  35
+E o erro é
  36
+
  37
+<code>
  38
+Global symbol "$x" requires explicit package name at ...
  39
+</code>
  40
+
  41
+Apesar da mensagem de erro estar correta, ela é de pouca utilidade para o
  42
+programador Perl iniciante, que provavelmente não aprendeu ainda o que é um
  43
+pacote.
  44
+Tampouco sabem o que pode ser mais explícito que $x
  45
+
  46
+Este erro é gerado pelo <b>use strict</b>.
  47
+
  48
+A explicação na documentação é:
  49
+<i>
  50
+Isto gera um erro em tempo de compilação se você acessar uma variável que não
  51
+foi declarada através de "our" ou "use vars", ou ainda, que não foi localizada
  52
+através do "my()", ou que não foi totalmente qualificada.
  53
+</i>
  54
+
  55
+Com sorte, o programador iniciante vai iniciar todos os seus programas com
  56
+<b>use strict</b>, e provavelmente aprenderá sobre <b>my</b> muito antes de
  57
+quaisquer outras possibilidades.
  58
+
  59
+Não sei se o texto corrente pode e deveria ser modificado no Perl. Este não é
  60
+o objetivo deste texto. O objetivo é ajudar os iniciantes a entender em sua
  61
+própria linguagem o que esta mensagem de erro significa.
  62
+
  63
+Para eliminar a mensagem de erro acima, é necessário escrever:
  64
+
  65
+<code lang="perl">
  66
+use strict;
  67
+use warnings;
  68
+
  69
+my $x = 42;
  70
+</code>
  71
+
  72
+Ou seja, é preciso <b>declarar a variável usando my antes de sua primeira
  73
+utilização</b>.
  74
+
  75
+<h2>A solução ruim</h2>
  76
+
  77
+A outra "solução" é remover o <b>strict</b>:
  78
+
  79
+<code lang="perl">
  80
+#use strict;
  81
+use warnings;
  82
+
  83
+$x = 23;
  84
+</code>
  85
+
  86
+Isso funcionaria mas este código vai gerar um aviso do tipo:
  87
+<a href="/name-used-only-once-possible-typo">Name "main::x" used only once: possible typo at ...</a>
  88
+
  89
+Em qualquer caso, você não dirigiria um carro sem usar o cinto de segurança,
  90
+dirigiria?
  91
+
  92
+<h2>Exemplo 2: escopo</h2>
  93
+
  94
+Outro caso que vejo com frequência entre iniciantes parece com isto:
  95
+
  96
+<code lang="perl">
  97
+use strict;
  98
+use warnings;
  99
+
  100
+my $x = 1;
  101
+
  102
+if ($x) {
  103
+my $y = 2;
  104
+}
  105
+
  106
+print $y;
  107
+</code>
  108
+
  109
+O erro que obtemos é o mesmo mostrado acima:
  110
+
  111
+<code>
  112
+Global symbol "$y" requires explicit package name at ...
  113
+</code>
  114
+
  115
+o que é surpreendente para muitas pessoas. Especialmente quando elas começam a
  116
+programar.
  117
+Afinal de contas, elas declararam <hl>$y</hl> usando <hl>my</hl>.
  118
+
  119
+Primeiro, aí está um pequeno problema visual. Falta a identação de <hl>my $y =
  120
+2;</hl>. Se estivesse identado com alguns espaços ou um tab à direita, como no
  121
+próximo exemplo, a fonte do problema talvez seria mais óbvia:
  122
+
  123
+<code lang="perl">
  124
+use strict;
  125
+use warnings;
  126
+
  127
+my $x = 1;
  128
+
  129
+if ($x) {
  130
+    my $y = 2;
  131
+}
  132
+
  133
+print $y;
  134
+</code>
  135
+
  136
+O problema é que a variável <hl>$y</hl> está declarada dentro do bloco (o par
  137
+de chaves), o que significa que ela não existe fora deste bloco.
  138
+Isto é chamado <a href="/scope-of-variables-in-perl">o <b>escopo</b> da
  139
+variável</a>.
  140
+
  141
+Toda idéia do <b>escopo</b> é diferente entre as principais linguagens de
  142
+programação.
  143
+Em Perl, um bloco formado por chaves cria um escopo.
  144
+O que está declarado dentro, usando <hl>my</hl> não será acessível fora do
  145
+bloco.
  146
+
  147
+(A propósito, o <hl>$x = 1</hl> está lá apenas para ter uma condição
  148
+aparentemente legítima que cria o escopo. Em outras palavras, a condição
  149
+<hl>if ($x) {</hl> está lá para fazer o exemplo parecer real.)
  150
+
  151
+A solução é chamar o <hl>print</hl> dentro do bloco:
  152
+
  153
+<code lang="perl">
  154
+use strict;
  155
+use warnings;
  156
+
  157
+my $x = 1;
  158
+
  159
+if ($x) {
  160
+    my $y = 2;
  161
+    print $y;
  162
+}
  163
+</code>
  164
+
  165
+ou declarar a variável fora do bloco (e não dentro!):
  166
+
  167
+<code lang="perl">
  168
+use strict;
  169
+use warnings;
  170
+
  171
+my $x = 1;
  172
+my $y;
  173
+
  174
+if ($x) {
  175
+    $y = 2;
  176
+}
  177
+
  178
+print $y;
  179
+</code>
  180
+
  181
+O caminho que você escolher depende da tarefa em questão. Estas são apenas as
  182
+possíveis soluções sintaticamente corretas.
  183
+
  184
+Claro, se esquecermos de remover o <hl>my</hl> de dentro do bloco, ou se
  185
+<hl>$x</hl> for falso, então obteremos um aviso <a
  186
+href="/use-of-uninitialized-value">Uso de valor não iniciado</a>.
  187
+
  188
+<h2>Os outros meios</h2>
  189
+
  190
+As explicações sobre o que o <hl>our</hl> e o <hl>use vars</hl> fazem, ou como
  191
+podemos qualificar completamente o nome de uma variável ficam para outro
  192
+artigo.
  193
+
Commit_comment_tip

Tip: You can add notes to lines in a file. Hover to the left of a line to make a note

Something went wrong with that request. Please try again.