forked from Dayvd-G/2not-2020-2
-
Notifications
You must be signed in to change notification settings - Fork 1
/
12-funcoes.html
202 lines (167 loc) · 6.6 KB
/
12-funcoes.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
//"use scrict" impede que variaveis sejam declaradas seo uso do let, var ou const
//Iniciar variáveis diretamente é uma má pratica de programação
"use scrict"
/*
Função é um trevho de código que é "isolado" do restante de um
programa com a finalidade de ser executado em um momento posterior.
Como declarar uma função:
1) É obrigatório o uso da palavra-chave function
2) A function PODE ter um nome (existem funções anônimas)
3) Um par de parênteses (OBRIGATÓRIO!)
4) Dentro dos parênteses podem ser passados dados externos á função,
mas necessários ás tarefas que a função desempenhará. Esses dados
passados são chamados de PARÂMETROS ou ARGUMENTOS.
5) Par de chaves que delimitará código "isolado" da função, que é
chamado CORPO DA FUNÇÃO
6) Dentro do corpo da função pode haver um valor de retorno, que é indicado pela palavra-chave return
*/
// Chamadas de função podem vir antes da declaração da função
let x = soma(15,19)
alert(x)
alert(soma(12.5, 89.5))
let a = 45.75, b = 67.15
alert(soma(a,b))
// Declaração da função
function soma(n1, n2) {
return n1 + n2
}
//Função com um parametro
function fatorial(num) {
//O fatorial de um numero é igual a ele próprio multiplicado
//Pelos seus antecessores até 1
//5! = 5.4.3.2. (128)
let fat = 1
for(let i = num; i > 1; i-- ){
fat *= i //fat = fat * 1
}
return fat
}
//Chamadas de função feita dentro de string templates
document.write(`5! é igual a ${fatorial(5)}<br>`)
document.write(`9! é igual a ${fatorial(9)}<br>`)
let res = fatorial(6)
document.write(`6! é igual a ${res}<br>`)
/***********************************************
FUNÇÃO SEM VALOR DE RETORNO
***********************************************/
//Algumas funções desempenham tarefas mas não retornam um
//resultado ao final
function traco(tamanho) {
for(let i = 1; i <= tamanho; i++) {
document.write('-')
}
document.write('<br>')
}
//Chamadas de função
traco(40)
traco(15)
let ret = traco(20) //Funções sem return explicito
//retornam o valor undefined
document.write(`ret = ${ret}`)
/*********************************************
FUNÇÕES DETERMINÍSTICAS x NÃO-DETERMINÍSTICAS
*********************************************/
//Função determinística: todas as vezes que a função chamada
//com os mesmos argumentos, ela sempre retorna o mesmo resultado
//Ex: fatorial(5) sempre irá retornar 120
//Exemplo de uma função não-determinística: Math.random()
//Gera um número aleatório entre 0 e 1
document.write(Math.random() + '<br>')
document.write(Math.random() + '<br>')
document.write(Math.random() + '<br>')
//Gerar um número aleatório entre 1 e 68
//Math.floor() -> retira as casas decimais
document.write(Math.floor(Math.random() * 60 + 1) + '<br>')
/*********************************************
PARÂMETROS OPCIONAIS
*********************************************/
function potencia(base, expoente) {
return base ** expoente
}
document.write('2 elevado a 5 é ' + potencia(2, 5) + '<br>')
document.write('5 elevado a 4 é ' + potencia(5, 4) + '<br>')
//Suponha que na maioria das vezes que essa função é chamada o expoente seja 2
document.write('5 elevado a 2 é ' + potencia(5) + '<br>')
document.write('7 elevado a 2 é ' + potencia(7) + '<br>')
document.write('8 elevado a 2 é ' + potencia(8) + '<br>')
/***********************************************
PARÃMETRO (OU ARUGUMENTO) DE RESTO
***********************************************/
//Suponha uma função que recebe um número arbitrário de
// numeros e retorna a sua soma
//Só pode existir um argumento de resto, e caso haja mais de um
//Argumento, o de resto deve ser o último
function somaTudo(...nums) {
// O argumento de resto recebe todos parâmetros
// passados dentro de um vetor
let soma = 0
for(let i = 0; i < nums.length; i++) {
soma += nums[i]
}
return soma
}
let result = somaTudo([20, 40, 10, 5 , 9])
document.write('Resultado somaTudo (1): ' + result + '<br>')
result = somaTudo([1, 4, 8, 9, 0, -3, 8, 14, 7])
document.write('Resultado somaTudo (2): ' + result + '<br>')
function somaTudoAcumulado(inicial, ...nums) {
// O argumento de resto recebe todos os parâmetros
//passados dentro de um vetor
let soma = inicial
for(let i = 0; i < nums.length; i++) {
soma += nums[i]
}
return soma
}
let abc = somaTudoAcumulado(1000, 2, 8, 0, 3, 7, 10 )
document.write('somaTudoAcumulado:' + abc + '<br>')
/********************************************
EXPRESSÃO DE FUNÇÃO
********************************************/
let minimo = function min(a,b) {
if(a < b) {
return a
}
else {
return b
}
}
document.write('Mínimo 5, 7 => ' + min(5,7) + '<br>')
// Por isso, o mais comum, em expressoes de função, é usar
// funções anônimas
let mult = function(x, y) {
return x * y
}
document.write('Mult 7 * 9 => ' + mult(7,9) + '<br>')
/******************************************
ARROW FUNCTION
******************************************/
//Expressão de função com as seguintes características
// 1) Apenas um argumento
// 2) O corpo da função tem apenas uma linha
// 3) A função retorna valor
let quadrado = function(x) {
return x * x
}
// Essa mesma função pode ser escrita com a sintaxe chamada ARROW FUNCTION
//1) A palavra-chave "function" é omitida
//2) Omitem-se os parenteses que envolvem o argumento
//3) Entre o argumento e o corpo da função, coloca-se o simbolo =>
//4) O corpo da função vem imediantamente em seguida, sem ser as chaves e
//sem a palavra-chave return
let quadrado2 = x => x * x
document.write('Quadrado de 11 =>' + quadrado2(11) + '<br>')
let dobro = y => y * 2
let substract = (a, b) => a - b
</script>
</head>
<body>
</body>
</html>