Jump to content
UnitySpain
Sign in to follow this  
Quaternion

¿Qué diferencia hay entre una función y un metodo?

Recommended Posts

Hola!

He estado investigando a fondo que diferencia hay entre una función y un metodo y la verdad es que en vez de aclarar mis dudas, lo ha empeorado aún más todavía.

Veamos, yo entiendo como función algo parecido a esto:

Mi ejemplo de Función

 

Como se puede ver en mi ejemplo, eso para mí es una funcion, porque me esta devolviendo un valor (en este caso me devuelve la destrucción del GameObject si pulso clic izquierdo).

 

El problema y confusión me viene cuando intento entender que es un metodo, he investigado en paginas y he sacado 3 conclusiones:

1-Un metodo y una función son lo mismo

2-Una función devuelve un valor  y un metodo no devuelve valores "porque es tipo void".

3- Los metodos se definen dentro de y son parte de las clases y las funciones fuera de las clases.

 

Tengo que decir, que en el punto Nº2 NO estoy de acuerdo, ya que un void si devuelve un valor, en mi ejemplo la función de destruir la bomba tiene un void y me devuelve esa acción, por lo tanto yo creo que ese punto es mentira. Esta es la fuente en la que he visto eso:

 https://es.stackoverflow.com/questions/7403/diferencias-entre-métodos-procedimiento-función-para-que-sirven-cada-uno-y-co

Por otra parte me gustaría que me aclaraseis vosotros que diferencia hay entre funcion y metodo y si es con alguna captura de pantalla señalandome cual es cual mejor todavia, porque la verdad estoy muuuy confuso.

 

Share this post


Link to post
Share on other sites

Este es un tema de programación; teoría y conceptos, te voy  a dar la respuesta puntual.

Son lo mismo.

Ahora para aclararte un poco, la palabra "Método" es la usada para definir este punto, es lo que vas a encontrar en los libros de programación sobre C# que es el lenguaje que usas en el ejemplo; no sabría decirte si es la misma palabra que se usa en todos los lenguajes, y la palabra "Función" esta es una palabra usada informalmente; generalmente la he observado en tutoriales como los que hay en youtube, pero en el caso se refieren al mismo proceso realizado dentro del lenguaje C#.

PD: lo que dices que tu ejemplo devuelve un valor; estas equivocado, cuando encuentras información acerca de métodos que devuelven un valor se refieren a que te dan la instancia o referencia de un "objeto", en tu ejemplo este GameObject es destruido, pero esa es solo una acción, no estas recibiendo la referencia del objeto destruido

Share this post


Link to post
Share on other sites
5 hours ago, Caesar said:

PD: lo que dices que tu ejemplo devuelve un valor; estas equivocado, cuando encuentras información acerca de métodos que devuelven un valor se refieren a que te dan la instancia o referencia de un "objeto", en tu ejemplo este GameObject es destruido, pero esa es solo una acción, no estas recibiendo la referencia del objeto destruido

¿La instancia es una clonación de ese objeto? ¿Qué significa exactemente instanciar?   Interesante tu respuesta, creo que si me resuelves esta duda podré entender muchas cosas.  Aunque yo creo que Instanciar es "clonar" on objeto ¿Estoy en lo correcto?

Edited by Quaternion

Share this post


Link to post
Share on other sites

Cuando hablamos de un objeto en C# nos estamos refiriendo a cualquier variable creada de una clase definida en C#, es decir las variables que encontramos en los atributos de clase, son objetos de la clase a la cual pertenecen, en términos prácticos te lo pongo así.

public Class Ejemplo {
	//Area Atributos
	public int variableUno;
	private string variableDos;
	protected GameObject variableTres;
	//Area Constructores
	public Ejemplo (){...}
	//Area Metodos
	public void MetodoUno (...)
	private string MetodoDOs (...)
}

en el Área de atributos puedes observar lo q comúnmente se le "dice" variables y son 3 como puedes observar variableUno, variableDos y variableTres, cada uno representa una instancia de la clase a cual pertenece, es decir; a la Clase int, a la Clase string y a la Clase GameObject respectivamente.

Estos "objetos" estan instanciados y tenemos acceso a ellos mediante su definicion dentro de la clase, es decir cuando queremos usarlos usamos las palabras que los definen, variableUno, variableDos y variableTres, eso es estar referenciado.

Share this post


Link to post
Share on other sites

Pensá a función vs método como miembros vs variable (en paréntesis -->), función viene más del palo de C, cuando empezó C++ con las clases se empezaron a denominar métodos(miembros) a las funciones(variables) de la clase. me dá igual, prefiero método, hoy en día en POO todo se define via clases así que da igual.

2 hours ago, Caesar said:

en el Área de atributos puedes observar lo q comúnmente se le "dice" variables y son 3 como puedes observar variableUno, variableDos y variableTres, cada uno representa una instancia de la clase a cual pertenece, es decir; a la Clase int, a la Clase string y a la Clase GameObject respectivamente

no los llamaría atributos, prefiero la palabra miembros, ya que en C# los atributos van antes de los campos/clases y se expresan así "[ .... ]", pero entiendo tu punto.

 

2 hours ago, Quaternion said:

¿La instancia es una clonación de ese objeto?

2 hours ago, Quaternion said:

¿Qué significa exactemente instanciar?

Pensalo a la clase como el plano de construcción, la instancia u objeto es el resultado de construir algo con ese plano, por ej class Persona (con miembros nombre, color de ojos, altura, etc) , y la instancia puede ser tal que salga la persona : Pedro, color de ojos azules, altura 1.78 m, etc. En varias bibliografías (por lo menos de C++) un objeto de una clase es una instancia.

2 hours ago, Quaternion said:

Aunque yo creo que Instanciar es "clonar" on objeto ¿Estoy en lo correcto?

No es clonar, bueno está en el parrafo anterior, pero con la clase sola no hacés nada, tenés clases que pueden tener varias instancias (comunes), que pueden tener una sola instancia (singleton, ej los managers) o que no pueden tener instancias (static class), estas ultimas las tenes por ej cuando tenés una clase de utilidades, donde está la funcionalidad, pero no la ofrece nadie, es común para todos, es decir no se instancia nada.

Edited by lightbug

Share this post


Link to post
Share on other sites

Son las tantas de la mañana, y ya no sé ni lo que leo. Si lo que pongo a continuación lo habéis escrito antes, disculpad por adelantado...

 

Se me ocurren 3-4 diferencias principales entre una Función y un Método:

  • Una Función puede existir en cualquier parte del código (bien estructurado) y no depende de ninguna clase. Un Método es exclusivo de clases (POO) y por tanto depende de ellas, ya que va alojado en su interior.
  • Tanto la función como el método pueden devolver valores. El argumento del "Void" es totalmente inválido, no tiene nada que ver.
  • A nivel de funcionalidad, no existen diferencias. Sirven para lo mismo. La ventaja de los Constructores y Destructores es que permiten personalizar un comportamiento por defecto cuando creamos o destruimos un objeto de una clase. Así que nos ahorramos algo de código "basura" que habite en algún manager o controller...
  • Por lo general, un método requiere alojar memoria RAM extra para la clase. Una función aloja memoria RAM genérica, así que supuestamente "ocupa un poco menos".

Share this post


Link to post
Share on other sites

En resumen:

un método es una función de un objeto

una función no acarrea existencia de objeto 

no?

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...