Hoy vamos a aprender un poco más respecto de como es el manejo de algunos atributos. En este caso particular voy a mostrarles dos o tres cosas que son importantícimas para la programación: Array y paso de argumentos por referencia.
Lo primero en lo que voy a explayarme es respecto al paso de argumentos por referencia.
Primero, el paso de argumentos es cuando se escribe un método en una clase y se pasan datos específicos:
<?
public int ElMetodo(int A)
{
A = A + 10;
return A;
}
>
En este caso el argumento que se le pasa al método es "A".
En el caso común que les he escrito en ejemplos hasta ahora en post anteriores han sido del siguiente modo:
<?
class Class1
{
private int Num = 0;
public void ElMetodo(int A)
{
Num = A;
Num += A;// nótece dos detalles en esta variable: el primero += es lo mismo que "Num = Num + A;" El otro detalle es que para realizar
//esta clase de operaciones la variable Num debe estar declarada con un valor de antemano, sino dará error de compilación.
}
public int GetNum()
{
return Num;
}
}
>
Esto del lado del programa, en la consola quedaría:
<?
class Program
{
static void Main(string[] args)
{
int N;
Class1 CL = new Class1();
Console.WriteLine("Escriba un número");
N = Convert.ToInt32(Console.ReadLine());
CL.ElMetodo(N);
Console.WriteLine("Escriba otro número");
N = Convert.ToInt32(Console.ReadLine());
CL.ElMetodo(N);
N = CL.GetNum();
Console.WriteLine("La suma de los números es {0} ", N.ToString());
Console.ReadKey(); //Dos detalles: Use la misma variable N para todo, en mi caso lo hice a propósito para que vean que se puede,
//pero no es correcto, siendo que si tienen programas de 500 o 1000 líneas se van a equivocar seguro. El otro
//detalle es que pueden ver que el valor N pasa del Programa a la clase, se iguala a Num y luego vuelve.
}
}
>
La forma de mover argumentos por referencia tiene un par de comandos. Pero antes tengo que explicar que quiere decir pasar por referencia para luego mostrarles como.
Imaginemos que tenemos una hoja cuadriculada y que cada cuadrito son los espacio de memoria RAM que tenemos en el momento para ocupar con nuestro programa.
Luego rellenamos un cuadrito el espacio ocupado con el valor de nuestra variable.
Lo que hace el pasar argumentos por referencia es usar ese mismo cuadrito para todo.
En el caso en que venimos ocupando la atención hasta ahora quedaría de este modo:
Llenamos un cuadrito más en cualquier parte de la pagina y esa es información idéntica a la que rellenamos el anterior, que es copiada para ser procesada y devuelta. Hasta ahora lo que hemos hecho es tomar un valor de una variable y decirle a otra variable que tome ese valor y que luego lo devuelva a otra variable.
En el caso de la referencia lo que se hace es siempre trabajar con el mismo espacio de referencia, esto permite ahorrar recursos para el programa y hacerlo mas rápido.
En C# el paso por referencia no es tan complicado como los ejemplos que he hecho, veamos:
<?
class Class1
{
public void ElMetodo(ref int N)
{
N += 10;
}
}
>
En la consola quedaría:
<?
class Program
{
static void Main(string[] args)
{
int U;
Class1 CL = new Class1();
Console.WriteLine("Escriba un número");
U = Convert.ToInt32(Console.ReadLine());
CL.ElMetodo(ref U)
Console.WriteLine("El Número sumado 10 es {0}", U.ToString());
Console.ReadKey();
}
}
>
Observen todo lo que se ahorran en escribir.
El comando out funciona muy parecido, pero siempre es para afuera del método, o sea, se declara la variable como que estoy poniendo return, pero siempre hay que tener la variable asignada, sino no funciona.
Cuando me refiero a la variable asignada es teniendo un valor asignado, por que sino da error de compilación.
La clase:
<?
class Class1
{
public void ElMetodo(out int N)
{
N = 10;
}
}
>
El programa:
<?
class Program
{
static void Main(string[] args)
{
int U, n;
Class1 CL = new Class1();
Console.WriteLine("Escriba un número");
U = Convert.ToInt32(Console.ReadLine());
CL.ElMetodo(out N);
U += n;
Console.WriteLine("El Número sumado {0} es {1}", n.ToString(), U.ToString()); //Recuerden 0 es para n y 1 para U... pero //se pueden declarar distinto, por ejemplo así: Console.WriteLine("El Número sumado {1} es {0}", U.ToString(), n.ToString());
Console.ReadKey();
}
}
>
Nuevo tema: Array.
Una variable puede ser contemplada como una unidad de valores, por ejemplo int i = 1; ese i vale 1, pero si queremos que una variable guarde varios valores independientes uno con otros tendremos que hacer un Array, o también conocido como vectores y matrices.
En memoria el Array funciona así:
Todos los sectores de memoria guardan un valor; supongamos que tenemos un renglón de la hoja cuadriculada antes mencionada y que tengo todos los cuadritos uno al lado del otro pintados de distintos colores, pues cada posición de memoria me va a dar un valor, por lo tanto con una referencia a ese sector de memoria ( a ese cuadrito) voy a pasar de un valor a otro.
Los Array que voy a enseñar hoy es solo un paso inicial para la forma de Array que más sirve y que solo puedo dar al final de todos los post, siendo que es importante saber muchos temas antes de dar el principal al final.
Iniciemos con una variable int:
<?
class Class1
{
private int[] Num = new int[5]; //Al poner "new" estoy declarando un Array nuevo con todos sus valores en null.
// El 5 que está entre corchetes es la cantidad de posiciones que tiene mi vector.
private int Cont = 0;
public void SetNumero(int N)
{
Num[Cont] = N //Con el contador "Cont" indico la posición en la que me quiero ubicar, tengan cuidado con este
//número,
//por que si es mayor a los espacios de vector, va a dar error y se les rompe todo el programa, eso por un
//lado, por el otro las posiciones de los vectores no comienzan en 1, sino en cero, es algo a tener en cuenta
//siempre, siendo que si busco la posición 5 la tengo que buscar como la 4, siendo que la primera es 0 y no 1...
Cont++;
}
public int GetNum(int pos)
{
return Num[pos];
}
}
>[code]
[font="Microsoft Sans Serif"][size=8]
Y el programa: [/size][/font]
[code]<?
class Program
{
static void Main(string[] args)
{
int U, N = 10;
Class1 CL = new Class1();
Console.WriteLine("Escriba un número");
U = Convert.ToInt32(Console.ReadLine());
CL.SetNumero(U);
Console.WriteLine("Escriba un número");
U = Convert.ToInt32(Console.ReadLine());
CL.SetNumero(U);
Console.WriteLine("Escriba un número");
U = Convert.ToInt32(Console.ReadLine());
CL.SetNumero(U);
Console.WriteLine("Escriba un número");
U = Convert.ToInt32(Console.ReadLine());
CL.SetNumero(U);
Console.WriteLine("Escriba un número");
U = Convert.ToInt32(Console.ReadLine());
CL.SetNumero(U);
while (N <= 5)
{
Console.WriteLine("Cual de los cinco números quiere ver?");
N = Convert.ToInt32(Console.ReadLine());
}
if (N < 1 || N == 0) //Esta condicional el || quiere decir un "o" o sea, lo que digo es que N sea menor a 1 o que sea 0
{
U = CL.GetNum(N);
}
else
{
N -= -1; // o N--;
U = CL.GetNum(N);
}
Console.WriteLine("El número seleccionado es {0}", U.ToString());
Console.ReadKey();
}
}
>
Respecto de otros tipos de variables, se declaran de la misma manera, pero no es la única forma de declararlas.
<?
private int[] Variable = { 1, 2, 3, 10, 98 };
>
También las variables string se pueden ser declaradas así.
<?
private string[] Variable = { "Hola", "Chau" };
>
TAREA:
1. Realizar un programa en el que se generen 5 cuentas de banco y que dependiendo de 5 claves se pueda entrar a cualquiera de ellas y hacer extracciones o depósitos. En este caso las claves no tienen que ser demasiado elaboradas. No quiero matarlos de entrada
2. Realizar un programa donde se saquen la superficie de 3 figuras geométricas distintas y se guarden cada una en una posición de vector distinta, luego a cada superficie se les genere la posibilidad de sacar el volumen.
Para lograr potencias y el valor PI se usa el comando Math (en este caso se los dejo en su propia investigación que hace cada cosa).