Funciones y Métodos

Funciones y Métodos
La función es un elemento
del programa que contiene código y se puede ejecutar, es decir, lleva a cabo una operación. La función puede llamarse o invocarse cuando sea necesario y entonces el código que se encuentra en su interior se va a ejecutar. Una vez que la función termina
de ejecutarse el programa continúa en la sentencia siguiente de donde fue llamada.
Las funciones, para que sean útiles, deben estar especializadas. Es decir que cada
función debe hacer solamente una cosa y hacerla bien. Nosotros ya hemos utilizado
una función, es la función Main() y podemos crear más funciones conforme las
necesitemos. Dentro de la programación orientada a objetos las clases tienen código
y este código se encuentra adentro de funciones llamadas métodos. Por ejemplo,
cuando hemos convertido de cadena a un entero, hacemos uso de una función llamada
ToIn32() que se encuentra adentro de la clase Convert.
Las funciones constan de cinco partes:
modificador tipo Nombre(parámetros)
{
código
}
Veremos ahora las cinco partes, pero conforme estudiemos a las funciones sabremos
cómo son utilizadas. Las funciones pueden regresar información y esta información puede ser cadena, entero, flotante o cualquier otro tipo. En la sección de tipo tenemos
que indicar precisamente la clase de información que regresa. Si la función
no regresa ningún valor entonces tenemos que indicar a su tipo como void.
Todas las funciones deben identificarse y lo hacemos por medio de su nombre. Las
funciones que coloquemos adentro de las clases deben de tener un nombre único.
El nombre también es utilizado para invocar o ejecutar a la función.
Las funciones pueden necesitar de datos o información para poder trabajar. Nosotros
le damos esta información por medio de sus parámetros. Los parámetros no
son otra cosa que una lista de variables que reciben estos datos. Si la función no necesita
usar a los parámetros, entonces simplemente podemos dejar los paréntesis vacíos.
Nunca debemos olvidar colocar los paréntesis aunque no haya parámetros.
El código de la función se sitúa adentro de un bloque de código. En esta sección
podemos colocar cualquier código válido de C#, es decir, declaración de variables,
ciclos, estructuras selectivas e incluso invocaciones a funciones.
Las funciones al ser declaradas pueden llevar un modificador antes del tipo. Los
modificadores cambian la forma como trabaja la función. Nosotros estaremos utilizando
un modificador conocido como static. Este modificador nos permite usar a
la función sin tener que declarar un objeto de la clase a la que pertenece.
Tenemos cuatro tipos básicos de funciones: las que solo ejecutan código, las que reciben
parámetros, las que regresan valores y las que reciben parámetros y reciben valores.
Funciones que ejecutan código
El primer tipo de funciones que vamos a conocer son las que ejecutan código. Estas
funciones no reciben datos y no regresan ningún dato. Solamente llevan a cabo
alguna operación. Aunque en este momento no parecen muy útiles, sí lo son.
Para poder utilizar la función, debemos declararla. La declaración se debe hacer
adentro del bloque de código correspondiente a una clase. Para los ejemplos analizados
en este libro, estamos usando la clase denominada Program. Nuestra función
Main() se encuentra también adentro de esta clase.
En este momento tomaremos una estrategia de programación, que aún no pertenece
a la programación estructurada, en el futuro veremos las técnicas orientadas a objetos.
En esta técnica usamos a la función Main() como administradora de la lógica
y la mayor parte del proceso se llevará a cabo en las funciones.
Crearemos una aplicación y le colocaremos cada uno de los tipos de funciones que
vamos a aprender, dejando a Main() como nuestra administradora del programa. El
programa va a ser conceptualmente sencillo, ya que lo que nos interesa es comprender
el funcionamiento de las funciones.
PROBLEMAS AL DECLARAR LAS FUNCIONES
Las funciones no pueden ser declaradas adentro de otra función. Esto nos lleva a un error de sintaxis y de lógica que debe ser corregido lo antes posible. Es importante mantener las funciones
ordenadas y tener cuidado de no desbalancear los { } cuando se creen nuevas funciones.Hay que recordar que deben ir adentro de una clase.
Funciones que regresan un valor
Nuestro siguiente tipo de función puede regresar un valor. Esto significa que cuando
la función es invocada va a llevar a cabo la ejecución de su código. El código va
a calcular un valor de alguna manera y este valor calculado por la función será regresado
a quien haya invocado a la función. La invocación puede haber sido hecha
por la función Main() o algún otra función.
Como la función va a regresar un valor, necesitamos indicar su tipo. El tipo va a
depender del valor devuelto. Si el valor es un entero, entonces el tipo de la función
es int. Si el valor es un flotante, la función tendrá tipo float y así sucesivamente. La
función puede regresar cualquiera de los tipos definidos en el lenguaje y también tipos
definidos por el programador y objetos de diferentes clases.
La función va a utilizar un comando especial para regresar el valor, este comando
se conoce como return y se usa de la siguiente manera:
return variable;
En cuanto la ejecución del programa encuentra un return, la función es finalizada
aun si no ha llegado a su fin. Al mismo tiempo que finaliza la función el valor colocado
después del return es regresado a quien hizo la invocación. El valor puede
ser colocado con una variable o explícitamente con un valor en particular. No hay
que olvidar colocar el punto y coma al finalizar la sentencia. La finalización de la
función se lleva a cabo aunque tengamos código escrito después del return.
Como la función regresa un valor, del lado del invocador necesitamos tener alguien
que pueda recibir el valor regresado. Generalmente usaremos una variable, pero en
algunos casos puede ser una expresión que será evaluada con el valor regresado por
la función. Supongamos que nuestra función regresa un valor entero. Entonces podemos
tener un código como el siguiente
int m;
m=función();
De esta forma el valor regresado por la función queda guardado en la variable m y
podemos hacer uso de él. El código lo entendemos de la siguiente forma. Tenemos
una variable entera m. Luego tenemos una asignación para m. Si recordamos, la asignación
siempre se lleva a cabo de derecha a izquierda. Se evalúa la expresión y la
función se ejecuta y calcula un valor, el cual es regresado por medio de return. Este
valor se considera como la evaluación de la expresión y es asignado a m.
Funciones que reciben valores
Hasta el momento las funciones que hemos utilizado piden directamente al usuario los valores que necesitan para trabajar. Sin embargo, las funciones también pueden recibir valores en el momento que son invocadas. De esta forma trabajarán con los valores pasados por el programa en lugar de pedirlos al usuario. Estos valores son conocidos como parámetros. Los parámetros pueden ser de cualquier tipo, ya sea de los tipos nativos de C# como entero, flotante, cadena o de tipos definidos por el programador como clases y estructuras.
Los parámetros deben llevar su tipo y su nombre. El nombre nos permite acceder a los datos que contiene y de hecho van a trabajar como si fueran variables locales a la función. Adentro de la función los usamos como variables normales. Los parámetros se definen en la declaración de la función. Adentro de los paréntesis de la función los listamos. La forma de listarlos es colocando primero en tipo seguido del nombre. Si tenemos más de un parámetro para la función, entonces debemos separarlos por medio de comas.
La invocación de la función es muy sencilla, simplemente debemos colocar el nombre de la función y, entre los paréntesis, los datos que vamos a enviar como parámetros. Los datos pueden ser situados por medio de variables o un valor colocado explícitamente. Podemos hacer ahora la función que se encargará de la multiplicación. Esta función recibirá los operandos desde Main() por medio de los parámetros, realizará el cálculo y lo mostrará al usuario. Como la función Main() manda la información, entonces será responsabilidad de ella pedirlos a los usuarios.
Funciones que reciben parámetros y regresan un valor
Los arreglos
El problema al que nos estamos enfrentando es que, como sólo hemos hecho uso de una variable para las calificaciones, cuando necesitemos procesar nuevamente la información desde nuestro software, ya no tendremos almacenado el valor de la calificación anterior en la variable, sólo tendremos la última calificación capturada. ¿Cómo podemos resolver esto? Una forma de hacerlo sería crear y utilizar muchas variables como: calif1, calif2, calif3…, etcétera. Al principio esta idea puede parecer correcta, pero manejar muchas variables de forma independiente, luego de un tiempo puede tornarse engorroso, y también podremos encontrar un caso en el que no sabemos cuántas variables necesitaremos. Sin embargo, esto nos puede dar una idea sobre lo que necesitamos. Si observamos el nombre de las variables, vemos que todas llevan en su nombre calif, es decir que todas se refieren a la calificación. Podemos pensar que están conceptualmente agrupadas para la calificación. Otro punto que notamos es que las variables están numeradas, como si tuvieran un índice que nos sirve para identificarlas. Los arreglos son similares a estos conceptos ya que son grupos de variables y estas variables serán referenciadas por el mismo nombre. Para poder acceder a una variable del arreglo usaremos un número de índice, ya que todas las variables adentro de un arreglo serán de un mismo tipo. Un punto muy importante que no debemos olvidar cuando trabajemos con los arreglos es que éstos están basados en índice cero, esto quiere decir que el primer elemento del arreglo se encuentra en la posición 0, no en la posición 1 como podríamos pensar. No olvidar este punto nos evitará muchos problemas de lógica en el futuro.
Declaración de los arreglos de una dimensión
Los arreglos pueden tener diferentes dimensiones, y si el arreglo se parece a una simple lista, como la lista de calificaciones que tenemos, entonces decimos que es de una dimensión. Estos arreglos también se conocen como monodimensionales o unidimensionales. Si el arreglo es como una tabla con varios renglones y varias columnas, entonces es un arreglo de dos dimensiones o bidimensional. Primero trabajaremos con los arreglos de una dimensión y luego pasaremos a arreglos de dos dimensiones o más. Para poder trabajar un arreglo, primero es necesario declararlo. En la declaración nosotros indicamos su tipo, su nombre y su tamaño.
tipo[] nombre = new tipo[tamaño];
La declaración puede parecer un poco extraña, por lo que a continuación haremos un ejemplo más claro y real, y lo explicaremos a fondo.
float[] calificaciones= new float[10];
En C# los arreglos son objetos, y deberemos usar new al declararlos. El arreglo será de tipo flotante, y usaremos [ ] para indicar su declaración. Luego debemos colocar el nombre con el que lo identificaremos. En nuestro ejemplo se llama: calificaciones. Del lado derecho de la sentencia tenemos la instanciación del arreglo. Indicaremos entre [ ] la cantidad de elementos que deseamos tener. La cantidad puede ser colocada de forma explícita, tal como está en el ejemplo, o por medio del contenido de una variable. Podemos ejemplificar esto de la siguiente forma:
int n = 10;
float[] calificaciones = new float[n];
En este caso se tendrá la cantidad de elementos igual al valor guardado en la variable n. En algunas ocasiones podemos conocer los valores que colocaremos adentro del arreglo, por lo que podemos declararlo y asignarle sus valores en la misma sentencia. Esto lo hacemos indicando primero el tipo y los [ ] seguidos del nombre del arreglo y en el lado derecho de la sentencia colocamos entre { } los elementos que se le desean asignar al arreglo. Estos elementos deberán estar separados por comas. Veámoslo ejemplificado de manera más clara:
float[] valores = { 1.5f, 3.78f, 2.1f };
En este caso hemos creado un arreglo llamado valores y tendrá tres elementos con los valores colocados. La siguiente figura nos muestra cómo quedaría.
Asignación y uso de valores
Ya hemos visto cómo declarar el arreglo. Ahora tenemos que aprender cómo poder colocar información en su interior y hacer uso de ésta. Para poder asignarle un valor a alguno de los elementos del arreglo necesitamos hacer uso del índice del elemento que queremos utilizar, y como dijimos antes, no debemos olvidar que el primer elemento se encuentra en la posición 0. Supongamos que queremos asignarle la calificación 8.5 al tercer alumno.
calificaciones[2] = 8.5f;
Lo primero es usar el nombre del arreglo, tal y como con las variables, pero entre [ ] colocamos el índice del elemento al que se lo queremos asignar. El tercer alumno se encuentra en el índice 2. Esto se debe a que empezamos a contar desde cero: 0, 1, 2. Luego del lado derecho de la asignación colocamos el valor a asignar. El control del índice también se puede hacer por medio de una variable de tipo entero. El valor contenido en la variable será usado para acceder al elemento del arreglo.
calificaciones[indice] = 8.5f;
Para el índice, tener la capacidad de utilizar una variable es muy útil, ya que esto nos permitirá recorrer el arreglo con alguno de los ciclos estudiados en los primeros capítulos del libro. Los valores contenidos adentro del arreglo pueden usarse como variables normales, por ejemplo en un cálculo.
impuesto = costo[n] * 01.5f;
Y el desplegado es igualmente fácil.
Arreglos de dos dimensiones
Hasta aquí hemos visto que los arreglos nos ayudan a guardar información y a trabajar de una manera más cómoda con ella. Cuando tenemos mucha información que almacenar es más fácil manipular un arreglo que muchas variables. Los arreglos que vimos son similares a una lista, pero no todos los problemas se pueden resolver con este esquema, y veamos por qué. Supongamos que ahora debemos hacer un nuevo programa para una fábrica que produce automóviles y desea tener la información de las unidades producidas a diario. La información será procesada por semana, con el promedio semanal de vehículos producidos. Hasta el momento el problema sería muy similar al anterior. Podríamos crear un arreglo de 7 elementos llamado semana y estaría resuelto, pero ahora también desean la información por mes. El mes tiene cuatro semanas, por lo que podemos pensar en tener cuatro arreglos, uno que se corresponda con cada semana, pero en realidad existe una forma mejor de solucionar este problema. Si pensamos un poco más en el problema veremos que podemos guardar la información en una tabla, cada columna sería una semana y cada renglón representaría un día. Esto se conoce como matriz, y es un arreglo de dos dimensiones. En los arreglos de dos dimensiones tenemos que utilizar dos índices. Uno controlará el renglón y el otro la columna. Con la creación de estos dos índices es posible que accedamos a cualquier celda ubicada dentro de la matriz.
Ejercicio#1
Ejercicio#2
Ejercicio#3
Ejercicio#4
Ejercicio#5
Ejercicio#6
https://docs.google.com/forms/d/e/1FAIpQLSdzvd5pjZic044feVYisDjnFpuVqCbhQSLQ9rlWRzXNkZSEaA/viewform


Comments
Post a Comment