Escolar Documentos
Profissional Documentos
Cultura Documentos
<HTML>
<HEAD>
<TITLE> O meu primeiro programa em JavaScript
</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
<html>
<head>
<title>
O Primeiro Script
</title>
<style type="text/css">
p.scriptMessage { font-size : 20; color : blue }
</style>
</title>
<body>
<p> A mensagem seguinte foi gerada por um script <br/> embebido na página corrente </p>
<script type="text/javascript">
document.write("<p class='scriptMessage'> Olá Mundo! </p>");
</script>
</body>
</html>
Comentários
Valores,Variáveis e Literais
Expressões e Operadores
Funções
Instruções
Arrays
Eventos
Objectos
de uma só linha
• // This is a single-line comment.
Exemplo
Exemplos
Inteiros
Ex: 42, 0xFFF, -345.
Literais booleanos
true, false.
Literais floating-point
Ex: 3.1415, -3.1E12, .1e12, 2E-12
Cadeias de caracteres (strings) literais
Ex: "one line \n another line"
Arrays literais
Ex: ["French Roast", "Columbian", "Kona"]
Ex: ["Lion", , "Angel"]
É possível omitir valores do array
Objectos literais colocando vírgulas sem expressão
apresentados mais tarde associada. Essas posições do array
ficam com o valor null
Aritméticos
(de) Strings
(de) Bits
Operadores Afectação
Comparação
Lógicos (booleanos)
Especiais
Operandos não numéricos são convertidos em números usando as regras definidas em Number, com excepção
das situações indicadas em operadores de String
O operador Módulo % módulo retorna o resto da divisão inteira entre dois operandos . Os
operandos são convertidos para valores inteiros
Ex: 12 % 5 retorna 2
Para converter explícitamente uma string (ou outro valor) em número pode
fazer:
var num = Number(valor); // num=Number("23") num = 23
x *= y x=x*y
x /= y x=x/y
x %= y x=x%y
Para além do operador de afectação
básico (=) existem as variantes associadas a x <<= y x = x << y
operadores aritméticos, bit a bit e String,
x >>= y x = x >> y
mostradas na tabela ao lado.
x >>>= y x = x >>> y
x |= y x=x|y
Regras de igualdade
(e desigualdade) entre
operandos
Strict not equal !== Retorna true se os dois operandos forem de valor ou tipo diferente var1 !== "3"
3 !== “3”
Greater than > true se o operando esquerdo for maior que o direito. var2 > var1
Greater than or equal >= true se o operando esquerdo for maior ou igual que o direito. var2 >= var1
var1 >= 3
Less than < true se o operando esquerdo for menor que o direito. var1 < var2
Less than or equal <= true se o operando esquerdo for menor ou igual que o direito. var1 <= var2
s1 <= s2
ISEL 2001/2002 - Programação Ultima actualização:
DEETC - Secção de Programação 20-03-23
Operadores lógicos (booleanos)
Operadores Lógicos são normalmente usados com valores booleanos. Nesse caso geram valores booleanos.
Os operadores && e || podem ter como operandos valores não booleanos e nesse caso retornam um dos
operandos
Em geral, qualquer valor não booleano é convertível para true, à excepção de 0, a string vazia (""), null e
undefined, que são convertíveis para false.
As expressões lógicas são avaliadas o mínimo necessário para obter o resultado, de acordo com as regras:
exp1 && exp2 é imediatamente avaliada para exp1 (se Boolean(exp1)== false), sem necessidade de avaliar exp2
exp1 || exp2 é imediatamente avaliada para exp1 (se Boolean(exp1) == true), sem necessidade de avaliar exp2
&& exp1 && exp2 Retorna exp1 se este poder ser convertido para false. Caso contrário,
(Logical AND) retorna exp2. Na situação normal de exp1 e exp2 serem expressões
booleanas, retorna true se ambas forem true
|| exp1 || exp2 Retorna exp1 se este poder ser convertido para true. Caso contrário,
(Logical OR) retorna exp2. Na situação normal de exp1 e exp2 serem expressões
booleanas, retorna true se pelo menos uma for true
! ! exp Retorna false se exp poder ser convertido para true. Caso contrário
(Logical NOT) retorna true
As variáveis declaradas dentro de uma função, ao contrário das variáveis globais, só podem ser
acedidas dentro da função onde são declaradas.
A definição de uma função consiste na palavra-chave function, seguida pelo seu nome, uma
lista de argumentos - dentro de parêntesis e separados por vírgulas - e as respectivas
instruções, dentro de chavetas.
function square( x) {
return x * x;
Exemplo1 - O quadrado de um número }
function squareRoot( x) {
Exemplo 2 - A raíz quadrada inteira de um número var srx = 1;
while (square(srx) < x) ++srx;
return square(srx) > x ? srx-1 : srx;
}
ISEL 2001/2002 - Programação Ultima actualização:
DEETC - Secção de Programação 20-03-23
Funções (invocação)
Exemplo: a função square definida no slide anterior, poderia ser invocada com o
argumento 5, da seguinte maneira:
Uso
alert( mensagem)
Parâmetros
mensagem – String com a mensagem a afixar
Retorno
A função não retorna nada
alert(“Ganhou!”);
Uso
var stringLida = prompt( mensagem, valorInicial );
Parâmetros
Uso
var res=confirm(mensagem);
Parâmetros
mensagem – string com a mensagem a afixar
Retorno
se o utilizador premiu OK res é true. Se o utilizador premiu Cancel
res é false.
Number("3.25")
Number(value) Converte o valor em número. (ver objecto Number) Number
retorna 3.25
Converte o valor em booleano. ( ver objecto Boolean( 10) retorna
Boolean(value) Boolean
Boolean) true
String( true) retorna
String(value) Converte o valor em string. (ver objecto String) String
"true"
Char Meaning
• Um literal string consiste em 0 ou mais caracteres \b Backspace
delimitados por plicas ‘ ou aspas ". Os delimitadores têm de \f Form feed
ser do mesmo tipo- ambos aspas ou ambos plicas. \n New line
Exemplos: \r Carriage return
\t Tab
"blah"
’blah’ \’ Apostrophe or single quote
"1234" \" Double quote
"one line \n another line"
\\ Backslash character (\)
\XXX The character with the Latin-1 encoding
specified by up to three octal digits
•A um valor do tipo string podem ser aplicados as XXX between 0 and 377. For
example, \251 is the octal sequence for
propriedades e métodos dos objectos String © (copyright) symbol.
\xXX The character with the Latin-1 encoding
• Exemplos: specified by the two hexadecimal digits
XX between 00 and FF. For example, \
var s="abc"; xA9 is the hexadecimal sequence ©
(copyright) symbol.
alert(s.length); // 3
\uXXXX The Unicode character specified by the
four hexadecimal digitsXXXX. For
example, \u00A9 is the Unicode
sequence for © (copyright) symbol.
Os elementos de um array são acedidos através do seu índice (posição) . O primeiro elemento ocupa o
índice 0, o último ocupa o índice length-1.
Um array pode ser criado pela forma alternativa new Array(size) em que size indica o número de
elementos do array. Nesse caso todos os elementos ficam iniciados a null
Ex: var tab=new Array(5); // tab fica a referenciar um array de 5 elementos, todos com o valor null
var dias="";
for (var i=0; i < diasDaSemana.length; ++i)
dias += diasDaSemana[i] + "\n";
alert(dias);
Notas:
• É possível usar mais que uma instrução sempre que aparecer a palavra instrução nas descrições
dos slides seguintes, usando a instrução composta:
•A parte das instruções que aparece dentro dos parêntesis rectos é opcional
•Se for necessário colocar mais que uma instrução nos ramos da instrução if
pode-se usar a instrução composta { instruções ... }
function findAnchor(elem) {
var child=elem.firstChild;
while (child != null) {
if (child.nodeName.toLowerCase() == "a")break;
child = child.nextSibling; // o próximo irmão
}
return child;
}
Descrição
Executa instrução enquanto a avaliação de condição der true
Avalia expressaoInicial antes da primeira avaliação de condição e expressaoFimCiclo no final
de cada ciclo
function quantasPositivas(notas0a20) {
A instrução do..while executa a instrução associada até que expressão_de_condição seja avaliada como false
function getIntValue(min,max) {
var i, lido;
do {
lido=prompt("Introduza um valor inteiro entre "+
min + "e" + max, min);
i= lido-0;
}
while ( isNaN(i) || i < min || i > max);
return i;
}
continue [label]
A instrução continue é usada para reiniciar um ciclo . Numa instrução while é reavaliada a
condição associada. Numa instrução for o ciclo termina sendo avaliada a expressão de final de
ciclo e começa um novo ciclo na avaliação da expressão de condição
Exemplo
o exemplo seguinte mostra um ciclo while com uma instrução continue que executa quando o valor de
i for 3. Assim, n toma, sucessivamente, os valores 1, 3, 7 e 12.
var i = 0;
var n = 0;
while (i++ < 5) {
if (i == 3)
continue;
n += i;
}
return [ expressão ]
return -1;
}
<html>
<body>
<script type="lang/javascript";
var matriz = [
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[ 2, 3, 4, 7, 8, 9, 0, 7, 12, 6],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Ex: procurar um ];
elemento de uma
matriz (array var encontrou=false;
pesquisa:
bidimensional) de for (var i=0; i < matriz.length; ++i) {
inteiros com o for (var j=0; j < matriz[i].length; ++j) {
if ( matriz[i][j] ==0) {
valor 0 encontrou= true;
break pesquisa;
}
}
}
if (encontrou)
document.write( "O valor 0 achado em matriz[" + i +"," + j + "]");
else
document.write("O valor não foi encontrado");
</script>
</body>
</html>
Premir um elemento botão, modificar um elemento texto, ou mover o rato por cima de elemento
âncora são exemplos de eventos. Para o programa reagir a um evento, terão de ser definidos event
handlers, com onClick ou onChange
<a href="http://www.htmlgoodies.com"
onMouseOver="window.status='Go to the Goodies Home Page';return false;"
onMouseOut="window.status='';return false;" >
Click Here to see some good information on HTML
</a>
</HEAD>
<BODY onload="init();">
</HTML>
function init() {
valEdit = document.getElementById("valor");
function squareRoot( x) { squareEdit = document.getElementById("vSquare");
var srx = 1; squareRootEdit= document.getElementById("vSquareRoot");
while (square(srx) < x) }
++srx;
return square(srx) > x ?
srx-1 :
srx;
}
function factorial(n) {
n>0 n*(n-1)! if (n==0) return 1;
n! return n*factorial(n-1);
n=0 1 }
Caso tenha sido atingida a situação em que o resultado é imediato (no caso do factorial quando
n=0, n! é 1 por definição) é retornado o valor correspondente. A esta situação limite chama-se a
condição terminal da recursividade.
Se a condição não tiver sido atingida, aplica-se a expressão que exprime a recursividade (no
caso do factorial n! = n*(n-1)! ). Note-se que é fundamental que cada invocação recursiva esteja
mais perto da condição terminal (convirja), pois é importante que o algoritmo termine! No caso do
factorial isso é óbvio. Em cada chamada, n diminui de uma unidade, logo chega a zero!
O problema é que os dígitos ficam no array por ordem inversa à pretendida. Como é que a recursividade nos
ajuda a resolver o problema?
<HTML>
<BODY>
<textarea id="screen" rows="20" cols="80">
</textarea>
</BODY> página que é usada para mostrar a
</HTML> hierarquia de elementos da página corrente
Propriedade é um valor ou conjunto de valores (array ou objecto) que é elemento constituinte (membro)
do objecto e identificado por um nome.
Ex: document.body
function Ponto(x,y) {
var p = new Object();
p.x = x;
p.y = y;
return p;
}
Método Descrição
toString Retorna uma representação textual do objecto
valueOf Returns o valor primitivo (caso exista) do objecto corrente
Exemplos:
Se p for um ponto definido no slide anterior, então:
Propriedade Descrição
MAX_VALUE The largest representable number.
NaN Special "not a number" value. (também existe como propriedade global)
NEGATIVE_INFINITY Special value representing negative infinity- returned on overflow.
Pode-se converter qualquer valor em valor numérico usando o objecto Number como uma função
LN2 Natural logarithm of 2, ceil Returns the smallest integer greater than or equal to a number.
approximately 0.693. cos Returns the cosine of a number.
exp Returns Enumber, where number is the argument, and E is Euler’s,
LOG10E Base 10 logarithm of E constant, the base of the natural logarithms.
(approximately 0.434).
floor Returns the largest integer less than or equal to a number.
LOG2E Base 2 logarithm of E
(approximately 1.442). log Returns the natural logarithm (base E) of a number.
max Returns the greater of two numbers.
PI Ratio of the circumference min Returns the lesser of two numbers.
of a circle to its diameter,
pow Returns base to the exponent power, that is, base exponent.
approximately 3.14159.
random Returns a pseudo-random number between 0 and 1.
SQRT1_2 equivalently, 1 over the
square root of 2 - round Returns the value of a number rounded to the nearest integer.
approximately 0.707. sin Returns the sine of a number.
sqrt Returns the square root of a number.
SQRT2 Square root of 2,
approximately 1.414. tan Returns the tangent of a number.
Método Descrição
charAt(index) Returns the character at the specified index
charCodeAt(index) Returns a number indicating the Unicode value of the character at the given index
concat(s1,s2,...) Combines the text of two strings and returns a new string
indexOf(str [, firstIdx]) Returns the index within the calling String object of the first occurrence of the specified value, or -1 if not
found
lastIndexOf(str [, firstIdx]) Returns the index within the calling String object of the last occurrence of the specified value, or -1 if not
found
slice(idxStart [, idxEnd]) Extracts a section of a string and returns a new string
split( separator[nSplits]) Splits a String object into an array of strings by separating the string into substrings
substr(idxStart, nChars) Returns the characters in a string beginning at the specified location through the specified number of
characters
substringIidxStart,idxEnd) Returns the characters in a string between two indexes into the string
toLowerCase() Returns the calling string value converted tolowercase
toSource() Returns an object literal representing the specified object. You can use this value to create a new object
A instrução for..in permite iterar sobre todas as propriedades de um objecto. Para cada
propriedade a instrução é executada. Variável tem o nome da propriedade corrente.
object[variável] permite aceder ao valor da propriedade.
Exemplo
function dump_props(obj, obj_name) {
var result = "";
for (var i in obj) {
result += obj_name + "." + i + " = " + obj[i] + "\
n";
}
return result;
}
Para um carro com as propriedades make and model, o resultado podia ser:
car.make = Ford
car.model = Mustang
A instrução with define o objecto onde são procurados por omissão os nomes referidos no
programa
Se um nome existe como propriedade do objecto referido na instrução with englobante então esse
objecto é usado.
Senão, o nome é entendido como o de uma variável local, ou global
var a, x, y; var a, x, y;
var r=10; var r=10;
with (Math) {
a = PI * r * r; a = Math.PI * r * r;
x = r * cos(PI); x = r * Math.cos(Math.PI);
y = r * sin(PI/2); y = r * Math.sin(Math.PI/2);
}
window location
As propriedades e métodos do objecto window
podem ser acedidos sem referir explicitamente o
objecto
• Exs: window.document document document anchors
window.alert("viva!") alert("viva!")
links radio
Excerto da hierarquia de
objectos representantes dos
documentos html acedidos
numa sessão do browser
Propriedade Descrição
screenLeft Retrieves the x-coordinate of the upper left-hand corner of the browser's client area, relative to the upper left-
hand corner of the screen.
screenTop Retrieves the y-coordinate of the top corner of the browser's client area, relative to the top corner of the screen.
status Sets or retrieves the message in the status bar at the bottom of the window.
document Represents the HTML document in a given browser window.
history Contains information about the URLs visited by the client.
location Contains information about the current URL.
navigator Contains information about the Web browser.
screen Contains information about the client's screen and rendering capabilities.
Evento Descrição
onblur Fires when the object loses the input focus.
Handlers de eventos onfocus Fires when the object receives the focus.
onload Fires immediately after the browser loads the object.
setInterval(func, timeVal) Executes a function each time a specified var timer= setInterval(func,1000);
number of milliseconds has elapsed. //invoca func todos os segundos
Cancels the interval previously started using var idInt=setInterval(f,10);
clearInterval(intervalId) the setInterval method. clearInterval(idInt);
close() Closes the current browser window
Displays a confirmation dialog box that
confirm(msgStr) contains an optional message as well as OK
and Cancel buttons.
navigate(urlStr) Loads the specified URL to the current
window.
open(urlStr) Opens a new window and loads the
document specified by a given URL.
prompt(msgStr, valStr) Displays a dialog box that prompts the user
with a message and an input field.
setTimeout(func, timeVal) Evaluates an expression after a specified var timer= setTimeout(func, 2000);
number of milliseconds has elapsed. //invoca func após 2 segundos
var idTimer=setTimeout(f,10);
clearTimeout(timerId) Cancels a time-out that was set with the
setTimeout method. clearTimeout(idTimer);
Propriedades
pathname String Sets or retrieves the file name or path specified by the object.
Método Descrição
reload() Reloads the current page.
replace(urlStr) Replaces the current document by loading another document at the specified URL.
Nós de texto
Métodos
Método Descrição
getNamedItem(name) retorna o valor (Node) associado ao nó name. Se nodeMap for uma variável que
referencia um NodeMap então:
nodeMap.getNamedItem ("item1") nodeMap["item1"]
setNamedItem(arg) acrescenta ao NodeMap o nó indicado
removeNamedItem(name) remove do NodeMap o nó name
item(index) retorna o nó na posição index. Se nodeMap for uma variável que referencia um
NodeMap então: nodeMap.item(2) nodeMap[2]
Métodos
Método Descrição
item(index) retorna o nó na posição index. Se nodeList for uma variável que referencia um
NodeList então: nodeList.item(2) nodeList[2]
Propriedades
Métodos
Método Parâmetros Retorna Descrição
substringData(offset, count) offset : Number. String retorna a substring do texto
count : Number com dimesão count a partir de
offset
appendData(arg) arg: String Nada acrescenta a string arg ao
texto
insertData(offset, arg) offset : Number Nada insere a string arg a partir de
arg : String offset
deleteData(offset, count) offset : Number Nada apaga count caracteres do
count : Number texto a partir de offset
replaceData(offset, count, arg) offset : Number Nada substitui count caracteres a
count : Number partir de offset pela string arg
arg : String
ISEL 2001/2002 - Programação Ultima actualização:
DEETC - Secção de Programação 20-03-23
Attr (atributo)
Attr tem todas as propriedades e métodos de Node bem como as propriedades da tabela
abaixo
Propriedades
Attr tem todas as propriedades e métodos de Element bem como as propriedades da tabela abaixo
Propriedades
Propriedades
Métodos
Método Descrição
blur() retira o foco do elemento
Métodos focus() coloca o foco no elemento
select() simula uma selecção no elemento
Propriedades
Propriedades Métodos
Propriedades
HTMLTableColElement tem Nome Tipo R/O Descrição
todas as propriedades e align String N alinhamento horizontaldas células na coluna
métodos de HTMLElement
bem como as propriedades ch String N caracter de formatação
definidas aqui chOff String N offset dentro da célula do caracter de formatação
span Number N o número de colunas do grupo
vAlign String N alinhamento vertical do conteúdo das celulas da coluna
width String N O comprimento das células da coluna
Propriedades
Nome Descrição
screenX This read-only property is a number.
screenY This read-only property is a number.
clientX This read-only property is a number.
clientYr This read-only property is a number.
ctrlKey This read-only property is of type Boolean.
shiftKey This read-only property is of type Boolean.
altKey This read-only property is of type Boolean.
metaKey This read-only property is of type Boolean.
button This read-only property is of type Number.
Nome Descrição
outputString This property is of type String.
keyVal This property is of type int.
virtKeyVal This property is of type int.
inputGenerated This property is of type boolean.
numPad This property is of type boolean.
Esta matéria não faz parte, em princípio, do programa da disciplina, estando aqui
presente como informação para os alunos mais interessados
Excepções
É possível criar objectos com propriedades e métodos definidos pelo programador. Para isso
define-se uma função construtora e usa-se a instrução new para a criação dos objectos
Por exemplo, imagine que queria criar objectos para representar carros. Para definir carro, crie
uma função que especifique as propriedades que pretende associar a um carro. Tal função
denomina-se uma função construtora.
A seguir, pode criar novos carros usando a instrução de criação de objectos (new):
A palavra-chave this refere o objecto corrente. Em geral, dentro de um método, this refere o
objecto sobre o qual se invocou o método.
Syntaxe
this[. propriedade] ou this[.metodo( parametros...) ]
Exemplo
• Suponha uma função chamada valida. Serve para verificar se a propriedade value de um objecto está
dentro do intervalo entre lowval e hival:
• Qualquer objecto que tenha uma propriedade de nome value pode ser validado quando alterado, como no
exemplo seguinte:
Nome Descrição
value valor corrente do contador
<style type="text/css">
body { background-color : blue }
#counterWrapper { margin-left: 20%; position: relative; width: 125; height: 60; }
#counterWrapper { margin-left: 15%;margin-bottom: 10%; }
#counterWrapper { background-color : rgb(0%,0%,0%) }
#counterWrapper { padding: 5px; border-style=inset }
</style>
<BODY onload="init();">
<div id="counterWrapper" > </div>
<input style="clear : both"
type="button"
value="Increment"
onmousedown="startInc();"
onmouseup="stop();"
/>
<input type="button"
value="Decrement"
onmousedown="startDec();"
onmouseup="stop();"
/>
</BODY>
var counter;
var counterWrapper;
var interval;
function init() {
counterWrapper= document.getElementById("counterWrapper");
counter = new Counter(counterWrapper,123,10000,5,5, 20,40);
counter.show();
}
A instrução invoca o
function startInc() { método show do objecto
interval=window.setInterval("counter.inc()", 50); counter. Dentro do método
} show, this corresponde ao
function stop() {
interval=window.clearInterval(interval); objecto counter sobre o
} qual foi invocado o método
function startDec() {
interval=window.setInterval("counter.dec()", 50);
}
</script>
// construir o viewer e inser~-lo no elemento pai w,h comprimento e largura de cada digito
for(i=0; i < this.nDigs; ++i) {
var newImg = document.createElement("img");
newImg.width=w;
newImg.height=h;
this.viewer.appendChild(newImg);
}
with (this.viewer.style) {
position="absolute";
top=t+"px";
left=l+"px";
visibility="hidden";
}
parent.appendChild( this.viewer);
}
throw expressão
Excepções sinalizam situações de falha e são iniciadas pela instrução throw. Uma
excepção modifica o fluxo normal de execução do programa, que continua no
primeiro bloco catch que for encontrado no encadeamento de funções em que a
excepção foi iniciada.
Exemplos:
throw 42;
The try...catch statement marks a block of statements to try, and specifies a response should an
exception be thrown. If an exception is thrown, the try...catch statement catches it.
The try...catch statement consists of a try block, which contains one or more statements, and a catch
block, containing statements that specify what to do if an exception is thrown in the try block. That is, you
want the try block to succeed, and if it does not succeed, you want control to pass to the catch block. If
any statement within the try block (or in a function called from within the try block) throws an exception,
control immediately shifts to the catch block. If no exception is thrown in the try block succeed, the catch
block is skipped. The finally block executes after the try and catch blocks execute but before the
statements following the try...catch statement.
var undef;
try {
if (undef.nothing == true)
document.write("oops!");
document.write("e a excepção? </br>");
}
catch(e) {
document.write("excepção: " + e);
}
The following example uses a try...catch statement. The example calls a function that retrieves a month name
from an array based on the value passed to the function. If the value does not correspond to a month number (1-
12), an exception is thrown with the value "InvalidMonthNo".
Palavras Reservadas
Bibliografia
Índice
input
password
input
radio
input
text
input
checkbox
single
select
<HTML>
<HEAD
<TITLE> Acesso a estilos em JavaScript</TITLE>
<script type="text/javascript" >
var showed=true;
var digit;
var toggle;
function mostraEsc() {
if (showed) {
digit.style.visibility="hidden"; toggle.value="Mostra";
}
else {
Embora o estilo por digit.style.visibility="visible"; toggle.value="Esconder";
omissão de visibility }
showed = !showed;
seja "inherit", o estilo }
mostrado é uma string
vazia! function init() {
digit = document.getElementById("digit");
toggle= document.getElementById(
Isto acontece porque a alert(digit.style.visibility);
propriedade style não }
representa o estilo </script>
"corrente", mas apenas </HEAD>
<BODY onload="init();" >
as regras de estilo <input type="button" value="Esconder" onclick="mostraEsc();" id="toggle"/>
definidas inline. <img src="c:\images\digits\9.gif" id="digit" />
</BODY>
</HTML>
Palavras reservadas