Qual é a diferença entre sub-rotina, procedimento e função?

É um pouco arbitrário (e sem sentido em alguns idiomas), mas tradicionalmente as funções retornam um valor e, teoricamente, o resultado dependerá apenas da entrada fornecida (parâmetros). Nem sempre é verdade, por exemplo. funções que retornam valores aleatórios ou hora do dia.

Os procedimentos não devem retornar valores, apenas para causar efeitos colaterais (como salvar dados em um arquivo).

IIRC, foi mais ou menos relevante em Pascal, é muito menos relevante na maioria dos outros idiomas.

Observe também os chamados métodos de uma classe (em OOP), em que o valor retornado (ou os efeitos colaterais) podem depender do estado do objeto.

UMA

procedimento

é

velho programador fala

para uma função que não retorna nada.

UMA

função

é um bit de código nomeado que possivelmente aceita alguns dados (

parâmetros

ou às vezes chamado

argumentos

) e

possivelmente

retorna algum resultado (é claro que existem

funções anônimas

, que não têm nome, mas esse é um conceito avançado desnecessário para entender o que é uma função).

UMA

sub-rotina

é

velho programador fala

para uma função ou procedimento, ou seja, um termo genérico para um bit de código nomeado.

No passado, fizemos uma distinção entre função e procedimento, mas atualmente não tanto. O importante é que podemos usar um pouco de código que podemos nomear e reutilizar para não precisarmos escrever o mesmo código repetidamente em nossos programas.

Conceitualmente, eles são praticamente a mesma coisa: parte de um programa separado do programa principal que faz alguma coisa e depois retorna ao programa principal.

Alguns idiomas têm significados específicos para esses termos. Por exemplo, em Pascal, um procedimento é uma função que não retorna um valor. Em C, tudo é uma função, mas se não retornar um valor, é uma função "nula".

O termo "função" vem da ciência da computação da matemática, onde se refere a uma sequência de operações que retornam algum valor, como as usadas para desenhar um gráfico.