Chương 17: Scope
Tóm tắt chương trước
Bạn và Kurobo đã sẵn sàng.
Khả năng phát hiện kẻ địch! Check!
Sát thương! Check!
Chiến thuật đánh lẻ! Check!
Bây giờ, chỉ cần khám phá cẩn thận là được.
Kiến thức chương này
- Scope (phạm vi) là khái niệm chỉ khả năng truy cập của phương thức (method) hoặc biến (variable).
- Scope ích kỉ!
Cốt truyện
Nhờ khả năng quét kẻ địch trong không gian ba chiều, bạn và Kurobo nhẹ nhàng du kích những kẻ địch đi lẻ, né những chỗ đông, chật hẹp.
Cứ với đà này, khả năng thực chiến của bạn sẽ ngày càng mạnh.
Mặc dù thế giới kì quái này không có hệ thống level, nhưng bạn vẫn có cảm giác mỗi khi giết một kẻ địch, bạn lại mạnh hơn một chút.
Có thứ gì đó chảy vào bạn mỗi khi có kẻ gục xuống. Cảm giác này thực sự rất khó miêu tả.
Bạn có thể bắn ra Hoả Cầu to hơn, quét được khu vực lớn hơn, khả năng hồi phục sức bền cũng nhanh hơn…
…một chút.
…
Mặc dù chỉ một chút, nhưng bạn vẫn có thể cảm nhận được…
Scope là gì?
Như ta đã biết, một block statement sẽ bắt đầu bằng mở ngoặc nhọn và kết thúc bằng đóng ngoặc nhọn (đã đề cập trong chương 8). VD:
{
//this is a block statement
}
Tất cả các biến trong block statement chỉ có thể sử dụng bên trong chính nó.
Trong thí dụ trên, có 2 block statement của if và else. Biến print không thể sử dụng ở block statement bên dưới.
Nếu ta tiếp tục thêm một block statement vào bên trong block statement của if thì biến print vẫn có thể sử dụng, bởi thực chất print vẫn nằm bên trong block statement của if.
Trong C#, Scope (phạm vi) là khái niệm chỉ khả năng truy cập của phương thức (method) hoặc biến (variable).
@gamesnhalam
Nhờ đặc tính của scope, ta có thể sử dụng lại tên biến một cách có chủ đích. Chẳng hạn:
Cả hai đều là print nhưng một print dạng string, một dạng int.
Một trường hợp đặc biệt có thể đặt trùng tên biến mà ta cần hết sức lưu ý:
int score = 20;
ScorePrinter(500);
void ScorePrinter(int score)
{
Console.WriteLine(score);
}
Ở trường hợp này, khai báo thêm một biến score trong local function ScorePrinter() là không sai. Tuy vậy, biến score này không phải score = 20 bên ngoài mà là biến score của riêng function ScorePrinter().
Kết quả của đoạn code sẽ là 500 mà không phải 20.
Những trường hợp trùng tên biến nhiều lúc sẽ gây các rối không đáng có. Hãy thật cẩn thận nhé.
Cấu trúc của Console App
Cấu trúc của 1 Console App mà chúng ta đã tạo từ trước tới giờ như sau:
Trong Console App sẽ chứa class Program, trong class Program sẽ chứa method Main(), trong method Main() là chương trình mà trước giờ ta hay code: bao gồm các local function, variables, loop… (xem mục bonus chương 11).
Scope của biến hoặc method trong block cha sẽ không thể sử dụng trong block con. Chẳng hạn, các Local Function sẽ sử dụng được biến của Main(), của class Program; nhưng ngược lại, trong Main() không thể sử dụng được biến nằm trong các Local Function hoặc trong các loop.
Thí dụ 1: Trong Main(), ta có thể sử dụng biến score của class Program.
Thí dụ 2: Ngược lại, ta không thể sử dụng biến score trong block con ở Main().
Của cha là của con, của con là của con!
Kurobo
Scope quả là một thứ ích kỉ!
Quest: null!?@%)
Bạn ngạc nhiên bởi những kí tự lạ xuất hiện cuối chương sách.
Bạn không thể đọc bất cứ thông tin nào.
Kurobo cũng cau mày bó tay!
Là in lỗi sao? – Bạn thầm nghĩ.
Bạn tiếp tục lật sang chương kế tiếp ->
Chương Trước | Tổng quan | Chương Kế