miércoles, 22 de junio de 2011

Trabajo con Métodos

TRABAJO CON METODOS
Los métodos son bloques de instrucciones que devuelven algún tipo de valor cuando se ejecutan.  Pueden ser llamados mediante el nombre y llamar a un método hace que las instrucciones del método se ejecuten y regresen a la línea siguiente después del llamado en el código.  Un método especial de C# es el método Main().  Aunque C# permite poner todo el código en el método Main() probablemente quiera definir sus clases para definir más de un método.

Estructura de un método
Como mínimo un método está compuesto de las siguientes partes
  • Tipo devuelto
  • Nombre del método
  • Lista de parámetros
  • Cuerpo del método
Todos los métodos se encierran en una clase.  No puede existir un método fuera de una clase
Tipo devuelto
Un método comienza definiendo el tipo de dato que devolverá cuando se llame.  Por ejemplo, suponga que quiere escribir un método  que suma dos números enteros y devuelve el resultado.  En este caso si los números son enteros deberá escribir int.  

C# también permite que un método no devuelva nada. Por ejemplo puede ser que escriba un método que muestre algo en un formulario o en la consola, pero no calcule ningún dato.  En este caso puede usar la palabra clave void para indicar al compilador de C# que el método no devuelve ningún dato.  Esto es similar en C++ y en Java.

Si se quiere devolver un valor de un método se usa la palabra clave return para especificar el valor que debe devolverse.  La palabra clave va seguida de una variable o expresión.

Nombre del Método
Todos los métodos deben tener un nombre.  El nombre del método es un identificador y deben seguir las normas de la nomenclatura de cualquier identificador.

Lista de Parámetros
Se pueden llamar a los métodos con los parámetros que se usan para pasar los datos al método.   Por ejemplo si queremos sumar dos números, entonces deberemos pasar estos dos números al método para que realice los cálculos y devuelva como resultado su suma.  La lista de parámetros deberá estar entre paréntesis enseguida del nombre del método.  Cada parámetro de la lista está separado con una coma e incluye el tipo de dato seguido por su nombre.

Ambito
Los métodos también puede tener un ámbito, es decir, hasta donde pueden ser visibles.  Si un método es privado (private) solo podrá ser visible dentro de la clase que lo contiene, pero si es público (public), podrá ser visible en todo el programa.  Si usamos métodos en la clase Program, es muy seguro que debamos colocar a nuestro método la palabra reservada static, esto debido a que está declarada el método Main() como static.

Ejemplo
Tomemos con ejemplo el Ejemplo2 del artículo anterior donde calculámos la nota final del estudiante.  En ese ejercicio hacemos dos cálculos, el primero es la nota final y el segundo el estado del estudiante.  Podríamos crear dos métodos para cada cálculo.  





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ejemplo2
{
    class Program
    {
        static void Main(string[] args)
        {
            // Declaramos la variables a utilizar
            int np1, np2, nta, nef;
            String nombre;
            String carnet;
            String estado;

            // Obtener los datos
            Console.WriteLine("CALCULO DE NOTA FINAL");
            Console.WriteLine("=====================");
            Console.Write("No. Carnet del Estudiante : ");
            carnet = Console.ReadLine().ToString();
            Console.Write("Nombre del Estudiante     : ");
            nombre = Console.ReadLine().ToString();
            Console.Write("Nota del Primer Parcial   : ");
            np1 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Nota del Segunda Parcial  : ");
            np2 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Nota Trabajo Acumulado    : ");
            nta = Convert.ToInt32(Console.ReadLine());
            Console.Write("Nota Exámen Final         : ");
            nef = Convert.ToInt32(Console.ReadLine());

            // Calcular la nota final
            int nf = CalcularNF(np1, np2, nta, nef)
            
            // Obtener el estado
            estado = ObtenerEstado(nf);


            // Imprimir el resultado
            Console.WriteLine("La nota final es {0} y su estado es {1}", nf, estado);

            // Esto lo ponemos para que se detenga la pantalla y nos deje ver el
            // resultado
            Console.ReadKey();
        }

        static int CalcularNF(int n1, int n2, int ta, int ef)
        {
            int notafinal = Convert.ToInt32(np1 * 0.20 + np2 * 0.20 + nta * 020 + nef * 0.4);
            return notafinal;
        }

        static String ObtenerEstado(int nota)
        {
            String estado;

            // Verificar el estado en base a su nota
            if (nf >= 70)
            {
                estado = "APROBADO";
            }
            else
            {
                estado = "REPROBADO";
            }
            return estado;
        }

    }
}

Note que tenemos dos métodos nuevos llamados CalcularNF y ObtenerEstado. Si quisieramos ahorrar variables y memoria al programa podríamos usarlos directamente al mandar imprimir el resultado en este caso nuestro programa quedaría así.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ejemplo2
{
    class Program
    {
        static void Main(string[] args)
        {
            // Declaramos la variables a utilizar
            int np1, np2, nta, nef;
            String nombre;
            String carnet;

            // Obtener los datos
            Console.WriteLine("CALCULO DE NOTA FINAL");
            Console.WriteLine("=====================");
            Console.Write("No. Carnet del Estudiante : ");
            carnet = Console.ReadLine().ToString();
            Console.Write("Nombre del Estudiante     : ");
            nombre = Console.ReadLine().ToString();
            Console.Write("Nota del Primer Parcial   : ");
            np1 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Nota del Segunda Parcial  : ");
            np2 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Nota Trabajo Acumulado    : ");
            nta = Convert.ToInt32(Console.ReadLine());
            Console.Write("Nota Exámen Final         : ");
            nef = Convert.ToInt32(Console.ReadLine());

            // Imprimir el resultado
            Console.WriteLine("La nota final es {0} y su estado es {1}", CalcularNF(np1, np2, nta, nef), ObtenerEstado(CalcularNF(np1, np2, nta, nef));

            // Esto lo ponemos para que se detenga la pantalla y nos deje ver el
            // resultado
            Console.ReadKey();
        }

        static int CalcularNF(int n1, int n2, int ta, int ef)
        {
            int notafinal = Convert.ToInt32(np1 * 0.20 + np2 * 0.20 + nta * 020 + nef * 0.4);
            return notafinal;
        }

        static String ObtenerEstado(int nota)
        {
            String estado;

            // Verificar el estado en base a su nota
            if (nf >= 70)
            {
                estado = "APROBADO";
            }
            else
            {
                estado = "REPROBADO";
            }
            return estado;
        }

    }
}

No hay comentarios:

Publicar un comentario