Menu
CoddyTech

Từ khóa 'params'

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 47 trên 70.

Từ khóa (keyword) params cho phép một phương thức (method) nhận số lượng đối số (argument) cùng kiểu dữ liệu thay đổi. Thay vì yêu cầu bên gọi tự tạo mảng, bạn có thể truyền trực tiếp các đối số, ngăn cách bằng dấu phẩy.

Đặt params trước tham số mảng trong chữ ký phương thức:

public static int Sum(params int[] numbers)
{
    int total = 0;
    foreach (int n in numbers)
        total += n;
    return total;
}

// Tất cả các lời gọi này đều hoạt động
Console.WriteLine(Sum(1, 2));           // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5));  // 15
Console.WriteLine(Sum());               // 0 (mảng rỗng)

Trình biên dịch tự động gói các đối số vào một mảng. Nếu đã có sẵn một mảng, bạn cũng có thể truyền trực tiếp mảng đó:

int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values));  // 60

Có một vài quy tắc cần nhớ: một phương thức chỉ có thể có một tham số params, và tham số này phải đứng cuối danh sách. Bạn có thể kết hợp tham số này với các tham số thông thường:

public static void Log(string prefix, params object[] items)
{
    foreach (var item in items)
        Console.WriteLine(prefix + item);
}

Log("Item: ", "Apple", 42, true);

Từ khóa params giúp API linh hoạt hơn và thuận tiện hơn cho bên gọi, đó là lý do bạn thấy nó trong các phương thức như Console.WriteLine và string.Format.

challenge icon

Thử thách

Dễ

Hãy tạo một trình định dạng thông điệp linh hoạt sử dụng từ khóa params để xử lý số lượng giá trị bất kỳ. Bạn sẽ tạo một lớp tiện ích có thể định dạng thông điệp với các đối số thay đổi, qua đó cho thấy params giúp các phương thức linh hoạt hơn và dễ gọi hơn.

Bạn sẽ sắp xếp code trong hai tệp:

  • MessageFormatter.cs: Tạo lớp MessageFormatter trong không gian tên Formatting với hai phương thức sử dụng params:
    • Combine(params string[] parts): nối tất cả chuỗi được cung cấp, đặt một dấu cách giữa chúng, rồi trả về kết quả
    • FormatList(string label, params int[] numbers): kết hợp một tham số thông thường với một mảng params. Phương thức cần trả về nhãn, theo sau là dấu hai chấm, rồi đến tất cả số được phân tách bằng dấu phẩy (ví dụ: Scores: 85, 90, 78)
  • Program.cs: Trong tệp chính, hãy minh họa cả hai phương thức bằng các đầu vào. Đọc một chuỗi nhãn, rồi đọc một dòng gồm các số nguyên được phân tách bằng dấu phẩy. Dùng Combine để nối ba từ cố định, rồi dùng FormatList để hiển thị nhãn cùng các số.

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

  • Một chuỗi nhãn (ví dụ: Scores)
  • Một danh sách số nguyên được phân tách bằng dấu phẩy (ví dụ: 85,90,78,92)

Trước tiên, gọi Combine với các từ "Hello", "params" và "world!", rồi in kết quả. Sau đó, phân tích các số nguyên được phân tách bằng dấu phẩy thành một mảng và gọi FormatList với nhãn cùng mảng số nguyên, rồi in cả kết quả đó.

Ví dụ: nếu đầu vào là Scores và 85,90,78, đầu ra sẽ là:

Hello params world!
Scores: 85, 90, 78

Hãy chú ý cách Combine nhận trực tiếp số lượng chuỗi bất kỳ, còn FormatList cho thấy bạn có thể kết hợp tham số thông thường với params. Tham số params chỉ cần nằm cuối cùng. Bạn cũng có thể truyền một mảng có sẵn cho phương thức params, đúng như cách bạn sẽ làm với các số nguyên đã phân tích!

Tự làm thử

using System;
using Formatting;

class Program
{
    public static void Main(string[] args)
    {
        // Đọc các giá trị đầu vào
        string label = Console.ReadLine();
        string numbersInput = Console.ReadLine();
        
        // TODO: Dùng MessageFormatter.Combine với "Hello", "params" và "world!"
        // và in kết quả ra
        
        
        // TODO: Phân tích các số nguyên phân tách bằng dấu phẩy thành một mảng (array) int
        // Gợi ý: Tách chuỗi và chuyển từng phần thành int
        
        
        // TODO: Dùng MessageFormatter.FormatList với label và mảng int
        // và in kết quả ra
        
    }
}
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