Sub-rotinas: procedimentos e funções - 2


Uma função é uma sub-rotina que retorna um resultado (número, cadeia de caracteres, etc.)

Imagine que você encomendou um produto em uma loja online. Do ponto de vista da programação, você chamou uma determinada sub-rotina e, ao contrário de um procedimento, esta sub-rotina deve retornar um resultado - entregar o produto solicitado. Essas sub-rotinas são chamadas de funções.
Uma função é formatada da mesma forma que um procedimento: função <nome da função> (lista de parâmetros como <nome da variável>:<seu tipo> separados por ponto e vírgula): <tipo do valor de retorno>; começar <corpo funcional> fim;
A diferença entre uma função e um procedimento é que uma função deve retornar um valor. Para fazer isso, você precisa usar o nome da função como uma variável ou a variável especial Result: função Soma(a, b:inteiro): inteiro; começar Soma := a + b; fim; ou função Soma(a, b:inteiro): inteiro; começar Resultado:= a + b; fim;
Uma função que retorna a média aritmética de dois números inteiros ficaria assim: função média(a, b: inteiro): real; começar   média := (a + b) / 2; fim; Resta entender como chamar esta função no programa principal:
Você não deve chamar uma função da mesma forma que chama um procedimento: média(10, 5); O valor retornado pela função será perdido. É como se a mercadoria da loja online não fosse dada a ninguém, mas jogada fora. É improvável que o cliente goste.

É mais correto salvar o resultado em uma variável (ou imprimi-lo na tela): a := média(10, 5);

ou

writeln(average(10, 5));

Freqüentemente, os programadores usam funções booleanas que retornam valores booleanos: true ou false (True ou False)
Essas funções são úteis para   verifique algumas propriedades.
Considere dois exemplos de como escrever uma função lógica que verifica a paridade de um número
1)  Melhor maneira:
resultado da expressão
n % 2 == 0
será verdadeiro (Verdadeiro) ou falso (Falso)
Não há necessidade de escrever uma declaração condicional!
2) Não faça isso!
Você pode escrever assim, mas será um registro mais longo, então é melhor não fazer isso
bool isEven(int n) { retornar (n % 2 == 0); } bool isEven(int n) { se (n % 2 == 0) retornar verdadeiro; outro retorna falso; }

E a última observação sobre como trabalhar com funções e procedimentos: o número de funções e procedimentos no programa não é limitado. Além disso, uma sub-rotina pode chamar outra sub-rotina e até ela mesma.