Menu
CoddyTech

Lệnh trả về sớm

Thuộc phần Logic và luồng chương trình trong hành trình C# của Coddy. Bài học 18 trên 66.

Trả về sớm (early return) là kỹ thuật thoát khỏi một phương thức (method) ngay khi có câu trả lời hoặc gặp điều kiện không hợp lệ, thay vì lồng các câu lệnh điều kiện (conditional statement) vào nhau.

Hãy cùng so sánh hai cách kiểm tra tên người dùng:

Không dùng câu lệnh return sớm (các câu lệnh điều kiện lồng nhau):

public bool ValidateUsername(string username)
{
    bool isValid = false;
    
    if (username != null)
    {
        if (username.Length >= 3)
        {
            if (username.Length <= 20)
            {
                isValid = true;
            }
        }
    }
    
    return isValid;
}

Khi dùng return sớm:

public bool ValidateUsername(string username)
{
    // Trả về ngay nếu username là null
    if (username == null)
        return false;
        
    // Trả về ngay nếu username quá ngắn
    if (username.Length < 3)
        return false;
        
    // Trả về ngay nếu username quá dài
    if (username.Length > 20)
        return false;
        
    // Nếu đến đây, username hợp lệ
    return true;
}

Lệnh return sớm giúp code dễ đọc hơn và giảm mức thụt lề.

challenge icon

Thử thách

Dễ

Viết một phương thức có tên ProcessPayment để xác định liệu có thể xử lý khoản thanh toán dựa trên các điều kiện sau:

  1. Số tiền thanh toán phải lớn hơn 0
  2. Số dư tài khoản phải đủ
  3. Tài khoản không được bị khóa

Dùng lệnh return sớm để kiểm tra từng điều kiện và trả về thông báo lỗi phù hợp.

Phương thức cần:

  • Nhận ba tham số: decimal paymentAmount, decimal accountBalance và bool isAccountLocked
  • Trả về một chuỗi có giá trị là "Payment processed successfully" hoặc một thông báo lỗi
  • Dùng lệnh return sớm để xác thực

In thông báo lỗi chính xác theo các định dạng sau:

  • "Error: Payment amount must be positive"
  • "Error: Insufficient funds"
  • "Error: Account is locked"

Tự làm thử

using System;

public class Program
{
    public static string ProcessPayment(decimal paymentAmount, decimal accountBalance, bool isAccountLocked)
    {
        // Viết code của bạn tại đây
    }
    
    public static void Main(string[] args)
    {
        decimal paymentAmount = decimal.Parse(Console.ReadLine());
        decimal accountBalance = decimal.Parse(Console.ReadLine());
        bool isAccountLocked = bool.Parse(Console.ReadLine());
        
        string result = ProcessPayment(paymentAmount, accountBalance, isAccountLocked);
        Console.WriteLine(result);
    }
}
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 Logic và luồng chương trình

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