DEV Community

Cover image for Procedimentos (ou Funções sem retorno - Parte 1)
ananopaisdojavascript
ananopaisdojavascript

Posted on • Originally published at ananopaisdojavascript.hashnode.dev

1

Procedimentos (ou Funções sem retorno - Parte 1)

Definição

Procedimento é uma função com um determinado número de etapas, que pode ser usada mais de uma vez. Essa função é escrita uma única vez. Sempre que precisar de um procedimento, é só fazer uma chamada. A estrutura de um procedimento é a seguinte:

function nomeDoProcedimento (parametro1, parametro2) {
    // Bloco de código
}

nomeDoProcedimento()
Enter fullscreen mode Exit fullscreen mode

Um conceito muito importante dos procedimentos é a passagem de parâmetros. Existem dois tipos de passagens de parâmetro: por valor e por referência.

Passagem de Parâmetro por Valor

Para ver como a passagem de parâmetro por valor funciona, vamos ver um exemplo. Vou criar uma função (procedimento) para verificar se um determinado número digitado pelo usuário é par ou ímpar.

function parOuImpar(valor) {
    console.log(`Recebendo o número ${valor}`);

    if (valor % 2 === 0) {
    console.log(`O número digitado ${valor} é par.`);
     } else {
    console.log(`O número digitado ${valor} é ímpar.`);
     }
}
Enter fullscreen mode Exit fullscreen mode

Criei uma função chamada parOuImpar com um parâmetro chamado valor. Dentro da função coloquei a lógica para verificar se um número é par ou ímpar e um console.log() para mostrar qual valor foi recebido pela função. Agora vou criar uma variável fora dessa função para guardar o número inteiro digitado pelo usuário.

const valorQualquer = Number(prompt("Digite um número inteiro qualquer"));
Enter fullscreen mode Exit fullscreen mode

Depois dessa variável, vou chamar a função parOuImpar():

const valorQualquer = Number(prompt("Digite um número inteiro qualquer"));

parOuImpar(valorQualquer);
Enter fullscreen mode Exit fullscreen mode

Vamos imaginar que o número digitado foi 5. Veja como o resultado aparece no console:

// Recebendo o número 5
// O número digitado 5 é ímpar
Enter fullscreen mode Exit fullscreen mode

O número 5 da variável valorQualquer foi recebido pelo parâmetro valor da função parOuImpar(). A lógica foi executada e verificou que 5 é um número ímpar.

Vamos ver mais um exemplo?! Uma função para a soma de dois números inteiros.

function soma(a, b) {
  console.log(`Recebendo o valor ${a}`);
  console.log(`Recebendo o valor ${b}`);
  let somaDosValores = a + b;
  console.log(`Resultado da soma: ${somaDosValores}`);
}
Enter fullscreen mode Exit fullscreen mode

O mesmo mecanismo da função anterior. Criei uma função chamada soma com dois parâmetros, chamados a e b. Dentro da função coloquei uma variável para fazer a soma e console.log() para mostrar quais números foram recebidos pela função. Agora vou criar duas variáveis fora dessa função para guardar os números inteiros digitados pelo usuário.

const valor1 = Number(prompt("Digite o primeiro valor inteiro"));
const valor2 = Number(prompt("Digite o segundo valor inteiro"));
Enter fullscreen mode Exit fullscreen mode

Depois dessas variáveis, vou chamar a função soma():

const valor1 = Number(prompt("Digite o primeiro valor inteiro"));
const valor2 = Number(prompt("Digite o segundo valor inteiro"));
soma(valor1, valor2);
Enter fullscreen mode Exit fullscreen mode

Os números digitados foram 20 e 400. Veja como o resultado aparece no console:

// Recebendo o valor 20
// Recebendo o valor 400
// Resultado da soma: 420
Enter fullscreen mode Exit fullscreen mode

Os números que estão guardados nas variáveis valor1 e valor2 foram recebidos pelos parâmetros a e b da função soma(). Porém, podemos ver que tem uma variável dentro dessa função:

let somaDosValores = a + b;
Enter fullscreen mode Exit fullscreen mode

O que essa variável está fazendo dentro da função soma()?! A resposta nos leva ao...

Escopo

O que é escopo?! É o local onde uma determinada variável vai funcionar. Existem dois tipos de escopo: escopo global e escopo local.

O que é variável de escopo global?!

É uma variável que funcionará em qualquer parte do código.

O que é variável de escopo local?!

É uma variável que funcionará em um bloco de código específico.

Mais um exemplo:

Vejamos o seguinte código:

const num1 = Number(prompt("Digite um número inteiro qualquer"));
const num2 = Number(prompt("Digite um número inteiro qualquer"));

function rotina(a, b) {
    let x = a;
    let y = b;
    console.log(num1, num2, a, b, x, y);
}

const val1 = num1;
const val2 = num2;
rotina(val1, val2);
console.log(num1);
console.log(num2);
console.log(a);
console.log(b);
console.log(x);
console.log(y);
Enter fullscreen mode Exit fullscreen mode

Vamos ver o passo a passo:

  • Foram criadas duas variáveis chamadas num1 e num2, que receberão números inteiros.
  • Dentro da função rotina(), foram criadas duas variáveis chamadas x e y, que também receberão números inteiros. Além disso, a função rotina() tem dois parâmetros, a e b.
  • A variável num1 vai receber o número 5 e a variável num2 vai receber o número 9. A partir daí a função rotina() é chamada, passando as variáveis num1 e num2 como parâmetros.
  • As variáveis num1 e num2 funcionarão por todo o código, porque são variáveis de escopo global.
  • A função rotina() é um escopo local, no qual funcionarão as variáveis x e y e os parâmetros a e b. Essas variáveis e parâmetros funcionam apenas dentro dessa função porque são de escopo local, o que significa que não vão funcionar fora da função rotina(), apenas as variáveis num1 e num2.

Passagem de Parâmetro por Referência

O funcionamento da passagem de parâmetro por referência é um pouco diferente do da passagem de parâmetro por valor. Vamos ver um exemplo.

function soma(a, b) {
    console.log(a++);
    console.log(b++);
    console.log(`Valor da soma: ${a + b}`);
}

const x = Number(prompt("Digite o primeiro valor"));
const y = Number(prompt("Digite o segundo valor"));

soma(x, y);
Enter fullscreen mode Exit fullscreen mode

Vamos ver o passo a passo:

  • Foi criada uma função chamada soma() (falta de originalidade!!! 🤦🏾‍♀️) que tem dois parâmetros, a e b.
  • Dentro da função, o parâmetro a receberá o valor e somará 1 (para entender melhor: a++ é o mesmo que a + 1) e o parâmetro b receberá o valor e somará 1 também (b++ é o mesmo que b + 1).
  • No código principal, vamos criar duas variáveis chamadas x e y que serão de escopo global e receberão números inteiros.
  • Digamos que o usuário digite 4 para a variável x e 5 para a variável y. Ao chamar a função soma(), a referência da variável x é passada para o parâmetro a e a referência da variável y é passada para o parâmetro b.
  • x, que é referência de a, receberá a++ (a + 1), ou seja:
x = 4 + 1;
x = 5;
Enter fullscreen mode Exit fullscreen mode
  • y, que é referência de b, receberá b++ (b + 1), ou seja:
y = 5 + 1;
y = 6;
Enter fullscreen mode Exit fullscreen mode

O resultado da soma inserida na função soma() será 11 em vez de 9.

E aí? Gostaram? Até a próxima anotação? 😊

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (1)

Collapse
 
urielsouza29 profile image
Uriel dos Santos Souza

Muito bom!

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay