Serie de procedimientos
Esta es la parte 3 de una serie de 5 partes de Introducción a la programación
- Introducción a la programación:Primeros pasos
- Introducción a la programación:tu primer programa
- Introducción a la programación:variables, tipos y manipulación de datos
- Introducción a la programación:control de flujo
- Introducción a la programación:programación orientada a objetos
Volviendo a Nuestro Programa
En los dos artículos anteriores de esta serie, ha escrito, en promedio, una línea de código por artículo. En este, estamos agregando otra línea, pero también vamos a modificar las líneas que ya tenemos porque ahora vamos a comenzar a hablar sobre variables y tipos de datos.
El objeto de este artículo es enseñarle sobre las variables y los tipos y cómo manipularlos para crear un programa que haga más que simplemente imprimir "¡Hola mundo!"
Tenemos mucho que cubrir, así que prepara tus dedos y vamos a hacerlo.
.
Uso de variables
Nuestro programa actual sigue siendo excepcionalmente simple con solo dos líneas de código:
Console.WriteLine("Hello World!"); Console.ReadLine();
La primera línea envía un fragmento de texto a la consola y la segunda lee una línea del usuario. Pero, ¿dónde termina esta línea que ingresamos? Actualmente, simplemente se queda en la nada porque no hacemos nada para recuperarlo, así que cambiemos eso de inmediato.
Cambie la segunda línea para que tenga el siguiente aspecto:
String input = Console.ReadLine();
Lo que estamos haciendo aquí es decir que la "entrada de cadena" (sea lo que sea) debe asignarse a lo que sea que salga del método ReadLine
invocado en la Console
clase estática.
Usamos el signo igual para asignar valores en C# y muchos lenguajes similares. Lo que está en el lado izquierdo del signo igual se le asigna el valor de lo que está en el lado derecho.
Las dos palabras en String input
tener diferentes significados. String
denota el tipo de valor y input
es el nombre que usamos para representar el valor. Lo que estamos haciendo aquí es crear una variable llamado "entrada" que tiene un tipo de “Cadena”. Explicaré los tipos más adelante en este artículo.
En programación, usamos variables para mantener datos en la memoria para que podamos manipularlos fácilmente. También usa esto en su vida diaria, sin llamarlo realmente una variable. Piense, por ejemplo, en "Su teléfono", que es simplemente una manera fácil de recordar el nombre de un dispositivo electrónico en particular que puede cambiar con el tiempo. O considere “el tipo de cambio del dólar estadounidense al euro”. No andas recordando esa tasa todo el tiempo, y cambia rápidamente, por lo que probablemente te resulte más fácil referirte a ella por su nombre en lugar de por su valor.
Las variables nos permiten referirnos a cualquier dato en particular por nombre en lugar de valor, independientemente de cuál sea el valor o si cambia. En nuestro programa, los datos son los que ingresa el usuario antes de presionar Enter
llave. El nombre que le damos a ese dato en particular, en este caso, es “entrada”, pero podemos llamarlo de diferentes formas. De hecho, hay toda una gama de patrones solo para nombrar variables, y probablemente se sentirá muy confundido más adelante en su carrera.
.
Depuración con puntos de interrupción
Puede probar esto ahora, pero antes de hacerlo, quiero mostrarle un truco de Visual Studio llamado punto de interrupción . Un punto de interrupción le permite detener la ejecución de un programa y ver qué línea de código se está ejecutando; incluso le permitirá recorrer el código línea por línea desde ese punto.
Para crear un punto de interrupción, mueva el cursor a la primera línea de su código y presione F9
o haga clic en el margen a la izquierda de los números de línea en la línea donde desea establecer su punto de interrupción. Si se hace correctamente, toda la línea debería volverse roja y debería aparecer un círculo rojo en el margen.
Figura 1:punto de interrupción agregado
Tenga en cuenta que el punto de interrupción detiene la ejecución antes la línea en la que lo configuró. Además, los puntos de interrupción solo funcionan cuando ejecuta su aplicación a través de una herramienta de desarrollo como Visual Studio, por lo que si no elimina los puntos de interrupción antes de distribuir su aplicación, está perfectamente bien.
Ahora, presiona F5
o ese botón Inicio en el menú y vea cómo se inicia su aplicación. Justo después de que lo haga, Visual Studio debería volver a aparecer y mostrarle la siguiente línea para ejecutar en amarillo.
Figura 2:golpe de punto de interrupción
En este punto, puede controlar la ejecución paso a paso y observar los resultados en la ventana de la consola. Para ir un paso adelante pulsa F10
en Visual Studio. Lleve la ventana de la consola al frente y observe que su código ahora ha avanzado una línea y ahora aparece "¡Hola mundo!" se muestra en la ventana como se esperaba.
Figura 3:Siguiente línea de comando ejecutada
Nota:Los programadores a menudo se refieren a este proceso de conexión con su código mientras se ejecuta como "depuración". Este proceso es un ejemplo del tipo de depuración que podría realizar para verificar que su código funciona como se esperaba.
.
Avance a través de su código una vez más en Visual Studio. Observe que a medida que lo hace, la ventana de la consola aparece automáticamente. Este evento ocurre porque la consola necesita información del usuario al ejecutar Console.ReadLine()
método.
Ingrese cualquier fragmento de texto que desee y presione Enter
. Cuando lo haga, Visual Studio volverá a aparecer porque ahora que proporcionó la entrada, la ejecución puede continuar y todavía estamos repasando el código.
En esta ventana de Visual Studio, me gustaría llamar su atención sobre la parte inferior de la pantalla donde debería ver una pestaña llamada "Locales". Si no puede encontrarlo, puede abrirlo yendo al menú y seleccionando Depurar->Windows->Locales o presionando CTRL+D
y luego L
.
Una vez que abra la ventana Locales, debería ver que hay una variable llamada "entrada" que tiene un valor establecido en lo que ingresó en la ventana de la consola. En mi caso, ingresé "¡Hola!".
Figura 4:Locales de depuración
La pestaña Variables locales muestra las variables que están disponibles para usar en el ámbito actual. Sin embargo, antes de comenzar a manipular y usar estos datos, es importante comprender el concepto de tipos de variables.
.
Tipos de Variables:Estáticas y Dinámicas
Verá, hay dos enfoques de lo que los programadores llaman "escribir", y ninguno tiene nada que ver con presionar teclas en un teclado. Ambos enfoques tienen fortalezas y debilidades. Y no, no te voy a decir cuál es mejor; tendrá mucho tiempo para determinarlo usted mismo y, tal vez, pueda llegar a comprender por qué algunos programadores desarrollan una preferencia casi fanática por uno sobre el otro.
Los dos enfoques son estáticos y dinámico mecanografía. C#, el lenguaje que usa en estos artículos, es un lenguaje de tipado estático, mientras que otros lenguajes populares como JavaScript son lenguajes de tipado dinámico. Déjame explicarte la diferencia.
Notaste anteriormente que cuando creamos la variable "input", decidimos que era una String
variable. String
es un término que sirve para indicar qué tipo de datos pueden entrar en la variable. No puede agregar datos incompatibles a una variable porque Visual Studio, o técnicamente el compilador que traduce su código de programación a código de máquina, objetará y se negará a cooperar.
Una String
es solo un fragmento de texto y puede contener casi cualquier cosa, lo que tiene sentido cuando le pedimos al usuario que ingrese cualquier fragmento de texto. Sin embargo, existe un problema potencial cuando queremos comenzar a trabajar con nuestros datos.
Digamos que queremos pedirle al usuario que ingrese su edad y que queremos limitar ciertas funciones si el usuario tiene menos de 13 años, por ejemplo.
¿Cómo se determina si "¡Hola!" es menor que 13? No puedes, porque no hay forma de hacer aritmética en un fragmento de texto. "Tomate" más 45 no tiene sentido.
Una situación como esta es la razón por la cual los lenguajes tipificados estáticamente tienen diferentes tipos de variables. Podemos saber si podemos realizar operaciones aritméticas u otras operaciones en los datos incluso antes de enviar el programa al usuario.
En lenguajes de tipado estático, como C#, VisualBasic y Java, debe definir de antemano qué puede contener una variable y no puede crear o compilar su programa sin adherirse a estas reglas. A cambio, se le garantiza que no comparará Apples con 3.42 ni intentará averiguar si es legal vender alcohol a una persona que "no es de su incumbencia" años.
En lenguajes escritos dinámicamente, no obtiene tales garantías. En cambio, solo trabaja con variables que pueden contener cualquier tipo de datos. Un ejemplo de lenguajes tipificados dinámicamente es JavaScript. En JavaScript, los programadores deben verificar que los datos que obtienen tengan el valor esperado porque su código puede fallar si intentan agregar o comparar "sí" con 18.
Nota:De hecho, puede agregar "sí" a 18 en la mayoría de los idiomas, según cómo lo haga. Sin embargo, lo más probable es que termines con "sí18", que probablemente no sea lo que esperas.
.
En lenguajes tipificados estáticamente, también encontrará que todos los métodos devuelven un tipo específico de datos o, en algunos casos, nada en absoluto. Por ejemplo, Console.ReadLine()
El método devuelve un valor de cadena, por lo que funciona muy bien para establecer nuestra String input
variable a la salida de ese método tal como lo hicimos nosotros.
Sin embargo, ¿qué sucederá si queremos pedirle al usuario que elija un número entre 1 y 10 porque queremos usar ese número para algo más adelante? Comencemos a construir un juego simple y mira, ¿de acuerdo?
.
Un programa de juego de adivinanzas
El juego que vamos a construir es un juego de adivinanzas. Elegimos un número secreto entre 1 y 10, y luego le pedimos al usuario que adivine qué número es. Haremos que este juego sea más avanzado más adelante, por lo que, por ahora, el usuario solo adivina una vez y, por lo tanto, tiene un 10 % de posibilidades de hacerlo bien. De hecho, ni siquiera vamos a probar si son correctos en este artículo porque hacerlo implicaría condiciones y control de flujo, que son conceptos que no vamos a aprender todavía.
Primero, el tipo de variable para un número que no tiene decimales se llama entero, o int
para abreviar. Un int
puede contener números muy grandes, generalmente limitados por el tipo de arquitectura de la CPU, con una CPU de 32 bits que contiene números enteros de hasta alrededor de 4.400 millones. Más allá de eso, podemos usar otros tipos de variables. Sin embargo, para nuestros ejemplos simples, un int
regular funcionará bien.
Para todo tipo de variables, podemos asignar valores simples directamente. Por ejemplo:
int value = 10; string name = “Frank”;
También podemos realizar operaciones sobre variables, siempre que “tengan sentido”. Por ejemplo, puede sumar dos valores enteros juntos.
int value1 = 10; int value2 = 3; int value3 = value1+value2;
El número entero almacenado en la variable "valor3" es 13 después de que la parte del código que contiene estas líneas pasa por este punto.
También podemos asignar valores a partir del valor de retorno de los métodos. Intentemos simplemente asignar el resultado de Console.ReadLine()
método en un int
, ¿Debemos? Si aún no lo ha hecho, detenga la ejecución de su programa. Ahora vamos a actualizar nuestras dos líneas de código como tales:
Console.WriteLine("Guess a number between 1 and 10:"); int input = Console.ReadLine();
Cuando lo haga, obtendrá un caso de los garabatos rojos (como se muestra a continuación en la Figura 5) y un mensaje de error en la lista de errores que indica "No se puede convertir implícitamente el tipo 'cadena' a 'int'".
Figura 5:Un caso de los Garabatos rojos
Obtenemos este error porque el valor que sale de Console.ReadLine()
es una cadena, y el compilador no puede garantizar que pueda convertir lo que un usuario puede ingresar en un número. Un usuario podría ingresar "¡NO!" por ejemplo, y no hay forma de convertir esa entrada en un número.
Hay, por supuesto, maneras de evitar este problema. Podemos obligar al compilador a aceptar cualquier cosa que entre como de un tipo específico. De hecho, podemos hacer esto con cualquier tipo. Es un proceso llamado casting .
Cuando lanzamos tipos de variables, el compilador hará todo lo posible para convertir de un tipo de variable a otro. Esta conversión puede, por ejemplo, funcionar si tiene un número decimal y quiere un número entero.
decimal decimalvalue = 3.14M; int integervalue = decimalvalue;
La primera línea asigna el valor 3.14 al decimal
variable llamada decimalvalue
. La segunda línea intenta asignar ese valor decimal a un número entero.
Nota:La M está allí simplemente como una pista para el compilador de que estamos creando un valor decimal porque, para agregar aún más confusión a este punto, hay varios tipos de decimal
valores, incluidos los valores de precisión doble y punto flotante. Si bien es útil saberlo, ninguno de estos puntos son cosas de las que deba preocuparse en este artículo.
.
Si ingresa estas líneas en Visual Studio, notará que incluso ahora, tenemos un caso de garabatos porque un decimal
el valor no cabe en un int
valor. Si lo intentáramos, perderíamos el .14 y nos quedaríamos con solo 3 como el valor de integervalue
.
Este comportamiento puede ser exactamente lo que queremos. En este caso, podemos convertir el decimal
valor a un int
, forzando efectivamente al compilador a aceptar la conversión explícita de un valor decimal a un valor entero. Lo hacemos precediendo el valor con el tipo que queremos entre paréntesis. Compara estas líneas de código con las anteriores.
decimal decimalvalue = 3.14M; int integervalue = (int)decimalvalue;
Ahora nuestros squigglies de Visual Studio desaparecerán y el compilador está contento. Estamos perdiendo algunos detalles en los números, pero puedes estar seguro de que esto es lo que quieres.
En C#, el compilador le exigirá que emita valores si existe la posibilidad de pérdida de datos, como es el caso si pasa de un valor decimal a un valor entero. Sin embargo, con gusto aceptará una conversión compatible cuando no haya posibilidad de pérdida de datos. Si intentaste asignar un int
valor a un decimal
escriba, por ejemplo, no obtendría disputas del compilador.
Sin embargo, hasta ahora, no nos estamos acercando a una solución a nuestro problema. Podemos intentar convertir el valor de la cadena que proviene de Console.ReadLine()
en un int
, pero el compilador se quejará de que no puede convertir un valor de cadena en un número entero automáticamente (como se muestra a continuación en la Figura 6) porque no hay forma de garantizar por adelantado que es posible convertir lo que proviene del usuario en un número.
Figura 6:Error con la conversión de cadena a Int
¡No temas, porque hay una mejor manera de resolver esto! La solución es usar un método estático para analizar el valor de la cadena en un número entero, y está ubicado justo en el int
escriba en sí mismo. Como tal, podemos llamar al int.Parse
método, envíelo lo que venga de Console.ReadLine()
y obtener un entero de vuelta.
Entonces, actualicemos el código de su programa para que primero solicite al usuario que ingrese los datos, luego recupere los datos en una string
variable llamada "texto", y finalmente para analizar "texto" en un número entero.
Console.WriteLine("Guess a number between 1 and 10:"); string text = Console.ReadLine(); int input = int.Parse(text);
Una vez que lo haga, todos sus garabatos deberían desaparecer y su programa debería ejecutarse como se esperaba. Siéntase libre de establecer un punto de interrupción después de la última línea para detener la ejecución e inspeccionar sus variables. Vea lo que sucede cuando ingresa un número durante la ejecución.
Figura 7:Ejecución válida
Verá que "entrada" ahora muestra que tiene un valor de 3 mientras que "texto", en mi caso, tiene un valor de "3" (observe las comillas dobles; las comillas dobles significan un valor de cadena).
Pero, ¿qué sucede si ingresamos algo que no sea un número? Bueno, si ingresa algo como "Hola" en lugar de un número, el programa fallará. En Visual Studio, la ejecución se detendrá y le informará sobre una excepción, como se muestra a continuación en la Figura 8.
Figura 8:Ejecución no válida
Como programadores, no queremos que nuestro software se bloquee, por lo que debemos manejar este error. Sin embargo, vamos a dejar eso para el próximo artículo porque involucra manipular el flujo del programa, y ya hemos cubierto bastante para llegar a este punto.
.
Variables, tipos y manipulación de datos Resumen
Por ahora, es hora de concluir este tercer artículo y, a pesar de escribir solo una línea más de código, hemos cubierto una gran cantidad de material nuevo. No te preocupes, cuando comencé a aprender esto hace muchos años, también había muchos aspectos confusos para mí.
En este artículo, hemos cubierto el concepto de variables y hemos analizado los tipos de datos y cuándo y por qué los tipos de datos son importantes. Ha aprendido cómo crear variables e incluso cómo convertir datos de un tipo a otro a través de la conversión. Ha aprendido acerca de la depuración paso a paso, los puntos de interrupción y cómo inspeccionar las variables disponibles en Visual Studio.
También debe tener en cuenta que las cosas que ha aprendido ahora son muy comunes en todos los idiomas y plataformas, y me he ocupado de presentar y explicar conceptos que varían, como la escritura estática frente a la dinámica.
En el siguiente artículo, veremos el control de flujo para que pueda aprender cómo controlar la ejecución de su programa y verificar varias condiciones para determinar qué debe hacer el programa a continuación.
Serie de procedimientos
Esta es la parte 3 de una serie de 5 partes de Introducción a la programación
- Introducción a la programación:Primeros pasos
- Introducción a la programación:tu primer programa
- Introducción a la programación:variables, tipos y manipulación de datos
- Introducción a la programación:control de flujo
- Introducción a la programación:programación orientada a objetos