Funções são talvez a parte mais importante de uma linguagem de programação, daí a importância de saber como elas funcionam e como podem ser criadas e utilizadas. Em micro:bit, as funções são blocos que se encaixam em outros blocos. há uma grande variedade, classificada de acordo com a atividade que exercem. nesta seção veremos seu papel e como criar e usar funções.
Pode-se generalizar que quase todos os blocos no Makecode são funções. Para entender o papel de uma função, vamos ver um exemplo prático. Suponha que você tenha um projeto onde seja necessário exibir o "nome e idade" de uma pessoa como a mostrada no seguinte programa:
Olhando para os blocos podemos ver que, ao mostrar o nome e a idade, existem 3 setores de blocos “muito parecidos” como mostra a imagem a seguir:
É aqui que as funções são úteis, pois podemos organizar melhor o programa criando funções para esses blocos semelhantes. Para isso, vá até a caixa de ferramentas e clique no botão: “Avançado”, conforme a imagem a seguir:
Em seguida, clique no botão: "Funções", conforme a imagem a seguir:
Aparecerá uma janela chamada: “Funções” com um botão chamado: “criar uma função…”, conforme a imagem a seguir:
Ao clicar no botão: "criar função", aparecerá uma janela como a da imagem a seguir:
Nesta janela podemos dar um nome à função que queremos criar. É importante nomear a função de acordo com a tarefa que a função deve executar. Por exemplo, para blocos:
Podemos dar um nome como: “UsuarioMaria”. Ao criarmos uma função, aparecerá um bloco no editor de blocos, conforme a imagem a seguir:
Além disso, um bloco aparecerá no menu: “funções”, representando a função criada e anexando a palavra: “chamada” ao nome dado à função. Isso é repetido para cada função criada. Observe a figura a seguir:
Assim, crie 3 funções conforme a imagem a seguir:
Em seguida, coloque em cada função os blocos correspondentes a cada usuário conforme a imagem a seguir:
E note que no menu: "funções", agora existem 3 blocos com os respectivos nomes dados a cada função, precedidos da palavra: "chamada", conforme a imagem a seguir:
Agora, arraste e solte no bloco: “para sempre”, essas funções conforme a imagem a seguir:
Podemos observar que este programa funciona da mesma forma que o projeto proposto inicialmente, com a diferença que agora utilizamos funções, permitindo uma melhor organização do projeto. Quando os projetos são muito grandes, as funções ajudam a organizar melhor os projetos.
PASSANDO DE PARÂMETROS PARA FUNÇÕES.
Talvez a maior vantagem das funções seja o fato de poder passar parâmetros ou dados para as funções. Os “tipos” de dados que podem ser passados para uma função são os seguintes:
- Boleano.
- Número.
- Texto.
- Variedade.
- LEDSprite.
- Cenário.
Observe a janela: "Editar função", que possui a opção: "Adicionar um parâmetro", para adicionar parâmetros à função, conforme a imagem a seguir:
Vamos ver os parâmetros na prática. Tomemos como exemplo o projeto onde mostramos o “nome e idade” dos usuários. Assim, podemos criar uma função que receba como parâmetros: "nome" e "idade". Observe que o dado: "nome" é do tipo "texto" e o dado: "idade" é do tipo "inteiro". Então vá no menu: “funções” e crie uma função que receba 2 parâmetros (dados) conforme a imagem a seguir:
Agora, no menu: "funções", aparecerá uma função chamada: "usuário", que recebe 2 parâmetros conforme a imagem a seguir:
No editor de blocos aparecerá um bloco chamado: “função nome do usuário idade”, como pode ser visto na imagem a seguir:
Agora, preencha a função com os blocos que mostrarão o nome e a idade conforme a imagem a seguir:
Para trazer os parâmetros para os blocos que os utilizam, clique sobre o parâmetro e arraste-o até onde será utilizado, conforme a imagem a seguir:
Agora podemos usar a função: "usuário" e enviar um nome e idade como parâmetro conforme o programa a seguir:
Como pode ser visto, a função realiza sua atividade como se estivesse no loop principal. Isso porque quando utilizamos qualquer função, o programa passa o controle do processador para a função chamadora (call) e as instruções e blocos são executados da mesma forma como se estivesse no loop principal. Daí o grande poder das funções, pois permitem que os programas de qualquer projeto sejam organizados em atividades ou funções específicas, podendo também passar parâmetros, aumentando ainda mais o seu papel.
Voltando ao projeto inicial de exibição de nomes e idades, você pode construir um programa como o seguinte, mas usando funções e parâmetros:
Comparando os 2 modelos de programação, podemos tirar algumas conclusões interessantes:
- Usando funções o programa fica mais organizado.
- O uso de funções reutiliza partes de blocos de um programa.
- Usando funções menos blocos de programa são necessários.
- Usando funções podemos criar um programa semelhante ao diagrama de atividades.
- Usando funções há menos risco de cometer erros de programação.
- Além disso, as funções podem ser recolhidas para ter um melhor visual no editor de blocos.
A figura a seguir mostra o mesmo programa sem funções e com funções:
Para recolher as funções, clique no círculo mostrado à direita do nome da função. O programa a seguir é igual ao mostrado acima, mas com a função recolhida:
Para reexibir a função, clique no círculo à direita do nome da função.
Ao usar funções, um programa se adapta melhor ao diagrama de atividades. Por exemplo, o diagrama de atividades para o projeto visto seria semelhante ao seguinte:
Olhando para o diagrama de atividades, vemos que estas são executadas sequencialmente e são sempre repetidas. Podemos fazer um programa que mostre as informações do usuário (nome e idade) dependendo de algo que aconteça na placa microbit. O seguinte programa exibe o usuário, dependendo se um botão foi pressionado ou a placa foi acenado:
O diagrama de atividades para este programa seria semelhante ao seguinte:
CLASSIFICAÇÃO DAS FUNÇÕES.
O editor de blocos “Makecode” possui diversas funções prontas para uso, organizadas por menus de acordo com o tipo de atividade que realiza. Observe na figura a seguir como as funções são classificadas:
Estas funções visam obter o melhor do hardware da placa micro:bit
Além das funções encontradas no menu, você pode acessar o menu: “Extensões” e encontrar funções específicas para diversas finalidades:
Alguns textos chamam essas extensões de: livrarias ou bibliotecas. A figura a seguir mostra essas extensões de função categorizadas de acordo com algum propósito:
Para usar qualquer uma dessas extensões ou bibliotecas, basta selecioná-la e ela aparecerá automaticamente no menu.
RETORNANDO DADOS DE UMA FUNÇÃO
É possível retornar dados de uma função. Qualquer tipo de dado pode ser retornado: texto, número, booleano, imagem, etc. Vejamos um exemplo prático. Suponha que queremos criar uma função para calcular a porcentagem de um número. Assim, precisamos de uma função que receba 2 parâmetros, um para o número a calcular e outro para a percentagem. O seguinte programa mostra como calcular a porcentagem:
Para fazer isso, crie uma variável chamada: "resultado" e uma função chamada: "porcentagem". Preencha a função conforme mostrado no programa. Observe que primeiro multiplicamos o número pela porcentagem e armazenamos o resultado na variável: “resultado”. Em seguida, dividimos o resultado por 100 e salvamos o resultado novamente na variável: “resultado”. Então usamos o bloco: "retorna" e como dados a serem retornados usamos a variável: "resultado". Agora, podemos usar a função: "porcentagem" no loop principal e ver como funciona. Criei uma variável chamada: "resultado", para fins didáticos, para acumular o valor da operação de multiplicação, mas também podemos programar a função: "porcentagem", conforme o programa a seguir:
Podemos presidir, ou seja, não usar a variável: "resultado", para obter o mesmo resultado dos programas anteriores conforme mostra a imagem a seguir:
Uma função pode retornar qualquer tipo de dado. O bloco: "retorna" nos permite fazer isso e o encontramos no menu: "funções" como mostra a imagem a seguir:
Todos os blocos com uma forma arredondada,
retornar ou retornar algum tipo de dado, conforme mostrado nos blocos da imagem a seguir:
Os blocos em forma de diamante também retornam dados booleanos (verdadeiro ou falso).
Como conclusão, podemos observar que todos os blocos utilizados na programação da placa micro:bit são funções. Alguns não recebem parâmetros, outros recebem, outros retornam alguns dados, outros não. Podemos criar ou inventar nossas próprias funções e dar aos projetos uma melhor organização e legibilidade.