Em ciência da computação, mais especificamente no contexto da programação, uma sub-rotina (função, procedimento ou mesmo subprograma) consiste em uma porção de código que resolve um problema muito específico, parte de um problema maior (a aplicação final). O conceito de função difere da noção de procedimento, já que devolve um valor, se bem que, em algumas linguagens, esta distinção não é sequer existente; por exemplo, em C, a implementação de um procedimento é uma função do tipo void. No contexto da programação orientada a objetos, estas sub-rotinas são encapsuladas nos próprios objetos, passando a designar-se métodos.
Algumas das vantagens na utilização de sub-rotinas durante a programação são:
- a redução de código duplicado num programa;
- a possibilidade de reutilizar o mesmo código sem grandes alterações em outros programas;
- a decomposição de problemas grandes em pequenas partes;
- melhorar a interpretação visual de um programa;
- esconder ou regular uma parte de um programa, mantendo o restante código alheio às questões internas resolvidas dentro dessa função;
As componentes de uma sub-rotina são:
- O seu protótipo, que inclui os parâmetros que são passados à sub-rotina na altura da invocação;
- O corpo, que contém o bloco de código que resolve o problema proposto;
- Um possível valor de retorno, que poderá ser utilizado imediatamente a seguir à invocação da sub-rotina.
Como exemplo de compilações de sub-rotinas, a biblioteca STL da linguagem C++, que fornece ao utilizador uma série de funções e procedimentos que realizam tarefas triviais, poupando o programador da sua reimplementação.