Menu
Coddy logo textTech

Miembros con cuerpo de expresión

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 14 de 70.

Los miembros Expression-bodied proporcionan una sintaxis concisa para miembros que contienen solo una sola expresión. En lugar de escribir cuerpos completos de métodos o propiedades con llaves, se utiliza la sintaxis de flecha =>.

Para métodos que devuelven una sola expresión, puedes reemplazar todo el cuerpo:

// Método tradicional
public int Add(int a, int b)
{
    return a + b;
}

// Método con cuerpo de expresión
public int Add(int a, int b) => a + b;

Esta sintaxis también funciona para propiedades de solo lectura, lo cual ya has visto brevemente:

public class Circle
{
    public double Radius { get; set; }
    public double Area => Math.PI * Radius * Radius;
    public double Circumference => 2 * Math.PI * Radius;
}

También puedes usar cuerpos de expresión para los getters y setters de las propiedades de forma individual:

private string name;
public string Name
{
    get => name;
    set => name = value.Trim();
}

Incluso los constructores pueden usar esta sintaxis cuando contienen una sola instrucción:

public class Person
{
    public string Name { get; }
    public Person(string name) => Name = name;
}

Los miembros Expression-bodied hacen que tu código sea más legible cuando la lógica es simple. Úsalos para operaciones sencillas, pero quédate con los cuerpos tradicionales cuando necesites múltiples sentencias o una lógica compleja.

challenge icon

Desafío

Fácil

Vamos a construir una calculadora de precios de productos que demuestre el poder de los miembros con cuerpo de expresión para escribir código limpio y conciso.

Crearás dos archivos para organizar tu código:

  • Product.cs: Define una clase Product en el namespace Store. Esta clase debe demostrar varios miembros con cuerpo de expresión:
    • Una propiedad auto-implementada Name (string) y BasePrice (decimal)
    • Un constructor con cuerpo de expresión que configure ambas propiedades
    • Una propiedad de solo lectura con cuerpo de expresión TaxAmount que calcule el 10% del precio base
    • Una propiedad de solo lectura con cuerpo de expresión TotalPrice que devuelva el precio base más el monto de impuestos
    • Un método con cuerpo de expresión GetDiscount(decimal percentage) que devuelva el monto del descuento (precio base multiplicado por el porcentaje dividido entre 100)
    • Un método con cuerpo de expresión GetFinalPrice(decimal discountPercentage) que devuelva el precio total menos el descuento
  • Program.cs: En tu archivo principal, crea un Product utilizando los valores de entrada y después muestra su desglose de precios.

Recibirás tres entradas:

  • Nombre del producto
  • Precio base
  • Porcentaje de descuento a aplicar

Imprime los detalles del precio en este formato:

Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}

Por ejemplo, si las entradas son Laptop, 1000 y 15, la salida debería ser:

Product: Laptop
Base Price: 1000.00
Tax (10%): 100.00
Total Price: 1100.00
Discount (15%): 150.00
Final Price: 950.00

Formatea cada valor monetario para que tenga exactamente dos decimales — por ejemplo value.ToString("F2") o $"{value:F2}". Esto aplica por igual al precio base, al impuesto, al total, al descuento y al precio final.

¡Recuerda usar la sintaxis de flecha => para todos los miembros que contengan una sola expresión. Esto mantiene tu código limpio y legible!

Pruébalo tú mismo

using System;
using Store;

class Program
{
    public static void Main(string[] args)
    {
        // Leer las entradas
        string name = Console.ReadLine();
        decimal basePrice = Convert.ToDecimal(Console.ReadLine());
        decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());

        // Crear un objeto Product usando los valores de entrada
        Product product = new Product(name, basePrice);

        // Calcular el monto del descuento usando el método GetDiscount
        decimal discountAmount = product.GetDiscount(discountPercentage);

        // Calcular el precio final usando el método GetFinalPrice
        decimal finalPrice = product.GetFinalPrice(discountPercentage);

        // Imprimir los detalles de precios en el formato requerido:
        Console.WriteLine($"Product: {product.Name}");
        Console.WriteLine($"Base Price: {product.BasePrice:F2}");
        Console.WriteLine($"Tax (10%): {product.TaxAmount:F2}");
        Console.WriteLine($"Total Price: {product.TotalPrice:F2}");
        Console.WriteLine($"Discount ({discountPercentage}%): {discountAmount:F2}");
        Console.WriteLine($"Final Price: {finalPrice:F2}");
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos