Menu
CoddyTech

Thành viên có thân biểu thức

Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 14 trên 70.

Các thành viên có thân biểu thức cung cấp cú pháp ngắn gọn cho những thành viên chỉ chứa một biểu thức. Thay vì viết đầy đủ thân phương thức hoặc thuộc tính bằng dấu ngoặc nhọn, bạn dùng cú pháp mũi tên =>.

Với các phương thức (method) chỉ trả về một biểu thức, bạn có thể thay thế toàn bộ phần thân:

// Phương thức truyền thống
public int Add(int a, int b)
{
    return a + b;
}

// Phương thức có phần thân là biểu thức
public int Add(int a, int b) => a + b;

Cú pháp này cũng dùng được với thuộc tính chỉ đọc, bạn đã thấy qua ở phần trước:

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

Bạn cũng có thể dùng thân biểu thức cho riêng từng hàm getter và setter của thuộc tính:

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

Ngay cả hàm khởi tạo cũng có thể dùng cú pháp này khi chỉ chứa một câu lệnh:

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

Thành viên có thân biểu thức (expression-bodied members) giúp code dễ đọc hơn khi logic đơn giản. Hãy dùng chúng cho các thao tác đơn giản, nhưng hãy giữ cách viết thân hàm truyền thống khi cần nhiều câu lệnh hoặc logic phức tạp.

challenge icon

Thử thách

Dễ

Hãy cùng xây dựng một bộ tính giá sản phẩm để thể hiện sức mạnh của các thành viên dạng biểu thức, giúp viết code gọn gàng và súc tích.

Bạn sẽ tạo hai tệp để sắp xếp code:

  • Product.cs: Định nghĩa lớp Product trong không gian tên Store. Lớp này cần minh họa nhiều thành viên dạng biểu thức:
    • Một thuộc tính tự động triển khai Name (chuỗi) và BasePrice (số thập phân)
    • Một hàm khởi tạo dạng biểu thức để thiết lập cả hai thuộc tính
    • Một thuộc tính chỉ đọc dạng biểu thức TaxAmount để tính 10% giá cơ bản
    • Một thuộc tính chỉ đọc dạng biểu thức TotalPrice để trả về giá cơ bản cộng với tiền thuế
    • Một phương thức dạng biểu thức GetDiscount(decimal percentage) để trả về số tiền giảm giá (giá cơ bản nhân với tỷ lệ phần trăm rồi chia cho 100)
    • Một phương thức dạng biểu thức GetFinalPrice(decimal discountPercentage) để trả về tổng giá trừ đi khoản giảm giá
  • Program.cs: Trong tệp chính, tạo một Product bằng các giá trị đầu vào, sau đó hiển thị chi tiết giá.

Bạn sẽ nhận ba đầu vào:

  • Tên sản phẩm
  • Giá cơ bản
  • Tỷ lệ phần trăm giảm giá cần áp dụng

In chi tiết giá theo định dạng này:

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

Ví dụ: nếu đầu vào là Laptop, 1000 và 15, đầu ra sẽ là:

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

Định dạng mỗi giá trị tiền tệ với chính xác hai chữ số thập phân, chẳng hạn như value.ToString("F2") hoặc $"{value:F2}". Quy tắc này áp dụng như nhau cho giá cơ bản, tiền thuế, tổng giá, khoản giảm giá và giá cuối cùng.

Nhớ dùng cú pháp mũi tên => cho mọi thành viên chỉ chứa một biểu thức. Cách này giúp code gọn gàng và dễ đọc!

Tự làm thử

using System;
using Store;

class Program
{
    public static void Main(string[] args)
    {
        // Đọc các giá trị đầu vào
        string name = Console.ReadLine();
        decimal basePrice = Convert.ToDecimal(Console.ReadLine());
        decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());

        // Tạo đối tượng Product từ các giá trị đầu vào
        Product product = new Product(name, basePrice);

        // Tính số tiền giảm giá bằng phương thức GetDiscount
        decimal discountAmount = product.GetDiscount(discountPercentage);

        // Tính giá cuối cùng bằng phương thức GetFinalPrice
        decimal finalPrice = product.GetFinalPrice(discountPercentage);

        // In ra chi tiết giá theo định dạng yêu cầu:
        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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C# online