Instituto Federal de Mato Grosso do SulSetembro/2024

01. Subprogramas
Algoritmos 2
Prof. Rodrigo Duran
Nesta aula vamos:
-
Aprender como usar e definir subprogramas
Usar subprogramas tem inúmeras vantagens (e alguns dizem que seu uso é até obrigatório): ajuda a organizar o código e nos permite conter possíveis efeitos colaterais, ajuda no processo de debug do código, permite o reaproveitamento de código e torna o código mais legível.
USANDO SUBPROGRAMAS
Por que reinventar a roda?
O que são subprogramas?
Um subprograma (ou função) é uma implementação de uma funcionalidade específica. Por exemplo, um subprograma pode calcular um resultado, registrar alguns dados úteis na memória do computador ou imprimir uma mensagem. Ou pode executar uma combinação específica de tais tarefas.
Os programadores podem criar subprogramas e, em seguida, usar o que criaram. Eles também podem usar subprogramas criados por outros programadores. Em geral, um programa completo contém muitos subprogramas.
Regra #24: Uma função é um componente do programa que se encarrega de uma tarefa específica.
Regra #25: Você não precisa saber como uma função foi implementada (seu código fonte) para utiliza-la. Você pode executar funções de bibliotecas, que podem fazer parte do sistema ou serem fornecidas por outras pessoas.
Exemplos de funções
Na verdade, nós já utilizamos certas funções há um certo tempo...
Por exemplo, onde está o código fonte do Math.floor()
?
O que nós sabemos sobre o Math.floor()
?
- Ela retorna um resultado. Esse resultado é um número. Esse número é um Inteiro
- Ela aceita um parâmetro: Um número qualquer, Inteiro ou Real
- "Alguma coisa" é calculada quando ela é executada, e posteriormente nos retorna o resultado
- Nós não sabemos, nem precisamos saber, como ela é executada: só precisamos fornecer o parâmetro de forma correta e entender que tipo de resultado ela retorna. Os detalhes ficam ocultos.

Regra #26: Uma função é um componente do programa que se encarrega de uma tarefa específica.
Regra #27: Você não precisa saber como uma função foi implementada (seu código fonte) para utiliza-la. Você pode executar funções de bibliotecas, que podem fazer parte do sistema ou serem fornecidas por outras pessoas.
Tipos de Funções
Não é sempre que uma função retorna um resultado. Existem algumas funções que só realizam uma determinada tarefa e não retornam um valor -- muitas vezes essas funções são chamadas de procedimentos. Por exemplo, nós já utilizamos o procedimento console.log()
há algum tempo...
O que nós sabemos sobre o console.log()
?
- Ela não retorna um resultado. Isso não quer dizer que ela não faça nada!
- Retornar um resultado significa apenas que um valor (String, Number) pode ser usado como uma expressão de retorno da função.
- Por exemplo, a funcionalidade do
console.log()
é mostrar uma expressão no console. - Nós não precisamos saber como a função faz isso. Apenas saber o que ela faz
- Devemos saber também que tipo de parâmetros ela "precisa": nesse caso, uma expressão de qualquer tipo

Regra #28: Para executar uma função, escreva seu nome para "chamá-la"
Regra #29: A chamada de uma função possui zero ou mais argumentos (parâmetros)
Regra #30: Argumentos são expressões
Regra #31: Se a função retornar um algo, ela também retorna uma expressão
Exemplos de funções "prontas" em JavaScript (bibliotecas)
Math.round(Number)
: retorna Number arredondado ao inteiro mais próximo
let n = Math.round(4.9)
let n = Math.round(4.4)
Math.abs(Number)
: retorna o valor absoluto de Number
let n = Math.abs(2)
let n = Math.abs(-2)
Math.random()
: retorna um número aleatório entre 0 e 1
let dado = Math.random()
Math.pow(NumberX, NumberY)
: retorna o valor de NumberXNumberY
let n = Math.pow(3,2)
let n = Math.pow(2,4)
Math.sqrt(Number)
: retorna a raiz quadrada de Number
let n = Math.sqrt(9)
Math.min(Number1, Number2, ..., NumberN)
: retorna o menor de uma série de numeros
let menor = Math.min(0, 9, 3 , 44, -1, 3, -5)
Math.max(Number1, Number2, ..., NumberN)
: retorna o maior de uma série de numeros
let maior = Math.min(0, 9, 3 , 44, -1, 3, -5)
Funções como expressões
As funções que retornam um valor podem ser usadas normalmente como expressões, inclusive como argumentos de outras funções!
let resultado = Math.sqrt(16) + 4
let valor1 = 10
let valor2 = 20
let diff = Math.abs(valor1-valor2)
diff = Math.abs(valor2-valor1)
let a = 10
let b = -15
let c = Math.min(a, Math.abs(b))
console.log(c)
CRIANDO NOSSOS PRÓPRIOS SUBPROGRAMAS
Para quando precisarmos criar a roda. E para que outros usem a roda que criamos. E para ter certeza que a roda funciona...
Criando funções customizadas
Até agora, vimos como utilizar funções em bibliotecas. Elas são muito úteis e fáceis de usar. Mas nem sempre atendem às nossas necessidades. Por exemplo, imagine que precisemos calcular a média de cada aluno na disciplina de Algoritmos I (vide atividade anterior):
let media = (0.5*notaTrabalho)+(0.3*notaAtividade)+(0.2*notaPresenca)
Você pode imaginar que devemos calcular essa média para centenas de alunos, logo seria prático ter um subprograma para isso. Subprogramas tem várias vantagens:
- Nos permite isolar a funcionalidade. Se em algum momento algo estiver errado com o cálculo nós sabemos exatamente onde procurar.
- Algo errado com o cálculo da média não influi em nada no resto do código do programa
- Nós podemos compartilhar esse método de cálculo com outras pessoas (e em outros programas nossos também)
- Se algum dia precisarmos modificar a forma como a média é calculada, não impacta em outras partes do programa e nos permite testar facilmente essa alteração
- Como fica mais fácil isolar a funcionalidade, o nosso programa fica mais organizado e mais fácil de ser lido.
Para criar uma função customizada, basta utilizar a palavra function
, especificar os parâmetros que a função aceita e escrever o código que ela deve executar (bloco). Caso a função retorne um resultado, a palavra return
especifica qual a expressão será retornada.
let calcularMedia = function(notaTrabalho, notaAtividade, notaParticipacao) {
let mediaAtividade = 0.3 * notaAtividade
let mediaParticipacao = 0.2 * notaParticipacao
let mediaTrabalho = 0.5 * notaTrabalho
return mediaTrabalho + mediaAtividade + mediaParticipacao
}
let minhaMedia = calcularMedia(10, 7, 6.5)
console.log(minhaMedia)

Criando funções customizadas
Vocês devem ter calculado as raízes de equações algumas vezes utilizando a fórmula de Bhaskara. Como fazer subprogramas para calcular as raízes?
- O primeiro passo é entender quais são as etapas no cálculo: calcular o Delta, a raiz positiva e a raiz negativa
- Quais são os parâmetros? O que deve ser fornecido para o cálculo das raízes ? Os fatores que acompanham as variáveis X: a, b e c.
- Qual o processo? O processo será o corpo do nosso subprograma: é a própria formula de Bhaskara.

Criando funções customizadas
Utilizando funções de bibliotecas para criar as nossas próprias funções