¿Cuál es la diferencia entre un método y una función?

1743

¿Alguien puede proporcionar una explicación simple de los métodos frente a las funciones en el contexto OOP?

willc2
fuente
12
Cuando el valor de una propiedad es una función, lo llamamos método
codificador
2
¿Qué es lo contrario de un método? Esa es mi pregunta "Función" es el concepto padre. El método es un tipo de función. ¿Cuál es el nombre de un tipo de función que no es un método, pero que puede llamarse directamente por su nombre?
Alexander Mills
Sería interesante ver otra explicación que describa la diferencia entre métodos y funciones en r . Es interesante ya que el método generalmente contendría una función . Si el método es una función dependiente del objeto, ¿entonces la comprobación de la función para la clase de objeto if(class(object)) { ... } else {stop()}sería conceptualmente equivalente al método?
Konrad
La terminología adecuada realmente puede depender del idioma, por lo que puede significar cosas ligeramente diferentes en diferentes contextos. Aun así, dado que los programadores que trabajan con un idioma sobre otro están más acostumbrados a ciertas terminologías. Los programadores también están influenciados por el uso de los términos por parte de sus compañeros de trabajo (ya sea correcto o incorrecto). Estos términos a menudo se usan indistintamente. Vea algunos de los comentarios a continuación, por ejemplo.
jvriesem

Respuestas:

1832

Una función es un fragmento de código que se llama por su nombre. Se pueden pasar datos para operar (es decir, los parámetros) y, opcionalmente, se pueden devolver datos (el valor de retorno). Todos los datos que se pasan a una función se pasan explícitamente.

Un método es un fragmento de código que se llama por un nombre asociado con un objeto. En la mayoría de los aspectos, es idéntico a una función, excepto por dos diferencias clave:

  1. A un método se le pasa implícitamente el objeto en el que se llamó.
  2. Un método puede operar en datos contenidos dentro de la clase (recordando que un objeto es una instancia de una clase: la clase es la definición, el objeto es una instancia de esos datos).

(esta es una explicación simplificada, ignorando los problemas de alcance, etc.)

Andrew Edgecombe
fuente
249
Para 1), también debe agregar que los métodos en C ++ se denominan funciones miembro . Por lo tanto, la diferencia entre funciones y métodos en este contexto es análoga a la diferencia entre funciones y funciones miembro en C ++. Además, lenguajes como Java solo tienen métodos. En este caso, las funciones serían análogas a los métodos estáticos y los métodos tendrían el mismo significado. Para 2), debe agregar que un método puede operar en los datos de instancia privada (miembro) declarados como parte de la clase. Cualquier código puede acceder a datos de instancias públicas.
Raffi Khatchadourian
46
Una función es una construcción matemática. Diría que todos los métodos son funciones, pero no todas las funciones son métodos
Tyler Gillies
29
Viniendo de un fondo de programación funcional, siento que hay una profunda distinción entre función y método. Principalmente, los métodos tienen efectos secundarios, y esas funciones deben ser puras, dando así una propiedad bastante agradable de transparencia referencial
HHC
26
@TylerGillies y HHC, estoy de acuerdo en que sería bueno que "función" y "método" significaran lo que querías, pero tus definiciones no reflejan algunos usos muy comunes de esos términos.
Paul Draper
99
Según esta definición, ¿un método estático no se consideraría realmente un método porque no tiene nada que ver con una instancia en particular?
Carcigenicate
963

Un método está en un objeto.
Una función es independiente de un objeto.

Para Java y C #, solo hay métodos.
Para C, solo hay funciones.

Para C ++ y Python dependería de si estás o no en una clase.

Aaron
fuente
39
Es hora de agregar C #.
Rosdi Kasim
77
@RosdiKasim Para C #, solo hay métodos. (ya que incluso los métodos estáticos deben asociarse con un objeto)
Lynn Crumbling
38
¿Qué hay de los métodos estáticos en una clase? Esos serían independientes de un objeto (en Java). ¿No sería una función entonces?
Squeazer
12
@Squeazer Hay una pregunta acerca de que recientemente stackoverflow.com/questions/30402169/… La especificación del lenguaje Java simplemente los diferencia como "método de clase" (estático) y "método de instancia". Entonces todavía son todos métodos.
xji
15
Java tiene expresiones lambda, que son funciones que no son métodos
Max Heiber
228

'método' es la palabra orientada a objetos para 'función' . Eso es prácticamente todo lo que hay que hacer (es decir, no hay una diferencia real).

Desafortunadamente, creo que muchas de las respuestas aquí están perpetuando o avanzando la idea de que hay alguna diferencia compleja y significativa.

Realmente, no hay tanto, solo palabras diferentes para la misma cosa.

[adición tardía]


De hecho, como Brian Neal señaló en un comentario a esta pregunta , el estándar C ++ nunca usa el término 'método' cuando se refiere a funciones miembro. Algunas personas pueden tomar eso como una indicación de que C ++ no es realmente un lenguaje orientado a objetos; sin embargo, prefiero tomarlo como una indicación de que un grupo bastante inteligente de personas no creía que hubiera una razón particularmente fuerte para usar un término diferente.

Michael Burr
fuente
14
Un método es un tipo especial de función con un argumento implícito pasado (una instancia de la clase en la que se define el método). Esto es importante porque una función, en términos estrictos, no debe usar ni modificar nada que no esté en su lista de argumentos.
ty1824
44
@ ty1824 no siempre es el caso de que los métodos pasen argumentos implícitos. En Python, el selfargumento es explícito. Y muchos idiomas tienen métodos estáticos, que no se pasan una instancia.
Max Heiber
1
@mheiber esos son algunos puntos válidos. Con respecto a uno mismo, tiene razón, está explícitamente definido . La clave es que la llamada es implícita, basada en la referencia del objeto original. Hay lenguajes que admiten anular a thiso self, pero esas construcciones generalmente se denominan funciones, en lugar de métodos.
ty1824
1
@mheiber En lo que respecta a los métodos estáticos, Java los implementó como una solución alternativa para que las funciones pudieran implementarse sin requerir un contexto. Llegaría al extremo de proponer que 'método estático' es un término engañoso y debe ser reemplazado ... en un mundo teórico ideal :)
ty1824
1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript y Scala tienen métodos estáticos, por lo que no creo que sea solo una cuestión de Java. Tampoco me gustan: equivalen a usar objetos (paquetes de estado) como si fueran espacios de nombres.
Max Heiber
99

En general: los métodos son funciones que pertenecen a una clase, las funciones pueden estar en cualquier otro ámbito del código, por lo que podría indicar que todos los métodos son funciones, pero no todas las funciones son métodos:

Tome el siguiente ejemplo de python:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

El ejemplo dado muestra una clase llamada "Puerta" que tiene un método o acción llamada "abierta", se llama método porque se declaró dentro de una clase. Hay otra porción de código con "def" justo debajo que define una función, es una función porque no se declara dentro de una clase, esta función llama al método que definimos dentro de nuestra clase como puede ver y finalmente la función está siendo llamado por sí mismo.

Como puede ver, puede llamar a una función en cualquier lugar, pero si desea llamar a un método, debe pasar un nuevo objeto del mismo tipo que la clase en la que se declara el método (Class.method (objeto)) o debe invocar El método dentro del objeto (object.Method ()), al menos en python.

Piense en los métodos como cosas que solo una entidad puede hacer, por lo que si tiene una clase de perro, tendría sentido tener una función de ladrido solo dentro de esa clase y eso sería un método, si también tiene una clase de persona, podría tener sentido escriba una función "feed" para que no pertenezca a ninguna clase ya que tanto los humanos como los perros pueden ser alimentados y podría llamar a eso una función ya que no pertenece a ninguna clase en particular.

Gustavo Rubio
fuente
2
Esta respuesta, principalmente su primera oración, es, con mucho, la mejor respuesta más concisa y general a la pregunta.
yourcomputergenius
61

Manera simple de recordar:

  • F unción → F ree (gratuito no significa que pertenecen a un objeto o clase)
  • M é todo → M brasa (un miembro de un objeto o clase)
Duc Filan
fuente
Como generalmente hay intercambiables, ¿por qué necesitas un mnemotécnico?
Sapphire_Brick
44

Una definición muy general de la diferencia principal entre una Función y un Método :

Las funciones se definen fuera de las clases, mientras que los métodos se definen dentro y dentro de las clases.

Jorgesys
fuente
30

Si tiene ganas de leer aquí está "Mi introducción a los métodos OO"

La idea detrás del paradigma orientado a objetos es "amenazar" que el software se compone de ... bueno, "objetos". Los objetos en el mundo real tienen propiedades, por ejemplo, si tiene un empleado, el empleado tiene un nombre, una identificación de empleado, un puesto, pertenece a un departamento, etc., etc.

El objeto también sabe cómo manejar sus atributos y realizar algunas operaciones en ellos. Digamos que si queremos saber qué está haciendo un empleado en este momento, le preguntaríamos.

employe whatAreYouDoing.

Ese "whatAreYouDoing" es un "mensaje" enviado al objeto. El objeto sabe cómo responder a esas preguntas, se dice que tiene un "método" para resolver la pregunta.

Entonces, la forma en que los objetos tienen que exponer su comportamiento se llaman métodos. Por lo tanto, los métodos son el objeto de artefacto que tiene que "hacer" algo.

Otros métodos posibles son

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

Por otro lado, las funciones son formas en que un lenguaje de programación tiene que calcular algunos datos, por ejemplo, puede tener la función addValues ​​(8, 8) que devuelve 16

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

Dado que los primeros lenguajes de programación populares (como fortran, c, pascal) no cubrieron el paradigma OO, solo llaman a estos artefactos "funciones".

Por ejemplo, la función anterior en C sería:

int addValues( int x, int y ) 
{
   return x + y;
}

No es "natural" decir que un objeto tiene una "función" para realizar alguna acción, porque las funciones están más relacionadas con cosas matemáticas mientras que un Empleado tiene poca matemática, pero puede tener métodos que hacen exactamente lo mismo que las funciones, Por ejemplo, en Java, esta sería la función addValues ​​equivalente.

public static int addValues( int x, int y ) {
    return x + y;
}

¿Luce familiar? Eso es porque Java tiene sus raíces en C ++ y C ++ en C.

Al final es solo un concepto, en la implementación pueden tener el mismo aspecto, pero en la documentación de OO se les llama método.

Aquí hay un ejemplo del objeto empleado anteriormente en Java.

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

La diferencia, entonces, está en el "dominio" donde se aplica.

AppleScript tiene la idea de "lenguaje natural" matphor, que en algún momento tuvo OO. Por ejemplo Smalltalk. Espero que pueda ser razonablemente más fácil para usted comprender los métodos en los objetos después de leer esto.

NOTA: El código no debe compilarse, solo sirve como ejemplo. Siéntase libre de modificar la publicación y agregar el ejemplo de Python.

revs OscarRyz
fuente
3
¡Bravo! Exposición brillante sobre cómo los métodos son comandos para los objetos. Esta es la clave para entender OO y la falta de la retórica que muestra en esta respuesta es la razón por la cual hoy se abusa tanto de OO en la industria. Excelente post.
moffdub 01 de
18

En el mundo OO, los dos se usan comúnmente para significar lo mismo.

Desde una perspectiva pura de Matemáticas y CS, una función siempre devolverá el mismo resultado cuando se llama con los mismos argumentos (f (x, y) = (x + y)). Un método, por otro lado, generalmente se asocia con una instancia de una clase. Sin embargo, una vez más, la mayoría de los lenguajes OO modernos ya no usan el término "función". Muchos métodos estáticos pueden ser muy similares a las funciones, ya que generalmente no tienen estado (no siempre es cierto).

TheSoftwareJedi
fuente
17

Digamos que una función es un bloque de código (generalmente con su propio alcance, y a veces con su propio cierre) que puede recibir algunos argumentos y también puede devolver un resultado.

Un método es una función que es propiedad de un objeto (en algunos sistemas orientados a objetos, es más correcto decir que es propiedad de una clase). Ser "propiedad" de un objeto / clase significa que se refiere al método a través del objeto / clase; por ejemplo, en Java si desea invocar un método "open ()" propiedad de un objeto "puerta", debe escribir "door.open ()".

Por lo general, los métodos también obtienen algunos atributos adicionales que describen su comportamiento dentro del objeto / clase, por ejemplo: visibilidad (relacionada con el concepto de encapsulación orientado a objetos) que define desde qué objetos (o clases) se puede invocar el método.

En muchos lenguajes orientados a objetos, todas las "funciones" pertenecen a algún objeto (o clase) y, por lo tanto, en estos lenguajes no hay funciones que no sean métodos.

Mike Tunnicliffe
fuente
1
Pensé que los métodos podrían ser propiedad de un objeto o clase ya que Javascript (que mencionó en su pregunta) es uno de los lenguajes que contrarresta la tendencia general de los lenguajes orientados a objetos al tener métodos propiedad de objetos y no clases (aunque estructuras similares a existen clases).
Mike Tunnicliffe
15

Los métodos son funciones de las clases. En la jerga normal, las personas intercambian métodos y funcionan por todas partes. Básicamente, puede pensar en ellos como lo mismo (no estoy seguro si las funciones globales se denominan métodos).

http://en.wikipedia.org/wiki/Method_(computer_science)

Declaración
fuente
13

Una función es un concepto matemático. Por ejemplo:

f(x,y) = sin(x) + cos(y)

dice que la función f () devolverá el pecado del primer parámetro agregado al coseno del segundo parámetro. Es solo matemática. Como sucede, sin () y cos () también son funciones. Una función tiene otra propiedad: todas las llamadas a una función con los mismos parámetros deben devolver el mismo resultado.

Un método, por otro lado, es una función que está relacionada con un objeto en un lenguaje orientado a objetos. Tiene un parámetro implícito: el objeto sobre el que se actúa (y su estado).

Entonces, si tiene un objeto Z con un método g (x), es posible que vea lo siguiente:

Z.g(x) = sin(x) + cos(Z.y)

En este caso, se pasa el parámetro x, igual que en el ejemplo de la función anterior. Sin embargo, el parámetro cos () es un valor que vive dentro del objeto Z. Z y los datos que viven dentro de él (Zy) son parámetros implícitos del método g () de Z.

Bradley Mazurek
fuente
13

La función o un método es una pieza de código invocable que realiza algunas operaciones y opcionalmente devuelve un valor.

En lenguaje C se usa el término función. La gente de Java & C # lo diría un método (y una función en este caso se define dentro de una clase / objeto).

Un C ++ programador de podría llamarlo una función o, a veces, un método (dependiendo de si está escribiendo código de C ++ de estilo de procedimiento o está haciendo una forma orientada a objetos de C ++, también un programador de C / C ++ probablemente lo llamaría una función porque el término 'método' es menos utilizado en la literatura C / C ++).

Utiliza una función simplemente llamando su nombre como,

result = mySum(num1, num2);


Llamaría a un método haciendo referencia a su objeto primero como,

result = MyCalc.mySum(num1,num2);
Abdullah Leghari
fuente
13

Históricamente, puede haber habido una sutil diferencia con un "método" que es algo que no devuelve un valor, y una "función" que sí lo hace. Cada idioma tiene su propio léxico de términos con un significado especial.

En "C" , la palabra "función" significa una rutina de programa .

En Java , el término "función" no tiene ningún significado especial. Mientras que "método" significa una de las rutinas que forman la implementación de una clase.

En C # eso se traduciría como:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

Pero realmente, reitero que realmente no hay diferencia en los 2 conceptos. Si usa el término "función" en discusiones informales sobre Java, la gente asumirá que se refería a "método" y continuará. No lo use en documentos o presentaciones adecuadas sobre Java, o se verá tonto.

Jaimin Patel
fuente
En realidad, en su ejemplo ambos son method... o lo llamaría procedurey function.
Yousha Aleayoub
9

La función es un conjunto de lógica que puede usarse para manipular datos.

Mientras, Método es una función que se utiliza para manipular los datos del objeto al que pertenece. Entonces, técnicamente, si tiene una función que no está completamente relacionada con su clase pero se declaró en la clase, no es un método; Se llama un mal diseño.


fuente
8

Los métodos en una clase actúan en la instancia de la clase, llamada objeto.

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}
Declaración
fuente
8

En lenguajes OO como Object Pascal o C ++, un "método" es una función asociada con un objeto. Entonces, por ejemplo, un objeto "Perro" podría tener una función "ladrar" y esto se consideraría un "Método". Por el contrario, la función "StrLen" es independiente (proporciona la longitud de una cadena proporcionada como argumento). Por lo tanto, es solo una "función". Javascript también está técnicamente orientado a objetos, pero enfrenta muchas limitaciones en comparación con un lenguaje completo como C ++, C # o Pascal. No obstante, la distinción aún debe mantenerse.

Un par de hechos adicionales: C # está totalmente orientado a objetos, por lo que no puede crear "funciones" independientes. En C #, cada función está vinculada a un objeto y, por lo tanto, técnicamente es un "método". El truco es que pocas personas en C # se refieren a ellos como "métodos", simplemente usan el término "funciones" porque no hay ninguna distinción real que hacer.

Finalmente, para que los gurús de Pascal no me salten encima, Pascal también diferencia entre "funciones" (que devuelven un valor) y "procedimientos" que no lo hacen. C # no hace esta distinción explícitamente aunque, por supuesto, puede elegir devolver un valor o no.

Mark Brittingham
fuente
8

Como mencionó Python, lo siguiente podría ser una ilustración útil de la relación entre métodos y objetos en la mayoría de los lenguajes modernos orientados a objetos. En pocas palabras, lo que ellos llaman un "método" es solo una función a la que se le pasa un argumento adicional (como han señalado otras respuestas), pero Python lo hace más explícito que la mayoría de los lenguajes.

# perfectly normal function
def hello(greetee):
  print "Hello", greetee

# generalise a bit (still a function though)
def greet(greeting, greetee):
  print greeting, greetee

# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
  print greeter.greeting, greetee

# very simple class we can pass to greet_with_greeter
class Greeter(object):
  def __init__(self, greeting):
    self.greeting = greeting

  # while we're at it, here's a method that uses self.greeting...
  def greet(self, greetee):
    print self.greeting, greetee

# save an object of class Greeter for later
hello_greeter = Greeter("Hello")

# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")

Ahora compare la función greet_with_greetery el método greet: la única diferencia es el nombre del primer parámetro (en la función lo llamé "greeter", en el método lo llamé "self"). Entonces, puedo usar el greetmétodo exactamente de la misma manera que uso la greet_with_greeterfunción (usando la sintaxis "punto" para llegar a ella, ya que la definí dentro de una clase):

Greeter.greet(hello_greeter, "World")

Así que efectivamente he convertido un método en una función. ¿Puedo convertir una función en un método? Bueno, como Python te permite jugar con las clases después de que estén definidas, intentemos:

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

Sí, la función greet_with_greeterahora también se conoce como método greet2. Esto muestra la única diferencia real entre un método y una función: cuando llama a un método "sobre" un objeto llamando object.method(args), el lenguaje lo convierte mágicamente method(object, args).

(Los puristas de OO podrían argumentar que un método es algo diferente de una función, y si entras en Python o Ruby avanzados, ¡o Smalltalk!) Comenzarás a ver su punto. Además, algunos lenguajes dan a los métodos acceso especial a partes de un objeto. Pero la principal diferencia conceptual sigue siendo el parámetro adicional oculto).

Sam Stokes
fuente
7

para mí: la función de un método y una función es la misma si estoy de acuerdo en que:

  • una función puede devolver un valor
  • puede esperar parámetros

Al igual que cualquier pieza de código, puede tener objetos que inserte y puede tener un objeto que viene como resultado. Al hacerlo, podrían cambiar el estado de un objeto, pero eso no cambiaría su funcionamiento básico para mí.

Puede haber una diferencia de definición al llamar a funciones de objetos u otros códigos. Pero, ¿no es eso algo para las diferencias verbales y es por eso que la gente las intercambia? El ejemplo de cálculo que menciono sería cuidadoso. porque contrato empleados para hacer mis cálculos:

new Employer().calculateSum( 8, 8 );

Al hacerlo de esa manera, puedo confiar en que un empleador sea responsable de los cálculos. Si quiere más dinero, lo libero y dejo que la función del recolector de carburador de deshacerse de los empleados no utilizados haga el resto y obtenga un nuevo empleado.

Incluso argumentar que un método es una función de objetos y que una función es computación no conectada no me ayudará. El descriptor de la función en sí mismo e idealmente la documentación de la función me dirá qué necesita y qué puede devolver. El resto, como manipular el estado de algún objeto, no es realmente transparente para mí. Espero que tanto las funciones como los métodos entreguen y manipulen lo que dicen sin necesidad de saber en detalle cómo lo hacen. Incluso una función computacional pura podría cambiar el estado de la consola o agregarse a un archivo de registro.

Dirk Schumacher
fuente
5

No complicamos demasiado lo que debería ser una respuesta muy simple. Los métodos y las funciones son lo mismo. Llama a una función una función cuando está fuera de una clase, y llama a una función un método cuando se escribe dentro de una clase.

SamyCode
fuente
4

Según tengo entendido, un método es cualquier operación que se puede realizar en una clase. Es un término general utilizado en la programación.

En muchos idiomas, los métodos están representados por funciones y subrutinas. La principal distinción que usan la mayoría de los idiomas para estos es que las funciones pueden devolver un valor al llamador y una subrutina no. Sin embargo, muchos lenguajes modernos solo tienen funciones, pero opcionalmente no pueden devolver ningún valor.

Por ejemplo, supongamos que desea describir un gato y le gustaría poder bostezar. Crearía una clase Cat, con un método de bostezo, que probablemente sería una función sin ningún valor de retorno.

marcj
fuente
4

Para una aproximación de primer orden, un método (en estilo C ++ OO) es otra palabra para una función miembro, que es una función que forma parte de una clase.

En lenguajes como C / C ++ puede tener funciones que no son miembros de una clase; no llamas a una función no asociada a una clase un método.

Capitán Segfault
fuente
4

La función es el concepto que pertenece principalmente a la programación orientada a procedimientos donde una función es una entidad que puede procesar datos y le devuelve valor

Método es el concepto de programación orientada a objetos donde un método es miembro de una clase que principalmente procesa en los miembros de la clase.

Akshay Khale
fuente
3

En mi humilde opinión, las personas solo querían inventar nuevas palabras para facilitar la comunicación entre los programadores cuando querían referirse a las funciones dentro de los objetos.

Si está diciendo métodos, quiere decir funciones dentro de la clase. Si está diciendo funciones, quiere decir simplemente funciones fuera de la clase.

La verdad es que ambas palabras se usan para describir funciones. Incluso si lo usaste mal, no pasa nada malo. Ambas palabras describen bien lo que quieres lograr en tu código.

La función es un código que tiene que desempeñar un papel ( una función ) de hacer algo. El método es un método para resolver el problema.

Hace la misma cosa. Es la misma cosa. Si desea ser súper preciso y seguir la convención, puede llamar a los métodos como funciones dentro de los objetos.

Morfidon
fuente
2

No soy un experto, pero esto es lo que sé:

  1. La función es un término del lenguaje C, se refiere a un fragmento de código y el nombre de la función será el identificador para usar esta función.

  2. Método es el término OO, normalmente tiene un puntero en el parámetro de la función. No puede invocar este fragmento de código como C, debe usar el objeto para invocarlo.

  3. Los métodos de invocación también son diferentes. Aquí invoque el significado para encontrar la dirección de este código. C / C ++, el tiempo de enlace utilizará el símbolo de función para localizar.

  4. Objecive-C es diferente. Invocar significando una función C para usar la estructura de datos para encontrar la dirección. Significa que todo se sabe en tiempo de ejecución.

Marvin
fuente
2

Sé que muchos otros ya han respondido, pero descubrí que la siguiente es una respuesta de una sola línea simple pero efectiva. Aunque no se ve mucho mejor que otras respuestas aquí, pero si lo lee detenidamente, tiene todo lo que necesita saber sobre el método y la función.

Un método es una función que tiene un receptor definido, en términos OOP, un método es una función en una instancia de un objeto.

f-sociedad
fuente
2

Diferencia entre métodos y funciones

De leer este documento en Microsoft

Los miembros que contienen código ejecutable se conocen colectivamente como los miembros de función de una clase. La sección anterior describe los métodos, que son el tipo principal de miembros de función. Esta sección describe los otros tipos de miembros de función compatibles con C #: constructores, propiedades, indexadores, eventos, operadores y finalizadores.

Entonces los métodos son el subconjunto de las funciones. Cada método es una función, pero no todas las funciones son un método, por ejemplo, constructorno se puede decir como método pero es una función.

Siraj Alam
fuente
Las propiedades, los indexadores y los eventos no son funciones. Los captadores, establecedores (para propiedades e indexadores), sumadores y eliminadores (para eventos) son funciones. Los miembros de funciones son miembros que están asociados con una o más funciones, pero no necesariamente por ser una función.
Jon Hanna
2

Función: una función en un código independiente que incluye algo de lógica y debe llamarse de manera independiente y se define fuera de la clase.

Método: un método es un fragmento de código independiente que se llama en referencia a algún objeto y se define dentro de la clase.

Aditya
fuente
¿Cómo se llama un fragmento de código en una clase estática, que también es estática, es un método o una función? Una función / método estático de una clase no necesita un objeto de la clase en la que se declara.
Wolfgang Roth
1

Aquí hay alguna explicación para método vs. función usando ejemplos de JavaScript:

test(20, 50); Esta función define y usa para ejecutar algunos pasos o devolver algo que puede almacenarse / usarse en algún lugar.

Puede reutilizar el código: defina el código una vez y utilícelo muchas veces.

Puede usar el mismo código muchas veces con diferentes argumentos, para producir resultados diferentes.

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); here test () puede ser un método de algún objeto o un prototipo definido a medida para objetos incorporados, aquí hay más explicaciones:

Los métodos de JavaScript son las acciones que se pueden realizar en los objetos.

Un método de JavaScript es una propiedad que contiene una definición de función.

Propiedad / método incorporado para cadenas en javascript:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

Ejemplo personalizado:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

También puede definir propiedades para String, Array, etc., por ejemplo.

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

Algunas referencias: Método de objetos Javascript , funciones , más información sobre el prototipo

Lahar Shah
fuente
No publiques respuestas idénticas a múltiples preguntas. Publique una buena respuesta, luego vote / marque para cerrar las otras preguntas como duplicados. Si la pregunta no es un duplicado, adapte sus respuestas a la pregunta.
Paul Roub
Gracias por los comentarios, no diseñé otra respuesta, borré esa respuesta. :-)
Lahar Shah
1

TL; DR

Una función es una pieza de código para ejecutar.
Un método es una función dentro de un objeto.

Ejemplo de una función:


function sum(){
  console.log("sum")l
}

Ejemplo de un método:

const obj = {
a:1,
b:2,
sum(){
  }
}

Por eso decimos que una palabra clave "this" dentro de una función no es muy útil a menos que la usemos con call, apply o bind ... porque call, apply, bind llamará a esa función como un método dentro de object ==> básicamente convierte función a método

yogendra saxena
fuente
1

A menudo son intercambiables, pero un método generalmente se refiere a una subrutina dentro de una clase, y una función generalmente se refiere a una subrutina fuera de la clase. por ejemplo, en Ruby:

# function
def putSqr(a)
   puts a ** 2
end


class Math2
   # method
   def putSqr(a)
      puts a ** 2
   end
end

En Java, donde todo (excepto las declaraciones de paquete e importación) debe estar dentro de la clase, la gente casi siempre se refiere a ellos como "métodos".

Zafiro_Brick
fuente