Bài 6/7
Method
5 phút đọc
Công thức tính tiền đơn hàng được dùng ở trang giỏ hàng, trang thanh toán và hoá đơn. Chép công thức ra ba nơi thì lúc sửa phải nhớ sửa cả ba. Method giúp bạn viết một lần, đặt tên, rồi gọi ở bất cứ đâu.
Khái niệm
🛠️ Method: một khối code có tên, nhận đầu vào và có thể trả về kết quả, gọi được nhiều lần.
📥 Tham số (parameter): biến khai báo trong ngoặc của method, nhận giá trị được truyền vào lúc gọi.
📤 Giá trị trả về (return value): kết quả method gửi lại cho nơi gọi, bằng từ khoá return.
Ví dụ
decimal total = CalculateTotal(5000m, 3);
Console.WriteLine(total); // 15000
PrintLine("Cảm ơn quý khách");
decimal CalculateTotal(decimal price, int quantity)
{
return price * quantity;
}
void PrintLine(string message)
{
Console.WriteLine("--- " + message + " ---");
}Một method gồm bốn phần: decimal CalculateTotal(decimal price, int quantity).
decimal: kiểu của giá trị trả về.CalculateTotal: tên method, viết hoa chữ cái đầu, thường là động từ.(decimal price, int quantity): danh sách tham số.{ ... }: thân method,returngửi kết quả về và kết thúc method.
Method không trả về gì thì dùng void, như PrintLine.
Thử ngay
Dán vào Program.cs rồi chạy dotnet run:
decimal price = 100000m;
decimal result = ApplyDiscount(price, 10);
Console.WriteLine(price);
Console.WriteLine(result);
decimal ApplyDiscount(decimal amount, int percent)
{
amount = amount - amount * percent / 100;
return amount;
}Đoán trước khi chạy: method đã sửa amount. Vậy biến price bên ngoài
có bị đổi thành 90000 không?
Xem kết quả
100000
90000Không đổi. Lúc gọi, giá trị của price được chép vào tham số amount. Method
sửa bản chép, còn price giữ nguyên.
Lỗi hay gặp
Thiếu return. Method khai báo có kiểu trả về thì mọi nhánh đều phải
return.
// SAI — lỗi compile: nhánh else không trả về gì
Console.WriteLine(ShippingFee(100000m));
decimal ShippingFee(decimal total)
{
if (total >= 500000)
{
return 0;
}
}// ĐÚNG
Console.WriteLine(ShippingFee(100000m)); // 30000
decimal ShippingFee(decimal total)
{
if (total >= 500000)
{
return 0;
}
return 30000;
}Lấy kết quả từ method void. Method void không trả về gì để gán.
// SAI — lỗi compile: PrintLine không trả về giá trị
var text = PrintLine("Xin chào");
void PrintLine(string message)
{
Console.WriteLine(message);
}// ĐÚNG — chỉ gọi, không gán
PrintLine("Xin chào");
void PrintLine(string message)
{
Console.WriteLine(message);
}Tóm tắt
- Method là khối code có tên, viết một lần và gọi nhiều lần.
- Khai báo:
kiểu_trả_về Tên(tham số) { ... }. returngửi kết quả về,voidnghĩa là không trả về gì.- Tham số nhận bản chép của giá trị truyền vào, sửa tham số không đổi biến bên ngoài.
Tự kiểm tra
0/3 câuMethod int Square(int n) { return n * n; } Gọi Console.WriteLine(Square(4) + 1); in ra gì?
Method nào nên khai báo void?
int count = 5; AddOne(count); Console.WriteLine(count); với void AddOne(int n) { n = n + 1; }. In ra gì?