Registrarse

Aprendiendo C# y sus ventajas en casi todas las plataformas

Rub3n

Scripter Trifasico
Buenos días a todos. Hoy les traigo un tutorial para aprender C#, pero primero necesitan una razón para aprenderlo, ¿no? Entonces vamos a ello.

C# sirve para crear programas, videojuegos y las variantes de ellos. Muchas herramientas de binario fueron hechas con C# y hasta, actualmente, de decomp. Pero esto no se queda solo con GBA: literalmente podemos hackear un MM con este lenguaje y, por si no fuera poco, es el lenguaje predeterminado de Unity.

Sí pero... ¿qué es C#?

C# sirve para crear todo tipo de software (o programa), desde apps de consola, sistemas operativos, etc. Y por si no fuera poco, es el lenguaje predeterminado del motor de juegos 2D/3D Unity.

¿Es muy difícil aprender a programar y necesitas un IQ de 900000?

No. Todo depende de cuantas ganas le eches para aprender pero, al menos, deberías tener conocimiento básico de matemáticas.

Teniendo todo esto en cuenta, podemos proseguir.

Primero, vamos con los conceptos básicos de la programación.

Las variables son como una caja (por poner un ejemplo) y en esa caja podemos poner cosas, ¿vale?, pero con una condición: el objeto que puede tener la caja debe ser del mismo tipo que el que indica la misma caja. Digamos que esta caja solo acepta papel: entonces, siempre que queramos, podemos quitarle y ponerle papel, y no algo de otro tipo.

Código:
Caja = Caja + 1 papel
Aquí tienen una suma en la cual decimos que la caja es igual a la caja (lo cual se puede referir a el valor actual de papeles que tiene) más 1 papel. Si la caja no tenía papeles, pasa a tener 1; si tenía 1, y se le volvió a sumar 1, entonces va a tener 2. Así de sencillo.

Bien. Ahora que tenemos esto claro, empecemos a trabajar con tipos de variables que existen en C#, empezando con una bastante fácil, conocida como "int" y que solo acepta números enteros (sin decimales). Primero, hay que tener en cuenta que las variables tienen un tipo (int, en este caso) y un nombre que escojamos nosotros (puede ser cualquiera, mientras no empiece por mayúscula).

Para poder usar una variable, primero necesitamos declararla en nuestro código poniendo el tipo y el nombre, como expliqué anteriormente, de esta manera:

C#:
//<tipo> <nombre> <= valor(opcional)> ;
int myvar;
Y, aquí, otro ejemplo modificándola después de declararla:

C#:
int name;
name = name + 1; // Resultado: 1
Eso, que ven que empieza con "//" en el primer código, es un comentario el cual sirve para aclarar cosas de un código. Los comentarios no influyen en el resultado de un programa.
No se alarmen. Eso sirve para terminar una orden en el lenguaje. Siempre que nosotros declaremos una variable, le sumemos algo, o cualquier cosa, hay que poner eso para decirle al compilador que ahí termino la orden (luego vamos a ver las excepciones).

La variable, de forma predeterminada, va a tener 0 ya que, lógicamente, no tiene nada; entonces, en la segunda orden, (en la cual le sumamos 1), la variable pasa a tener 1 (0+1).

¿Se pueden sumar dos variables?
Sí. Les voy a enseñar cómo hacerlo y verán que no es nada del otro mundo.

C#:
int myVar = 1;
int myOtherVar = 2;
int sum;

sum = myVar + myOtherVar; //El resultado sería 3.
Hora de explicar paso a paso esto que acabo de poner pero, si estabas atento, es muy fácil. He creado una variable de tipo int llamada "myVar" (y le asigne el valor 1 de primeras, que es lo mismo que solo declararlas pero con el "= 1", que también puede ser cualquier número). Luego he creado una igual llamada "myOtherVar", con la diferencia de que esta tiene el número 2. Finalmente declaré una llamada "suma", en donde planeo guardar la suma de las dos variables anteriores. Y, como pueden ver, al final, la variable "sum" es igual a "myVar" más "myOtherVar" y así es como "sum" pasa a tener 3 (1 + 2).

Float

Ya que sabemos lo básico de las variables "int", ahora pasemos a las variables "float". Estas también trabajan con valores numéricos pero, a diferencia de las int, también pueden trabajar con valores flotantes (con decimales). Aquí un ejemplo:

C#:
//La declaro
float myVar = 1.5; //Nota: para referirnos a los decimales de un número  usen "." y NO ","
float myOtherVar = 1; //Acepta tanto decimales como enteros
float sum;

sum = myVar + myOtherVar; //El resultado sería 2.5
Muy fácil, ¿no? Prosigamos.

Otros operadores matemáticos:

Ahora, vamos a ver los demás operadores con los cuales se puede trabajar ya que, por ahora, solo trabajamos con la suma para que ustedes puedan entenderme mejor.

Resta "-":
C#:
int myVar = 2;
int myOtherVar = 3;
int subtraction;

subtraction = myVar - myOtherVar; //Resultado: 1
Multiplicación "*":
C#:
int myVar = 5;
int myOtherVar = 2;
int multiplication;

multiplication = 5 * 2; //Resultado: 10
División "/":
C#:
//Ignoren que en esta no usé valores de tipo int
float myVar = 10;
float myOtherVar = 2;
float division;

division = myVar / myOtherVar; // Resultado: 5
Bool:

Bien. Si creías que las variables solo usaban números, estabas equivocado. Las variables de tipo bool usan valores boleanos, los cuales solo tienen dos posibilidades: "true (Verdadero)" y "false (falso)". Véanlo así: este tipo de variables funcionan como interruptores; estos interruptores pueden estar activados (true) o pueden estar desactivados (false), ¿lo pillan? Si no, ahora les doy un ejemplo donde la declaro y activo.

C#:
bool mySwitch; //Nota: por defecto las variables de tipo bool están en false

mySwitch = true; //La activo de esta forma

//"switch" significa "interruptor" (por si caben dudas)
Para desactivarla sería así:

Código:
bool mySwitch = true; //La activo para que tenga sentido desactivarla

mySwitch = false; //La desactivo de esta forma
Estas variables son simples pero pronto van a ver lo útiles que pueden ser. Por ahora no podemos hacer más nada que declararla y cambiarle de estado manualmente.

Ya que sabemos declarar y usar variables; ahora vamos a aprender a compararlas usando un método llamado "if", con él podemos comparar, sí una variable tiene cierto valor y también comparar variables con otras (mientras sean del mismo tipo). Si la comparación coincide entonces va a ir a ejecutar la siguiente orden (más adelante les voy a mostrar como poner más ordenes en un "if"). En este no se usa un ";", ¿por qué? es fácil, si coincide la comparación no debería terminar la orden ¿no? entonces si es cierta ejecuta la siguiente orden.

pero antes veamos los operadores que se pueden usar en un "if":

Igual a: "=="
Diferente de: "!="
Mayor que: ">"
Menor que: "<"
Mayor o igual que: ">="
Menor o igual que: "<="

Ejemplos:

Igual a:
C#:
int myVar = 2;
int myOtherVar = 4;
bool mybool;

if (myVar == myOtherVar) //Si myVar es igual a myOtherVar
mybool = true;      //Se ejecutara esto.

sameNumbers = false;     //Pero esta siempre se ejecutara, ya que el if solo
                         //Abarca la siguiente orden.
Diferente de:
C#:
int myVar = 2;
int myOtherVar = 4;
bool mybool;

if (myVar != myOtherVar) mybool = true; //Si myVar es diferente de myOtherVar, se ejecutara eso.

sameNumbers = false;     //Pero esta siempre se ejecutara, ya que el if solo
                         //Abarca la siguiente orden. (Ahora está al lado por variar)
Menor que:
C#:
int myVar = 2;
int myOtherVar = 4;
bool mybool;

if (myVar < myOtherVar) mybool = true; //Si myVar es menor que myOtherVar, se ejecutara eso.

sameNumbers = false;
Mayor que:
C#:
int myVar = 2;
int myOtherVar = 4;
bool mybool;

if (myVar > myOtherVar) sameNumbers = true; //Si myVar es mayor que myOtherVar, se ejecutara eso.

mybool = false;
Todos son similares y los conocemos de las matemáticas básicas, así que supongo que los otros 2 sobran.

Cuerpo del "if"

Ya que sabemos lo básico de el "if", ahora si queremos poner 2 o más cosas que pasaran cuando sea cierta la comparación entonces tenemos que hacer lo siguiente:

Vamos a usar los símbolos "{" y "}", el "{" lo usaremos para abrir un cuerpo dónde se entrara si la comparación es cierta, y el "}" para cerrar el cuerpo y terminar de decirle al código que después de eso ya lo demás no forma parte del "if".

Aquí un ejemplo:
C#:
int myVar = 2;
int myOtherVar = 5;
bool mybool;
bool myOtherbool;

if (myVar < myOtherVar )
{ //A partir de aquí todo forma parte del "if"
    mybool = true;
    myOtherbool = true;
} //Y a partir de aquí lo demás deja de formar parte del "if"

myOtherbool = false; //Este siempre se va a ejecutar ya que no forma parte
                     //Del cuerpo del if
Operadores lógicos: &&, ||, !

Con estas condiciones se puede encadenar un "if" con "y", "o", etc., que se indican de la siguiente forma

Operador Significado
&& ------------ Y (Si esta otra es cierta)
|| --------------- O (Esta o la otra es cierta)
! --------------- No (Si esta NO es cierta)

De modo que podremos escribir cosas como:

C#:
if ((opcion==1) && (usuario==2)) ...
C#:
if ((opcion==1) || (opcion==3)) ...
C#:
if ((!(opcion==opcCorrecta)) || (tecla==ESC)) ...

Podemos indicar lo que queremos que ocurra en caso de que no se cumpla la condición, usando la orden "else" (en caso contrario), así:

C#:
int myVar = 2;
bool myBool

if(myVar == 4)
{
    myBool = true;
}

else //En caso contario...
{
    myBool = false;
}
Podríamos intentar evitar el uso de "else" si utilizamos un "if" a continuación de otro, pero el comportamiento NO es el mismo, en este de arriba irá a el "else" solo cuando el "if" no sea cierto, pero si usamos dos "if" el programa va a ser un poco más lento ya que si o si va a hacer dos comprobaciones en vez de una.

También podemos poner un "if" en un "else", de esta manera:

C#:
int myInt = 2;
bool myBool;

if(myInt == 3){
    myBool = true;
}
else if(myInt == 2) //Solo se hará está comprobación si el if anterior NO es cierto
{
    myBool = false
}

En C# hay otra forma de asignar valores a las variables dependiendo de si una condición se cumple o no. Esto lo logramos con el operador condicional "?", de está manera:

C#:
int nameVar = (condición) value1: value2;
Si la condición es cierta, la variable obtiene el "value1", si no, la variable obtiene el "value2". Aquí un ejemplo:

C#:
int a = 10;
int b = 15;

int heightNumber = (a < b) ? b: a; //Puse "<", pero puede ser cualquier operador lógico

//Si "a" es menor a "b", la variable obtiene el valor de "b"
//Lo hice de forma que quedara con el valor más grande de los dos


Bien, ya hemos vistos unas cuantas cosas y ahora le toca a switch.

switch es una estructura que nos permite comparar múltiples posibilidades del valor de una variable y en cada posibilidad agregar una sentencia.
Muchas veces en los códigos, tenemos que hacer muchas comparaciones, los if se quedan cortos en ciertos casos, y para eso existe esta estructura que te permite no hacer el uso de tantos "if". Esta sería la base:

C#:
...
switch(myVar) {
    case valor1 : sentencia;
    break;
    case valor2 : sentencia;
    break;
    default: sentencia;
}
...
Si la variable coincide con alguno de los valores, entonces ejecuta su sentencia. La "default" se ejecuta siempre que ninguna de las demás coincidan con el valor de la variable. En el ejemplo puse dos posibilidades pero pueden ser más, aquí otro ejemplo usando valores y funciones reales:

C#:
int myVar;
bool myBool;

switch(myVar) {

    case 1 : myBool = false; // Si la variable "myVar" tiene 1, enciendo la variable "myBool"
    break; //Terminan las sentencias de la primera posibilidad (pueden ser más de 1)
    case 2 : myBool = true; // Si la variable "myVar" tiene 2, apago la variable "myBool"
    break; //Terminan las sentencias de la segunda posibilidad
    default: myBool = false; // Si la variable "myVar" no coincide con los casos anteriores, apago la variable "myBool"
    break; //Terminan las sentencias del "default"

}
Supongo que pudo ser bastante confuso, por eso veo necesario la explicación de ciertas cosas. El "default" es opcional, ya está en su decisión ponerla o no. Ahora les voy a explicar a como relacionar un caso o varios con otros, por ejemplo:

C#:
int myVar = 1;
bool higherOf10; //"Mayor que 10" en español

switch(myVar)
    case 0 :
    case 1 :
    case 2 :
    case 3 :
    case 4 :
    case 5 :
    case 6 :
    case 7 :
    case 8 :
    case 9 :
    case 10: higherOf10 = false;
    break;
    default: higherOf10 = true;
    break;
Si no definimos una sentencia en un caso y no le ponemos "break", el caso empieza a bajar en los casos hasta encontrar una sentencia y finalizar con un "break", si no es ninguno de esos numeros en el "default" asumo que es mayor a 10.

Simplemente para que vean, les voy a mostrar más sentencias en un caso y que no es necesario tener la sentencia al lado de "case valor :".

C#:
float myVar = 0;
bool myBool;
bool myOtherBool;
switch(myVar)
{
    case 0:
    myBool = true;
    myOtherBool = true;
    break;
    case 1: myBool = false;
    myOtherBool = false;
}
//Como les guste más
 
Última edición:

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Hmmm, no está mal la iniciativa pero hay varias cosas que faltan a recalcar incluso siendo "el primer fascículo".

- C# es un lenguaje de programación a objetos. Esto cambia totalmente la forma de programar con respecto a otros como C, pero muy similar a Ruby, que se usa en RPG Maker XP.
- Hablas de números enteros (integer), pero deberías poner, ya que hablas de variables, qué tipos de datos hay, y con respecto a la primera, qué es un objeto.
- Las variables no se pueden usar sin ser inicializadas. Tampoco hablas de lo que es.
- Por favor, tomemos la costumbre de no programar en español.
 

Rub3n

Scripter Trifasico
Hmmm, no está mal la iniciativa pero hay varias cosas que faltan a recalcar incluso siendo "el primer fascículo".

- C# es un lenguaje de programación a objetos. Esto cambia totalmente la forma de programar con respecto a otros como C, pero muy similar a Ruby, que se usa en RPG Maker XP.
- Hablas de números enteros (integer), pero deberías poner, ya que hablas de variables, qué tipos de datos hay, y con respecto a la primera, qué es un objeto.
- Las variables no se pueden usar sin ser inicializadas. Tampoco hablas de lo que es.
- Por favor, tomemos la costumbre de no programar en español.
Vale, intentaré modificar varias cosas, gracias por la recomendación
 

Rub3n

Scripter Trifasico
Versión 0.1

-Explicación de las variables de tipo Float
-Viendo otros operadores matemáticos en C#

-Explicación de las variables de tipo Bool
-Arreglado algunas cosas que no expliqué
 
Última edición:

Xiros

¡Pokémon Omega con actualización del 30/8!
Miembro de honor
Que bueno ver esto!

Yo tengo material preparado de cuando enseñé a programar en c# a un amigo hace un par de años.

La verdad podría traerlo a aquí, aunque tengo un par de partes que le expliqué hablando por Whatsapp y no hice material, tengo un montón de material escrito con ejercicios y todo para hacer. Espero no olvidarlo y en los próximos días traer ese aporte :)
 

Rub3n

Scripter Trifasico
Versión 0.2

-Explicación de el "else if"
-Arreglos al articulo de "if"
-Explicación de el operador condicional "?"
 
Arriba