แบบฝึกหัด - ทําความเข้าใจขอบเขตวิธีการ
for
if-elseรอบ คําสั่ง และวิธีการแสดงชนิดของบล็อกโค้ดที่แตกต่างกัน แต่ละบล็อกรหัสมี 'ขอบเขต' ของตนเอง 'ขอบเขต' เป็นภูมิภาคของโปรแกรมที่ข้อมูลบางอย่างสามารถเข้าถึงได้ ตัวแปรที่ประกาศภายในวิธีการ หรือบล็อกโค้ดใด ๆ สามารถเข้าถึงได้ภายในภูมิภาคนั้นเท่านั้น เนื่องจากโปรแกรมมีความซับซ้อนมากขึ้น รูปแบบนี้ช่วยให้ผู้เขียนโปรแกรมใช้ตัวแปรที่มีชื่อชัดเจนอย่างสม่ําเสมอและรักษาโค้ดที่อ่านง่าย
ในแบบฝึกหัดนี้ คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับขอบเขตของเมธอด โดยการทํางานกับวิธีการและตัวแปรชนิดต่างๆ
ทดสอบขอบเขตตัวแปร
คําสั่งที่ประกาศภายนอกบล็อกรหัสใด ๆ เรียกว่าคําสั่งระดับบนสุด ตัวแปรที่ประกาศในคําสั่งระดับบนสุดเรียกว่า 'ตัวแปรส่วนกลาง' ตัวแปรโกลบอลไม่จํากัดขอบเขตใด ๆ และสามารถใช้ได้ทุกที่ตลอดโปรแกรม ตัวแปรส่วนกลางอาจเป็นประโยชน์สําหรับวิธีการต่าง ๆ ที่จําเป็นต้องเข้าถึงข้อมูลเดียวกัน อย่างไรก็ตาม สิ่งสําคัญคือต้องให้ความสนใจกับชื่อตัวแปรในขอบเขตที่แตกต่างกัน
ใน Visual Studio Code Editor ให้ลบโค้ดที่มีอยู่ออกจากแบบฝึกหัดก่อนหน้า
ป้อนรหัสต่อไปนี้ลงในตัวแก้ไขรหัส Visual Studio:
string[] students = {"Jenna", "Ayesha", "Carlos", "Viktor"}; DisplayStudents(students); DisplayStudents(new string[] {"Robert","Vanya"}); void DisplayStudents(string[] students) { foreach (string student in students) { Console.Write($"{student}, "); } Console.WriteLine(); }ในรหัสนี้ คุณสร้างอาร์เรย์ส่วนกลาง
studentsและเมธอดDisplayStudentsที่ยอมรับพารามิเตอร์ที่มีชื่อเดียวกันบันทึกและเรียกใช้โค้ดเพื่อสังเกตเอาต์พุตต่อไปนี้:
Jenna, Ayesha, Carlos, Viktor, Robert, Vanya,โปรดสังเกตว่าพารามิเตอร์
studentเมธอดมีความสําคัญมากกว่าอาร์เรย์ส่วนกลางstudentสิ่งสําคัญคือต้องตั้งใจว่าตัวแปรโกลบอลใดที่คุณต้องการให้วิธีการใช้ลบรหัสก่อนหน้า
ป้อนโค้ดต่อไปนี้ลงในตัวแก้ไข:
PrintCircleArea(12); void PrintCircleArea(int radius) { double pi = 3.14159; double area = pi * (radius * radius); Console.WriteLine($"Area = {area}"); }รหัสนี้จะคํานวณและแสดงพื้นที่ของวงกลม
พยายามอ้างอิงตัวแปรภายใน
PrintCircleAreaวิธีการ โดยการอัปเดตโค้ดของคุณดังนี้:PrintCircleArea(12); double circumference = 2 * pi * radius;ข้อความแสดงข้อผิดพลาดปรากฏขึ้นเพื่อแจ้งให้คุณทราบว่าชื่อ
piและradiusไม่มีอยู่ในขอบเขตปัจจุบัน ตัวแปรเหล่านั้นมีอยู่ภายในPrintCircleAreaขอบเขตเมธอดเท่านั้นลบโค้ดที่ไม่ถูกต้องและเพิ่มโค้ดต่อไปนี้:
void PrintCircleCircumference(int radius) { double pi = 3.14159; double circumference = 2 * pi * radius; Console.WriteLine($"Circumference = {circumference}"); }เนื่องจากตัวแปร
piถูกตั้งค่าเป็นค่าคงที่เดียวกันและใช้ในทั้งสองวิธี ค่านี้จึงเป็นตัวเลือกที่ดีสําหรับตัวแปรโกลบอล ในตัวอย่างradiusนี้ ไม่ใช่ตัวแปรส่วนกลางเพื่อให้คุณสามารถเรียกใช้วิธีการ ที่มีค่าแตกต่างกันของradiusโดยไม่ต้องอัปเดตตัวแปรในแต่ละครั้งอัปเดตโค้ดของคุณเป็นรายการต่อไปนี้:
double pi = 3.14159; void PrintCircleArea(int radius) { double area = pi * (radius * radius); Console.WriteLine($"Area = {area}"); } void PrintCircleCircumference(int radius) { double circumference = 2 * pi * radius; Console.WriteLine($"Circumference = {circumference}"); }ในตอนนี้ทั้งสองวิธีสามารถอ้างอิงค่าเดียวกันของ
piโดยไม่ต้องกําหนด คุณอาจเดาว่าวิธีการนั้นสามารถเรียกวิธีการอื่นได้แล้ว โดยทั่วไป ตราบใดที่วิธีการ ถูกกําหนดภายในขอบเขตของโปรแกรมของคุณ วิธีการดังกล่าวสามารถเรียกได้ทุกที่เพิ่มวิธีการใหม่ลงในโค้ดของคุณดังนี้:
double pi = 3.14159; PrintCircleInfo(12); PrintCircleInfo(24); void PrintCircleInfo(int radius) { Console.WriteLine($"Circle with radius {radius}"); PrintCircleArea(radius); PrintCircleCircumference(radius); }ในโค้ดนี้ คุณสร้างเมธอด
PrintCircleInfoใหม่เพื่อเรียกใช้วิธีการที่มีอยู่ ค่าของradiusจะถูกส่งลงไปยังแต่ละวิธี การสร้างวิธีการแบบแยกส่วนสามารถช่วยให้จัดระเบียบโค้ดของคุณและอ่านได้ง่ายบันทึกและเรียกใช้โค้ดเพื่อสังเกตเอาต์พุตต่อไปนี้:
Circle with radius 12 Area = 452.38896 Circumference = 75.39815999999999 Circle with radius 24 Area = 1809.55584 Circumference = 150.79631999999998
สรุป
นี่คือสิ่งที่คุณได้เรียนรู้เกี่ยวกับขอบเขตของเมธอดจนถึงตอนนี้:
- ตัวแปรที่ประกาศภายในวิธีการ จะสามารถเข้าถึงได้เฉพาะวิธีการนั้นเท่านั้น
- ตัวแปรที่ประกาศในคําสั่งระดับบนสุดสามารถเข้าถึงได้ตลอดทั้งโปรแกรม
- วิธีการไม่สามารถเข้าถึงตัวแปรที่กําหนดไว้ภายในวิธีการต่าง ๆ ได้
- วิธีการสามารถเรียกใช้วิธีการอื่น ๆ ได้