Qué es un "Método en programación

Introducción — ¿Qué es un método en programación?

ACLARACIÓN IMPORTANTE ANTES DE EMPEZAR
En pro­gra­mación, cuan­do vean la pal­abra "MÉTODO" nor­mal­mente se tra­ta de un CONJUNTO DE INSTRUCCIONES DE CÓDIGO agru­padas den­tro de una fun­ción. Recuer­do que este tér­mi­no me resulta­ba un poco extraño y solo cuan­do estudié pro­gra­mación ori­en­ta­da a obje­tos entendí la inter­pretación de la pal­abra "Méto­do" en este contexto.

En este artícu­lo vemos qué son los méto­dos en pro­gra­mación y encon­trarás un vídeo de mi canal de YouTube en el que está resum­i­da esta informacion. 

Los méto­dos de pro­gra­mación sir­ven para agru­par instruc­ciones de códi­go y luego este con­jun­to de instruc­ciones pueden ser lla­madas cuan­tas veces sean nece­sarias sim­ple­mente hacien­do la "lla­ma­da al méto­do", esto nos per­mite reuti­lizar códi­go y resolver prob­le­mas cada vez mas com­ple­jos gra­cias al aumen­to de abstrac­ción sobre un problema.

En este artícu­lo se incluye como ejem­p­los la declaración de cua­tro méto­dos de pro­gra­mación, un méto­do void sin parámet­ros de entra­da, otro méto­do void con parámet­ros de entra­da, un méto­do con parámetro de sal­i­da pero sin parámet­ros de entra­da y por últi­mo un méto­do con parámet­ros de entra­da y de sal­i­da.

Tengo algunos vídeos para recomendarte sobre métodos:

En el sigu­iente vídeo vemos qué es un méto­do, sus car­ac­terís­ti­cas, la sin­taxis para definir un método.


En este otro vídeo se ven algunos ejem­p­los de méto­dos en pro­gra­mación en lengua­je C# en Unity.

¿Qué es un método en programación?

En pro­gra­mación, méto­do se le lla­ma a un bloque de códi­go que tiene definido en su inte­ri­or un con­jun­to de instruc­ciones, estas instruc­ciones real­izan una deter­mi­na­da tarea. Cuan­do se nece­si­ta hac­er uso de la fun­ción defini­da en el méto­do sim­ple­mente se lo lla­ma por su nom­bre, cuan­do el flu­jo del pro­gra­ma pasa por una lla­ma­da a un méto­do el pun­tero salta a la región donde está definido el méto­do, eje­cu­ta todas sus instruc­ciones y al finalizar retor­na a la línea pos­te­ri­or a la lla­ma­da al método.

Para definir un méto­do hay que indicar si ten­drá o no parámet­ros de sal­i­da, es decir si el méto­do pro­duce un dato como resul­ta­do de su eje­cu­ción y en caso afir­ma­ti­vo indicar ese tipo de dato. Luego se debe definir un nom­bre de iden­ti­fi­cación, por con­ven­ción debe comen­zar con la primera letra en mayús­cu­la, además de inten­tar que el nom­bre sea rep­re­sen­ta­ti­vo de la fun­ción que desem­peña. Luego debe­mos indicar si tiene o no parámet­ros de entra­da, en caso afir­ma­ti­vo, para cada parámetro de entra­da incluir el tipo de cada uno y el nom­bre con el que se cono­cerá dicho parámetro den­tro del méto­do. Final­mente den­tro del méto­do se inser­tan todas las instruc­ciones de códi­go a eje­cu­tar, estas instruc­ciones pueden incluir la lla­ma­da a otros méto­dos, inclu­so un méto­do puede lla­marse a si mis­mo dan­do lugar a algo­rit­mos recur­sivos, en este últi­mo caso, de no estable­cer bien la condi­ción de final­ización de las lla­madas recur­si­vas al méto­do, ten­dríamos un méto­do que se lla­ma indefinida­mente has­ta que la pila de eje­cu­ciones colap­sa dan­do lugar al famoso error "Stack Overflow".

cuadro que describe las propiedades basicas de los metodos en programacion, parámetros, visibilidad
Fig. 1: Esque­ma que ilus­tra las propiedades bási­cas de un método.

Módularización

En la figu­ra 1 vemos al méto­do rep­re­sen­ta­do como una caja, en la que aparece el nom­bre del méto­do como títu­lo, se especi­fi­ca el ini­cio y el final del méto­do y el con­jun­to de instruc­ciones se encuen­tra den­tro de esta región.

Para enten­der de qué se tra­ta la mod­u­lar­ización vamos a ver la figu­ra 2. En la izquier­da vemos rep­re­sen­ta­da una lista larga de instruc­ciones de programación. 

Aho­ra den­tro de esa lista hay cier­to número de instruc­ciones que se uti­lizan en más de un lugar, las instruc­ciones A, B, C y D. Dig­amos que estas instruc­ciones real­izan una tarea en con­cre­to y siem­pre se eje­cu­tan juntas.

metodos en programacion, abstraccion y reutilización de código
Fig. 2: A izquier­da un códi­go con instruc­ciones repeti­das.
A derecha el mis­mo códi­go con módulos.

Supong­amos que aho­ra debe­mos hac­er cam­bios en esas instruc­ciones (por ejem­p­lo para mejo­rar la man­era en la que resuelve la tarea o agre­gar fun­cional­i­dad), lo que ocurre es que debe­mos iden­ti­ficar todas las regiones donde están esas instrucciones.

Seria genial si pudiése­mos cam­biar las cosas en un solo lugar y los cam­bios se apliquen en todas las regiones donde se usen estas instruc­ciones, ¿no?

Esto es pre­cisa­mente lo que logramos con los méto­dos, nos per­miten agru­par con­jun­tos de instruc­ciones en un módu­lo inde­pen­di­ente, una caja negra por así decir­lo, aquí es donde entra en juego el con­cep­to de abstrac­ción, sabe­mos que el méto­do cumple una deter­mi­na­da fun­ción pero des­de afuera no nos intere­sa real­mente lo que hay en su inte­ri­or, el méto­do puede ser lla­ma­do cuan­do sea nece­sario sabi­en­do que cumplirá la fun­ción que le fue pro­gra­ma­da pre­vi­a­mente. Como se obser­va a la derecha en la figu­ra 2, las instruc­ciones aho­ra fueron reem­plazadas por el nom­bre del método.

Parámetros de entrada y salida

En la figu­ra 1 hay fle­chas que entran y salen del méto­do. Con esto inten­to rep­re­sen­tar la entra­da y sal­i­da de parámetros. 

Podemos hac­er que nue­stro méteo­do requiera parámet­ros de entra­da, los cuales usamos en el inte­ri­or para hac­er cál­cu­los o realizar cualquier tipo de tarea.

Además podemos hac­er que la eje­cu­ción del méto­do pro­duz­ca un dato de sal­i­da, que usare­mos fuera del método.

Métodos públicos y privados — Visibilidad

Por últi­mo en la figu­ra 1 vemos un ojo nor­mal y otro ojo tacha­do. Esto rep­re­sen­ta la vis­i­bil­i­dad que ten­drá el méto­do, lo cual es un tema de pro­gra­mación ori­en­ta­da a obje­tos, no vamos a pro­fun­dizar en este artícu­lo pero en prin­ci­pio dig­amos que podemos ten­er méto­dos públi­cos y méto­dos privados.

Los méto­dos públi­cos podremos eje­cu­tar­los des­de otros Scripts por ejem­p­lo, o podremos eje­cu­tar­los des­de un com­po­nente en la jer­ar­quía en Uni­ty, por ejem­p­lo un botón. 

Los méto­dos pri­va­dos no serán acce­si­bles des­de con­tex­tos exter­nos al Script donde está definido.

Sintaxis

La sin­taxis es el con­jun­to de reglas estable­ci­das en un lengua­je para escribir el códi­go, en la figu­ra 3 vemos posi­bles sin­taxis de un método,

sintaxis de los métodos en programación en java y c#
Fig. 3: Dis­tin­tas com­bi­na­ciones de parámet­ros de entra­da y sal­i­da para los métodos.

Esta sin­taxis se puede aplicar al lengua­je C# y Java, un detalle es que todos los méto­dos son públi­cos, pero podríamos reem­plazar la pal­abra "pub­lic" por "pri­vate" y la sin­taxis sería correcta.

Declaración de un método

Ejemplo 1 — Método void que no requiere parámetros

Anal­ice­mos el méto­do que se encuen­tra arri­ba a la izquier­da en la figu­ra 3. Ten­emos la estruc­tura de un méto­do públi­co que no requiere parámet­ros y no devuelve parámetros. 

Esta estruc­tura la podemos encon­trar por ejem­p­lo en el script "Game­Con­trol" del proyec­to Mi primer juego en Uni­ty.
Tra­ba­jamos en este script en el video 4 de la serie.

proyecto unity.  codigo c#. metodo perteneciente a una clase que coloca al personaje en una posicion aleatoria del escenario
Fig. 4: Méto­do perteneciente al script: "Game­Con­trol".

Obser­va­mos que ha sido declar­a­do como pri­va­do en lugar de públi­co, seguida­mente encon­tramos la pal­abra "void" con la que indicamos que este méto­do no va a devolver parámet­ros.
Luego el nom­bre del méto­do: "pla­ce­Play­er­Ran­dom­ly".
Se abre y se cier­ran parén­te­sis con lo que se indi­ca que este méto­do no nece­si­ta que le demos parámetros.

El comien­zo y final del méto­do se indi­ca uti­lizan­do llaves. En el inte­ri­or estarán todas las instruc­ciones del método.

Invocación o llamada a un método

Una vez que el méto­do está definido podemos hac­er que se eje­cute des­de cualquier parte del script, inclu­so podemos invo­car­lo des­de otros scripts.

En la sigu­iente figu­ra se mues­tra la invo­cación al méto­do "pla­ce­Play­er­Ran­dom­ly" efec­tu­a­da en el méto­do "startGame" del mis­mo script "Game­Con­trol".

proyecto unity.  codigo c#. metodo perteneciente a una clase que realiza todas las acciones necesarias para empezar el juego
Fig. 5: En amar­il­lo: invo­cación al méto­do "pla­ce­Play­er­Ran­dom­ly".

Para invo­car este méto­do se escribe su nom­bre y se abren y cier­ran parén­te­sis, cer­ramos la instruc­ción con pun­to y coma. Hacien­do esto esta­mos logran­do que se eje­cuten todas las instruc­ciones del método.

Noten como los nom­bres de los méto­dos ya nos van ayu­dan­do a enten­der lo que está pasan­do. Al comen­zar el juego se debe colo­car el per­son­aje aleatoriamente. 

Des­de el pun­to de vista de "startGame" el méto­do "pla­ce­Play­er­Ran­dom­ly" es una fun­ción que hace todo lo nece­sario para colo­car el per­son­aje aleato­ri­a­mente. El méto­do "startGame" no sabe cómo es que lo hace exac­ta­mente pero no le impor­ta, debido a que "pla­ce­Play­er­Ran­dom­ly" hace bien su trabajo.

Ejemplo 2 — Método void con parámetros de entrada

En la esquina supe­ri­or derecha de la figu­ra 3 ten­emos la estruc­tura de un méto­do que no devuelve parámet­ros pero si los requiere para funcionar.

proyecto unity.  codigo c#. metodo perteneciente a una clase que modifica la interfaz gráfica para mostrar el tiempo de la partida
Fig. 6: Méto­do "write­Timer" del script UIManager.

Este méto­do requiere dos parámet­ros para fun­cionar: un val­or entero m que indi­cará los min­u­tos del timer y un val­or entero s que indi­cará los segundos.

proyecto unity.  codigo c#. metodo perteneciente a una clase que se encarga de añadir segundos al timer
Fig. 7: Invo­cación al méto­do "write­Timer" des­de el Script "Timer".

La invo­cación de este méto­do ocurre en var­ios lugares del códi­go, en par­tic­u­lar el méto­do "addSec­onds" perteneciente al Script "Timer", este méto­do recibe como parámet­ros un entero "s" que rep­re­sen­ta la can­ti­dad de segun­dos que se deben agre­gar al timer debido a que el per­son­aje agar­ró uno de los relo­jes que hay en el esce­nario.
El méto­do "addSec­onds" hace algu­nas opera­ciones con la vari­able "s" para actu­alizar el tiem­po y final­mente eje­cu­ta el méto­do "write­Timer" que mues­tra los nuevos val­ores de tiem­po en pantalla.

Dos obser­va­ciones: la primera es que como esta­mos eje­cu­tan­do el méto­do des­de otro Script es nece­sario agre­gar "uiMan­ag­er." (prestar aten­ción al pun­to) antes de escribir el nom­bre del méto­do "write­Timer".
La segun­da es que los parámet­ros se ingre­san den­tro de los parén­te­sis y sep­a­ra­dos por coma.

En ambos scripts util­icé nom­bres con­fu­sos (m y s) a propósi­to para que en el futuro, cuan­do hable­mos sobre con­tex­tos, nos sir­va para analizar.

Ejemplo 3 — Método con parámetro de salida pero no de entrada

Pasamos a los méto­dos que devuel­ven parámetros.

El sigu­iente ejem­p­lo que se cor­re­sponde con la estruc­tura ilustra­da en la esquina infe­ri­or izquier­da de la figu­ra 3, un méto­do que devuelve un dato y no requiere parámet­ros para funcionar.

proyecto unity.  codigo c#.metodo perteneciente a una clase que devuelve una posicion aleatoria dentro de una determinada pieza.
Fig. 8: Méto­do "getRan­dom­Po­si­tion" del Script "Labyrinth­Piece".

El dato que devuelve este méto­do es un "Vector3" y se indi­ca en la declaración, luego de la pal­abra "pub­lic". Obser­ven que la primer línea que no es un comen­tario dice: "Vector3 posi­tion;", ahí esta­mos declaran­do un Vector3 que lla­mamos "posi­tion", luego hace­mos algunos cál­cu­los y al final del méto­do escribi­mos: "return posi­tion;" indi­can­do que devolve­mos ese Vector3.

Este méto­do lo que hace es devolver un Vector3 (com­po­nente x,y,z) que rep­re­sen­ta una posi­ción aleato­ria que pertenece al inte­ri­or de una deter­mi­na­da pieza de laber­in­to. De esta for­ma podemos usar esa posi­ción para colo­car el pedestal o los relo­jes sin pre­ocu­parnos por ejem­p­lo de que aparez­can incrus­ta­dos en una pared.

proyecto unity.  codigo c#. llamado del metodo que devuelva una posicion aleatoria del escenario
Fig. 9: Invo­cación al méto­do "getRan­dom­Po­si­tion".

No es fácil enten­der la instruc­ción resalta­da en la figu­ra 9. Por aho­ra observe­mos dos cosas, la primera es que hace­mos una lla­ma­da al méto­do "getRan­dom­Po­si­tion" uti­lizan­do su nom­bre (como se ve al final de la instruc­ción). La segun­da es que el resul­ta­do de esa invo­cación es un dato Vector3, por lo tan­to, uti­lizan­do el sig­no igual, lo asig­namos al dato "rP" que se define como Vector3.

Ejemplo 4 — Métodos con parámetros de entrada y salida

El últi­mo ejem­p­lo se cor­re­sponde con la estruc­tura ilustra­da en la esquina infe­ri­or derecha de la figu­ra 3, un méto­do que devuelve un dato y requiere parámet­ros para funcionar. 

proyecto unity.  codigo c#. metodo para comparar las puntuaciones de los jugadores
Fig. 10: Declaración del méto­do "isBestScore".

Vemos que en la declaración dec­i­mos que el méto­do "isBestScore" devuelve un dato tipo bool y requiere un dato tipo int que lla­mamos "val".

Si querés saber un poco sobre datos prim­i­tivos te invi­to a leer este artícu­lo sobre vari­ables o ver este video.

El méto­do "isBestScore" devuelve una vari­able que puede valer ver­dadero o false (true or false). La util­i­dad de este méto­do es que lo uti­lizamos para pre­gun­tar si la pun­tuación obteni­da en la par­ti­da (val) es mejor que la que hay guarda­da has­ta el momen­to (bestScoreVal­ue).

proyecto unity.  codigo c#. utilizacion del metodo para comparar las puntuaciones de los jugadores
Fig. 11: Invo­cación del méto­do "isBestScore".

La invo­cación a este méto­do se hace en el méto­do "game­Won". Como el méto­do devuelve un val­or tipo bool, lo podemos usar direc­ta­mente como argu­men­to de una sen­ten­cia if, debido a que "score.isBestScore(time)" es equiv­a­lente a ten­er un val­or ver­dadero o falso.

Método StartGame del Script GameControl

Para ter­mi­nar la figu­ra 12 se obser­va el méto­do "startGame" jun­to con los demás méto­dos a los que va invocando.

Además de agru­par instruc­ciones, un méto­do debe ten­er un propósi­to bien estable­ci­do y que sea coher­ente con el nom­bre que le dimos, de esta for­ma podremos saber ráp­i­da­mente cúal es su fun­cion y qué tipo de instruc­ciones puede contener.

proyecto unity.  codigo c#. esquema de la ejecucion del juego, metodo startGame
Fig. 12: Declaración del méto­do "isBestScore".

Por ejem­p­lo el méto­do "startGame" se encar­ga de coor­di­nar una serie de acciones para comen­zar el juego, pero no es él quien direc­ta­mente real­iza estas acciones, sino que invo­ca a otros méto­dos con tar­eas más específicas.

De esta for­ma nos resul­ta más sim­ple realizar mod­i­fi­ca­ciones en el códi­go y depu­rar errores.

Conclusión

Los méto­dos con­sti­tuyen una poderosa her­ramien­ta a la hora de elab­o­rar solu­ciones especí­fi­cas, efi­cientes, reuti­liz­ables y sostenibles en el tiempo. 

Sostenibles en el tiem­po porque en todas las eta­pas del desar­rol­lo deber­e­mos hac­er cam­bios, de modo que ten­emos que ser capaces de recor­dar o com­pren­der ráp­i­da­mente cómo fun­ciona nue­stro código.

Esto se logra uti­lizan­do nom­bres descrip­tivos, doc­u­men­tan­do nue­stro códi­go y apli­can­do el par­a­dig­ma de ori­entación a objetos.

Scroll al inicio
Secured By miniOrange