Skip to content

Commit 585e848

Browse files
committed
Tutorials - Translation PT-BR - Annotations
1 parent 14db0cc commit 585e848

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed

pt-br/tutorials/tour/annotations.md

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
---
2+
layout: tutorial
3+
title: Anotações
4+
5+
disqus: true
6+
7+
tutorial: scala-tour
8+
num: 31
9+
tutorial-next: default-parameter-values
10+
tutorial-previous: automatic-closures
11+
language: pt-br
12+
---
13+
14+
Anotações associam meta-informação com definições.
15+
16+
Uma cláusula de anotação simples tem a forma `@C` ou `@C(a1,..., an)`. Aqui, `C` é um construtor de uma classe `C`, que deve estar em conformidade com a classe `scala.Annotation`. Todos os argumentos de construtor fornecidos `a1, .., an` devem ser expressões constantes (isto é, expressões em literais numéricos, strings, classe, enumerações Java e matrizes uni-dimensionais).
17+
18+
Uma cláusula de anotação se aplica à primeira definição ou declaração que a segue. Mais de uma cláusula de anotação pode preceder uma definição e uma declaração. Não importa a ordem em que essas cláusulas são declaradas.
19+
20+
O significado das cláusulas de anotação é _implementação-dependente_. Na plataforma Java, as seguintes anotações Scala têm um significado padrão.
21+
22+
| Scala | Java |
23+
| ------ | ------ |
24+
| [`scala.SerialVersionUID`](http://www.scala-lang.org/api/2.9.1/scala/SerialVersionUID.html) | [`serialVersionUID`](http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html#navbar_bottom) (field) |
25+
| [`scala.cloneable`](http://www.scala-lang.org/api/2.9.1/scala/cloneable.html) | [`java.lang.Cloneable`](http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Cloneable.html) |
26+
| [`scala.deprecated`](http://www.scala-lang.org/api/2.9.1/scala/deprecated.html) | [`java.lang.Deprecated`](http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Deprecated.html) |
27+
| [`scala.inline`](http://www.scala-lang.org/api/2.9.1/scala/inline.html) (desde 2.6.0) | não há equivalente |
28+
| [`scala.native`](http://www.scala-lang.org/api/2.9.1/scala/native.html) (desde 2.6.0) | [`native`](http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html) (keyword) |
29+
| [`scala.remote`](http://www.scala-lang.org/api/2.9.1/scala/remote.html) | [`java.rmi.Remote`](http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/Remote.html) |
30+
| [`scala.serializable`](http://www.scala-lang.org/api/2.9.1/index.html#scala.annotation.serializable) | [`java.io.Serializable`](http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html) |
31+
| [`scala.throws`](http://www.scala-lang.org/api/2.9.1/scala/throws.html) | [`throws`](http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html) (keyword) |
32+
| [`scala.transient`](http://www.scala-lang.org/api/2.9.1/scala/transient.html) | [`transient`](http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html) (keyword) |
33+
| [`scala.unchecked`](http://www.scala-lang.org/api/2.9.1/scala/unchecked.html) (since 2.4.0) | não há equivalente |
34+
| [`scala.volatile`](http://www.scala-lang.org/api/2.9.1/scala/volatile.html) | [`volatile`](http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html) (keyword) |
35+
| [`scala.reflect.BeanProperty`](http://www.scala-lang.org/api/2.9.1/scala/reflect/BeanProperty.html) | [`Design pattern`](http://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html) |
36+
37+
No exemplo a seguir, adicionamos a anotação `throws` à definição do método `read` para capturar a exceção lançada no código Java.
38+
39+
> Um compilador Java verifica se um programa contém manipuladores para [exceções verificadas](http://docs.oracle.com/javase/specs/jls/se5.0/html/exceptions.html) analisando quais exceções verificadas podem resultar da execução de um método ou construtor. Para cada exceção verificada que é um resultado possível, a cláusula **throws** para o método ou construtor _deve_ mencionar a classe dessa exceção ou uma das superclasses da classe dessa exceção.
40+
> Como Scala não tem exceções verificadas, os métodos Scala _devem_ ser anotados com uma ou mais anotações `throws`, de forma que o código Java possa capturar exceções lançadas por um método Scala.
41+
42+
43+
Exemplo de classe Scala que lança uma exceção do tipo `IOException`:
44+
45+
```
46+
package examples
47+
import java.io._
48+
class Reader(fname: String) {
49+
private val in = new BufferedReader(new FileReader(fname))
50+
@throws(classOf[IOException])
51+
def read() = in.read()
52+
}
53+
```
54+
55+
O programa Java a seguir imprime o conteúdo do arquivo cujo nome é passado como o primeiro argumento para o método `main`.
56+
57+
```
58+
package test;
59+
import examples.Reader; // Classe Scala acima declarada!!
60+
public class AnnotaTest {
61+
public static void main(String[] args) {
62+
try {
63+
Reader in = new Reader(args[0]);
64+
int c;
65+
while ((c = in.read()) != -1) {
66+
System.out.print((char) c);
67+
}
68+
} catch (java.io.IOException e) {
69+
System.out.println(e.getMessage());
70+
}
71+
}
72+
}
73+
```
74+
75+
Se comentar a anotação `throws` na classe `Reader` o complidor produz a seguinte mensagem de erro ao compilar o programa principal Java:
76+
77+
```
78+
Main.java:11: exception java.io.IOException is never thrown in body of
79+
corresponding try statement
80+
} catch (java.io.IOException e) {
81+
^
82+
1 error
83+
```
84+
85+
### Anotações Java ###
86+
87+
**Nota:** Certifique-se de usar a opção `-target: jvm-1.5` com anotações Java.
88+
89+
Java 1.5 introduziu metadados definidos pelo usuário na forma de [anotações](http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html). Uma característica chave das anotações é que elas dependem da especificação de pares no formato nome-valor para inicializar seus elementos. Por exemplo, se precisamos de uma anotação para rastrear a origem de alguma classe, podemos defini-la como:
90+
91+
```
92+
@interface Source {
93+
public String URL();
94+
public String mail();
95+
}
96+
```
97+
98+
O uso da anotação Source fica da seguinte forma
99+
100+
```
101+
@Source(URL = "http://coders.com/",
102+
mail = "support@coders.com")
103+
public class MyClass extends HisClass ...
104+
```
105+
106+
A uso de anotações em Scala parece uma invocação de construtor, para instanciar uma anotação Java é preciso usar argumentos nomeados:
107+
108+
```
109+
@Source(URL = "http://coders.com/",
110+
mail = "support@coders.com")
111+
class MyScalaClass ...
112+
```
113+
114+
Esta sintaxe é bastante tediosa, se a anotação contiver apenas um parâmetro (sem valor padrão), por convenção, se o nome for especificado como `value`, ele pode ser aplicado em Java usando uma sintaxe semelhante a Scala, ou seja parecido com a invocação de um construtor:
115+
116+
```
117+
@interface SourceURL {
118+
public String value();
119+
public String mail() default "";
120+
}
121+
```
122+
123+
O uso da anotação SourceURL fica da seguinte forma
124+
125+
```
126+
@SourceURL("http://coders.com/")
127+
public class MyClass extends HisClass ...
128+
```
129+
130+
Neste caso, a Scala oferece a mesma possibilidade
131+
132+
```
133+
@SourceURL("http://coders.com/")
134+
class MyScalaClass ...
135+
```
136+
137+
O elemento `mail` foi especificado com um valor padrão, portanto não precisamos fornecer explicitamente um valor para ele. No entanto, se precisarmos fazer isso, não podemos misturar e combinar os dois estilos em Java:
138+
139+
```
140+
@SourceURL(value = "http://coders.com/",
141+
mail = "support@coders.com")
142+
public class MyClass extends HisClass ...
143+
```
144+
145+
A Scala proporciona mais flexibilidade a respeito disso:
146+
147+
```
148+
@SourceURL("http://coders.com/",
149+
mail = "support@coders.com")
150+
class MyScalaClass ...
151+
```

0 commit comments

Comments
 (0)