Quais são os significados específicos dos termos: funções, métodos, procedimentos e sub-rotinas?

11

Gostaria de saber quais são as diferenças específicas na terminologia que usamos para agrupar partes relacionadas do código. Às vezes, já vi os termos serem usados ​​de forma intercambiável: muitas linguagens OO usam a palavra-chave "função" para definir um método. (Por quê?)

Se você quisesse ser preciso, quais são os significados específicos de cada um? Ou é exatamente o que cada idioma escolhe para chamá-lo?

Andrew Vit
fonte
As únicas duas linguagens que conheço esse uso functionpara métodos são JavaScript e PHP. Ambos usam a mesma palavra-chave para não métodos (funções livres) e, no caso do JavaScript, não há realmente uma distinção entre funções e métodos, pelo menos não no nível da linguagem.
Exemplos: no VB.Net Subé um Functionvalor sem retorno. Em Pythonvocê pode ter uma função que não faz parte de nenhuma classe, portanto não é um método. Você também pode declarar funções dentro de funções e também em C #. Às vezes, eles têm nomes diferentes pela mesma razão que maçãs e abacaxis: porque são diferentes.
Job
O que você encontrou até agora que faz você pensar que há uma discrepância?
21416 JeffO

Respostas:

20
  • subprograma, sub-rotina
    "sub-rotina" provavelmente vem da linguagem assembly. Alguns processadores incluem instruções para oferecer suporte a sub-rotinas como uma maneira de organizar o código e reutilizar seções comuns do código. Por exemplo, o processador 6502 possuía instruções JSR (salto para sub-rotina) e RTS (retorno da sub-rotina). Lembro-me de que ele também era muito usado em programação estruturada, na qual um programa é uma hierarquia de unidades de código que às vezes eram chamadas de sub-rotinas ou subprogramas. Na IMO, esses são os termos mais genéricos para alguma unidade de código para a qual o controle é transferido temporariamente com a finalidade de concluir uma determinada tarefa.

  • função, procedimento
    Estes são freqüentemente usados ​​de forma intercambiável, mas em alguns idiomas há uma distinção. Em Pascal, uma função é um subprograma que retorna um valor, enquanto um procedimento é um subprograma que não. Em C e idiomas relacionados, todo subprograma tem um tipo de retorno (mesmo que seja void), portanto não há distinção.

  • método, função membro
    Estes são dois nomes para a mesma coisa - essencialmente uma função que está associada a uma determinada classe ou objeto.

  • operador
    Todo idioma possui um conjunto de operadores internos. Em algumas linguagens, como C ++, operadores são funções que podem ser substituídas (substituídas) e / ou sobrecarregadas (definidas para novos tipos).

  • função anônima
    Refere-se a uma função sem nome. Funções anônimas são essencialmente blocos de código que podem ser atribuídos a variáveis ​​ou passados ​​como parâmetros para uso subsequente, por exemplo, como uma rotina de conclusão.

  • encerramento, expressão lambda, bloco
    Um fechamento é um pedaço de código vinculado a um conjunto de variáveis. Penso em fechamentos como funções anônimas mais contexto.

Caleb
fonte
4
Nem todos os idiomas são fornecidos com operadores internos. Alguns, como Scheme e Haskell, permitem definir funções com nomes como '+' ou '>> ='. Além disso, você provavelmente deve adicionar que em alguns idiomas (como Scheme), "function" implica transparência referencial (por exemplo, sempre retorna o mesmo valor para a mesma entrada sem efeitos colaterais) enquanto o procedimento não. Caso contrário, ótima resposta.
Tikhon Jelvis 4/11/11
Até agora, lembro que "operadores" foram usados ​​principalmente para funções com 2 argumentos. Eles eram infix (operador entre argumentos:) 2 + 2. Existem pequenas exceções, como 1-arg, como ++arg(prefixo) ou arg++(postfix). Embora eu não tenha visto muitos operadores de postfix ..
Darek Nędza 12/12/19
-1

Depende dos idiomas, o que você pode fazer com eles

  • você precisa de uma distinção
  • existe uma distinção na sintaxe, ou é apenas conveniência, quando se fala em código

AFAIK, no Basic, se você chamar algo que não retorna nada, mas executa um trabalho com efeitos colaterais, como impressão, gravação em arquivo ou alteração de uma variável global, isso foi chamado de procedimento.

Se retornar algo, isso foi chamado de função.

Em uma linguagem OOP como Java, raramente encontrei o termo 'função', mas 'método', e foi ensinado que funções são coisas que são globais e podem ser chamadas por todos.

Na escala funcional e na linguagem OOP, um método não é chamado de função, mas você pode passar isso para outro método, e então se torna uma função.

Uma sub-rotina é uma rotina, que é chamada por outra rotina, no meu entender.

Em resumo, não acho que exista uma definição concisa sobre todas as línguas e mais ainda paradigmas. Você deve considerar a cultura específica em que está, se usar esses termos - talvez deva apresentar sua definição primeiro.

Usuário desconhecido
fonte
-1

Eu diria que, dependendo do contexto, todas essas palavras podem significar a mesma coisa ou coisas totalmente diferentes, por exemplo, o que Caleb escreveu (mas há mais, ou seja, idiomas em que operadores são funções de primeira classe etc.). Portanto, é difícil dar uma definição específica e é prudente não assumir muito, a menos que o contexto (linguagem de programação) seja conhecido.

AnoE
fonte