# C# - Phương thức vô danh: Hướng dẫn thân thiện cho người mới bắt đầu

Xin chào các nhà lập trình tương lai! Hôm nay, chúng ta sẽ bắt đầu một chuyến hành trình thú vị vào thế giới của C# và khám phá một khái niệm gọi là Phương thức vô danh. Đừng lo lắng nếu nó听起来 có vẻ bí ẩn - đến cuối bài hướng dẫn này, bạn sẽ sử dụng những công cụ mạnh mẽ này như một chuyên gia!

## Phương thức vô danh là gì?

Trước khi chúng ta đi sâu vào, hãy phân tích xem "vô danh" có nghĩa là gì trong lập trình. Trong thế giới lập trình, "vô danh" đơn giản có nghĩa là "không có tên". Vậy, phương thức vô danh là một phương thức (một bộ các hướng dẫn) không có tên. Nó giống như một điệp viên trong thế giới lập trình - nó thực hiện công việc của mình mà không tiết lộ danh tính!

Phương thức vô danh là cách để tạo ra các đoạn mã nhỏ, nội tuyến có thể được truyền đi như thể chúng là các đối tượng. Chúng đặc biệt hữu ích khi bạn cần một phương thức nhanh chóng, sử dụng một lần mà không cần phải khai báo chính thức.

## Viết một phương thức vô danh

Bây giờ, hãy cởi bỏ áo khoác và xem cách chúng ta có thể viết một phương thức vô danh. Cú pháp cơ bản trông như thế này:

```csharp
delegate(parameters)
{
    // thân phương thức
};

Đừng để điều này làm bạn hoảng sợ! Hãy cùng phân tích nó:

C# - Anonymous Methods

  1. delegate là từ khóa cho biết chúng ta sắp định nghĩa một phương thức không có tên.
  2. (parameters) là nơi chúng ta liệt kê bất kỳ đầu vào nào mà phương thức của chúng ta cần, giống như trong các phương thức thông thường.
  3. Dấu ngoặc vuông { } chứa mã thực tế mà phương thức của chúng ta sẽ thực thi.

Một ví dụ đơn giản

Hãy bắt đầu với một ví dụ rất đơn giản:

Action sayHello = delegate()
{
    Console.WriteLine("Hello, Phương thức vô danh!");
};

sayHello();

Nếu bạn chạy đoạn mã này, bạn sẽ thấy "Hello, Phương thức vô danh!" được in ra trên console. Hãy phân tích những gì đang xảy ra:

  1. Chúng ta đang tạo một biến叫做 sayHello có kiểu Action. Một Action là một loại delegate内置 trong C# đại diện cho một phương thức không có giá trị trả về.
  2. Chúng ta đang gán một phương thức vô danh cho biến này. Phương thức này không nhận bất kỳ tham số nào (đó là lý do tại sao dấu ngoặc trống rỗng) và đơn giản là in ra một thông báo.
  3. Chúng ta có thể gọi phương thức này bằng cách sử dụng sayHello(), giống như chúng ta sẽ làm với một phương thức có tên thông thường.

Các ví dụ phức tạp hơn

Ví dụ 1: Phương thức vô danh với tham số

Hãy tạo một phương thức vô danh nhận tham số:

Func<int, int, int> add = delegate(int a, int b)
{
    return a + b;
};

int result = add(5, 3);
Console.WriteLine($"5 + 3 = {result}");

Trong ví dụ này:

  1. Chúng ta sử dụng Func<int, int, int>, đại diện cho một phương thức nhận hai tham số int và trả về một int.
  2. Phương thức vô danh của chúng ta nhận hai tham số, ab, và trả về tổng của chúng.
  3. Chúng ta có thể sử dụng phương thức này như bất kỳ phương thức nào khác, truyền giá trị vào và nhận kết quả.

Ví dụ 2: Phương thức vô danh với vòng lặp

Phương thức vô danh có thể chứa logic phức tạp hơn:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

numbers.ForEach(delegate(int num)
{
    if (num % 2 == 0)
    {
        Console.WriteLine($"{num} là số chẵn");
    }
    else
    {
        Console.WriteLine($"{num} là số lẻ");
    }
});

Dưới đây là những gì đang xảy ra:

  1. Chúng ta có một danh sách số.
  2. Chúng ta sử dụng phương thức ForEach của danh sách, phương thức này nhận một delegate làm đối số.
  3. Phương thức vô danh của chúng ta là delegate đó. Nó nhận mỗi số trong danh sách, kiểm tra xem nó có phải là số chẵn hay không và in kết quả.

Khi nào nên sử dụng phương thức vô danh

Phương thức vô danh rất tốt cho các đoạn mã ngắn, sử dụng một lần. Chúng thường được sử dụng trong:

  1. Các bộ xử lý sự kiện
  2. Truy vấn LINQ
  3. Các phương thức yêu cầu tham số delegate (như ví dụ ForEach ở trên)

Tuy nhiên, nếu bạn thấy mình viết cùng một phương thức vô danh nhiều lần, có lẽ tốt hơn nên tạo một phương thức có tên thay vì thế.

Lời khuyên

Mặc dù phương thức vô danh rất mạnh mẽ, nhưng chúng có thể làm cho mã của bạn khó đọc hơn nếu sử dụng quá nhiều. Luôn ưu tiên rõ ràng trong mã. Nếu một phương thức vô danh trở nên quá phức tạp, hãy cân nhắc tách nó thành một phương thức có tên.

Kết luận

Chúc mừng! Bạn vừa mới bước những bước đầu tiên vào thế giới của phương thức vô danh trong C#. Những đoạn mã nhỏ bé này có thể làm cho lập trình của bạn linh hoạt và gọn hơn. Trong hành trình tiếp tục của bạn với C#, bạn sẽ tìm thấy nhiều tình huống hơn nữa nơi phương thức vô danh có thể tiết kiệm thời gian và đơn giản hóa mã của bạn.

Nhớ rằng, chìa khóa để thành thạo các khái niệm lập trình là thực hành. Vậy, đừng ngần ngại - thử nghiệm với phương thức vô danh trong các dự án của riêng bạn. Trước khi bạn biết, bạn sẽ sử dụng chúng như một chuyên gia!

Chúc bạn lập trình vui vẻ, và mong rằng các phương thức của bạn luôn chạy mượt mà, dù chúng có tên hay không!

Credits: Image by storyset