Ejercicio: Investigación de los conceptos básicos de formato de cadena
- 20 minutos
En esta unidad aprenderá métodos para dar formato a las cadenas para una visualización eficaz, especialmente en los casos en los que se usan varias variables.
Preparación del entorno de programación
Este módulo incluye actividades prácticas que le guiarán en el proceso de compilación y ejecución de código de demostración. Se recomienda realizar las actividades con Visual Studio Code como entorno de desarrollo. El uso de Visual Studio Code para estas actividades le ayudará a familiarizarse con la escritura y la ejecución de código en un entorno de desarrollo que usan profesionales de todo el mundo.
Nota
Si ha completado otros módulos de Microsoft Learn de esta serie de C#, es posible que ya haya creado una carpeta de proyecto para los ejemplos de código. Si ese es el caso, puede omitir la siguiente sección de pasos y eliminar el código del archivo Project.cs usado para un ejercicio anterior.
Abra Visual Studio Code. Puede usar el menú Inicio de Windows (o un recurso equivalente en otro sistema operativo) para abrir Visual Studio Code.
En el menú Archivo de Visual Studio Code, seleccione Abrir carpeta.
En el cuadro de diálogo Abrir carpeta , vaya a la carpeta Escritorio de Windows. Si tiene una ubicación de carpeta diferente donde guarda los proyectos de código, úsela. Para este entrenamiento, lo importante es tener una ubicación fácil de encontrar y recordar.
En el cuadro de diálogo Abrir carpeta , seleccione Seleccionar carpeta. Si ve un cuadro de diálogo de seguridad que pregunta si confía en los autores, seleccione Sí.
En el menú Terminal de Visual Studio Code, seleccione Nuevo terminal. Observe que el símbolo del sistema del terminal muestra la ruta de acceso de la carpeta actual. Por ejemplo:
C:\Users\someuser\Desktop>En el terminal, para crear una nueva aplicación de consola en una carpeta especificada, escriba dotnet new console -o ./CsharpProjects/TestProject y pulse Entrar. Este comando de la CLI de .NET usa una plantilla de programa de .NET para crear un nuevo proyecto de aplicación de consola de C# en la ubicación de carpeta especificada. El comando crea las carpetas CsharpProjects y TestProject, y usa TestProject como nombre del archivo
.csproj.En el panel EXPLORADOR, expanda la carpeta CsharpProjects . Debería ver la carpeta TestProject y dos archivos, un archivo de programa de C# denominado Program.cs y un archivo de proyecto de C# denominado TestProject.csproj.
En el panel EXPLORADOR, para ver el archivo de código en el panel Editor, seleccione Program.cs.
Elimine las líneas de código que contiene. Durante este módulo usará este proyecto de consola de C# para crear, compilar y ejecutar ejemplos de código.
Cierre el panel del terminal.
¿Qué es el formato compuesto?
El formato compuesto usa marcadores de posición numerados dentro de una cadena. En tiempo de ejecución, todo lo que hay dentro de las llaves se resolverá en un valor que también se pasa en función de su posición.
En este ejemplo de formato compuesto se usa un método Format() integrado en la palabra clave de tipo de datos string. Actualice el código en el editor de Visual Studio Code de la siguiente manera:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
Si ejecuta este código, verá el resultado siguiente.
Hello World!
Hay algunas aspectos importantes que tener en cuenta sobre este código.
- Los tipos de datos y las variables de un tipo de datos determinado tienen "métodos auxiliares" integrados para facilitar tareas concretas.
- La cadena literal
"{0} {1}!"forma una plantilla, y algunos de sus elementos se reemplazarán en tiempo de ejecución. - El token
{0}se reemplaza por el primer argumento después de la plantilla de cadena, es decir, el valor de la variablefirst. - El token
{1}se reemplaza por el segundo argumento después de la plantilla de cadena, es decir, el valor de la variablesecond.
Nota
Posiblemente le resulte extraño empezar con el número 0. En realidad, es muy común en el desarrollo de software. Siempre que haya una secuencia de elementos que se puedan identificar con un número, normalmente la numeración se empezará en 0.
Actualice el código de la manera siguiente:
string first = "Hello"; string second = "World"; Console.WriteLine("{1} {0}!", first, second); Console.WriteLine("{0} {0} {0}!", first, second);Guarde el archivo de código y use Visual Studio Code para ejecutar el código. Debería ver el siguiente resultado:
World Hello! Hello Hello Hello!
Algunas observaciones sobre estos ejemplos:
- Para la primera instrucción
Console.WriteLine(), observe que los tokens se pueden organizar en cualquier orden. El código de ejemplo tiene{1}antes de{0}. - Para la segunda instrucción
Console.WriteLine(), observe que los tokens se pueden reutilizar con tres instancias de{0}. Además, no se usa el segundo argumento de variable,second. Sin embargo, el código todavía se ejecuta sin errores.
¿Qué es la interpolación de cadenas?
La interpolación de cadenas es una técnica que simplifica el formato compuesto.
En lugar de usar un token numerado e incluir el valor literal o el nombre de la variable en una lista de argumentos para String.Format() o Console.WriteLine(), puede usar simplemente el nombre de la variable dentro de las llaves.
Para que una cadena se pueda interpolar, debe agregarle la directiva
$como prefijo. Ahora crearemos los mismos ejemplos anteriores en los que se usa la interpolación de cadenas en lugar del formato compuesto. Actualice el código de la manera siguiente:string first = "Hello"; string second = "World"; Console.WriteLine($"{first} {second}!"); Console.WriteLine($"{second} {first}!"); Console.WriteLine($"{first} {first} {first}!");Guarde el archivo de código y use Visual Studio Code para ejecutar el código. Debería ver el siguiente resultado:
Hello World! World Hello! Hello Hello Hello!
Nota
Si observa ejemplos de código en libros y en línea, es probable que vea que se usan las dos técnicas, formato compuesto e interpolación de cadenas, pero generalmente se debe elegir la interpolación de cadenas.
Aplicación de formato a valores de moneda
El formato compuesto y la interpolación de cadenas se pueden usar para dar formato a valores que se muestran en función de un idioma y una referencia cultural concretos. En el ejemplo siguiente, se usa el especificador de formato de moneda :C para presentar las variables price y discount como moneda. Actualice el código de la manera siguiente:
decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");
Si ha ejecutado este código en un equipo con el idioma de visualización de Windows establecido en "English (United States)", verá la salida siguiente.
Price: $123.45 (Save $50.00)
Observe que si se agrega :C a los tokens incluidos entre las llaves, se aplica formato de moneda al número, independientemente de si se usa int o decimal.
Nota
¿Qué ocurre si no se conoce el país o la región, y el idioma? Si ejecuta el código anterior en el Editor de .NET "en el explorador", como trydotNet , verá la siguiente salida: Price: ¤123.45 (Save ¤50.00). Se ha usado el símbolo ¤ en lugar del símbolo de la moneda de su país o región. Se trata de un símbolo genérico que se usa para indicar "moneda" independientemente del tipo de moneda. Verá este símbolo en el editor de .NET porque omite la ubicación actual.
Cómo afecta el país o región y el idioma del usuario al formato de la cadena
¿Qué ocurre si ejecuta el código anterior en un equipo en Francia que tiene el idioma de visualización de Windows establecido en francés? En ese caso, vería la salida siguiente.
Price: 123,45 € (Save 50,00 €)
El motivo de la salida "€" anterior es que la característica de formato de moneda de la cadena depende de la configuración del equipo local para la referencia cultural. En este contexto, el término "cultura" hace referencia al país o región y al idioma del usuario final. El código de referencia cultural es una cadena de cinco caracteres que los equipos usan para identificar la ubicación y el idioma del usuario final. El código de referencia cultural garantiza que cierta información, como las fechas y la moneda, se presenten correctamente.
Por ejemplo:
- El código de referencia cultural de un hablante de inglés en EE. UU. es
en-US. - El código de referencia cultural de un hablante de francés en Francia es
fr-FR. - El código de referencia cultural de un hablante de francés en Canadá es
fr-CA.
La referencia cultural afecta al sistema de escritura, al calendario que se usa, al criterio de ordenación de las cadenas y al formato de fechas y números (como el formato de moneda).
Desafortunadamente, resulta complicado asegurarse de que el código funciona correctamente en todos los equipos con independencia del país y región o el idioma del usuario final. Este proceso se conoce como localización (o globalización). La localización depende de muchos factores que no se tratan en este módulo pero, básicamente, la sintaxis del formato de cadena podría usar un formato diferente en función de la referencia cultural del usuario.
Aplicación de formato a números
Al trabajar con datos numéricos, podría querer dar formato al número para facilitar la lectura mediante la inclusión de puntos para delimitar miles, millones, miles de millones, etc.
El especificador de formato numérico N hace que los números se lean mejor. Actualice el código de la manera siguiente:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");
Si lo ve desde la referencia cultural en-US, podrá observar la salida siguiente.
Measurement: 123,456.79 units
De forma predeterminada, el especificador de formato numérico N solo muestra dos dígitos después del separador decimal.
Si quiere mostrar más precisión, puede agregar un número después del especificador. En el código siguiente se mostrarán cuatro dígitos después del separador decimal mediante el especificador N4. Actualice el código de la manera siguiente:
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");
Si lo ve desde la referencia cultural en-US, podrá observar la salida siguiente.
Measurement: 123,456.7891 units
Aplicación de formato a porcentajes
Use el especificador de formato P para dar formato a porcentajes y redondeos a 2 posiciones decimales. Agregue un número después para controlar el número de valores que se muestran detrás del separador decimal. Actualice el código de la manera siguiente:
decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");
Si lo ve desde la referencia cultural en-US, podrá observar la salida siguiente.
Tax rate: 36.79%
Combinación de enfoques de formato
Las variables de cadena pueden almacenar cadenas creadas mediante técnicas de formato. En el ejemplo siguiente, se da formato a decimales y resultados matemáticos decimales y se almacenan en la cadena yourDiscount con formato compuesto.
Actualice el código de la manera siguiente.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
Console.WriteLine(yourDiscount);
Si lo ve desde la referencia cultural en-US, podrá observar la salida siguiente.
You saved $7.56 off the regular $67.55 price.
Puede combinar varias cadenas con formato. Se basa en el código anterior que concatenaba el porcentaje calculado mediante la interpolación de cadenas en lugar de la concatenación de cadenas mediante la inserción de yourDiscount += $"A discount of {(price - salePrice)/price:P2}!"; en el código de la línea anterior a Console.WriteLine().
Nota
No es necesario usar String.Format() con este enfoque de interpolación de cadenas.
Actualice el código de la manera siguiente.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
yourDiscount += $"A discount of {((price - salePrice)/price):P2}!"; //inserted
Console.WriteLine(yourDiscount);
Si ve esta unidad desde la referencia cultural en-US, podrá observar la salida siguiente.
You saved $7.56 off the regular $67.55 price. A discount of 11.19%!
Resumen
Estas son algunos de las conclusiones importantes de esta unidad sobre el formato de cadenas:
- Puede usar el formato compuesto o la interpolación de cadenas para dar formato a las cadenas.
- Con el formato compuesto, se usa una plantilla de cadena que contiene uno o varios tokens de reemplazo con el formato
{0}. También se proporciona una lista de argumentos que se comparan con los tokens de reemplazo según su orden. El formato compuesto funciona cuando se usastring.Format()oConsole.WriteLine(). - Con la interpolación de cadenas, se usa una plantilla de cadena que contiene los nombres de variable que se quieren reemplazar entre llaves. Se usa la directiva
$antes de la plantilla de cadena para indicar que se quiere interpolar la cadena. - Se aplica formato a los valores de moneda mediante un especificador
:C. - Se aplica formato a los números mediante un especificador
:N. La precisión (el número de valores después del separador decimal) se controla mediante un número después de:N, como en{myNumber:N3}. - Use el especificador de formato
:Ppara dar formato a los porcentajes. - El formato de moneda y número depende de la referencia cultural del usuario final, un código de cinco caracteres que incluye el país o la región y el idioma del usuario (según la configuración del equipo).