แบบฝึกหัด - วิธีการที่มีพารามิเตอร์ทางเลือก
ภาษา C Sharp อนุญาตให้ใช้พารามิเตอร์ที่มีชื่อและเป็นทางเลือก พารามิเตอร์ชนิดเหล่านี้ช่วยให้คุณเลือกอาร์กิวเมนต์ที่คุณต้องการใส่ในเมธอด ดังนั้นคุณจึงไม่จํากัดโครงสร้างที่กําหนดไว้ในลายเซ็นของวิธีการ
อาร์กิวเมนต์ที่มีชื่อช่วยให้คุณสามารถระบุค่าสําหรับพารามิเตอร์โดยใช้ชื่อแทนที่จะเป็นตําแหน่ง พารามิเตอร์ที่เลือกได้ช่วยให้คุณสามารถละเว้นอาร์กิวเมนต์เหล่านั้นเมื่อเรียกใช้วิธีการ
ในแบบฝึกหัดนี้ คุณจะได้เรียนรู้วิธีการใช้ทั้งพารามิเตอร์ที่มีชื่อและพารามิเตอร์ทางเลือก
สร้างแอปพลิเคชัน RSVP
สําหรับงานนี้ คุณจะต้องสร้างแอปพลิเคชันแบบย่อสําหรับผู้เยี่ยมชม RSVP ไปยังเหตุการณ์ ผู้เข้าพักจะให้ขนาดของปาร์ตี้และโรคภูมิแพ้ นอกจากนี้ คุณยังจะเพิ่มตัวเลือกเพื่อจํากัด RSVP ให้อยู่ในรายชื่อผู้เยี่ยมชมที่เชิญเท่านั้น
ใน Visual Studio Code Editor ให้ลบโค้ดที่มีอยู่ออกจากแบบฝึกหัดก่อนหน้า
พิมพ์โค้ดต่อไปนี้ลงใน Visual Studio Code Editor:
string[] guestList = {"Rebecca", "Nadia", "Noor", "Jonte"}; string[] rsvps = new string[10]; int count = 0; void RSVP(string name, int partySize, string allergies, bool inviteOnly) { if (inviteOnly) { // search guestList before adding rsvp } rsvps[count] = $"Name: {name}, \tParty Size: {partySize}, \tAllergies: {allergies}"; count++; } void ShowRSVPs() { Console.WriteLine("\nTotal RSVPs:"); for (int i = 0; i < count; i++) { Console.WriteLine(rsvps[i]); } }ในโค้ดนี้ คุณสร้างตัวแปรเพื่อจัดเก็บรายการผู้เยี่ยมชมและ rsvps เม
RSVPธอด จะผนวกข้อมูลผู้เยี่ยมชมไปยังรายการ และShowRSVPsเมธอดจะแสดง RSVP ทั้งหมดโดยใช้ลําดับการหลีกเลี่ยงแท็บเพื่อแยกข้อมูลผู้เยี่ยมชมป้อนรหัสต่อไปนี้ใน
RSVPวิธีการ เพื่อค้นหารายชื่อผู้เยี่ยมชม:if (inviteOnly) { bool found = false; foreach (string guest in guestList) { if (guest.Equals(name)) { found = true; break; } } if (!found) { Console.WriteLine($"Sorry, {name} is not on the guest list"); return; } }ในรหัสนี้คุณจะตรวจสอบว่าชื่อที่กําหนดเท่ากับชื่อใด ๆ ในรายชื่อผู้เยี่ยมชมหรือไม่ ถ้าพบค่าที่ตรงกัน คุณตั้งค่า
foundเป็นจริงและแยกออกจากforeachรอบ หากfoundเป็นเท็จ คุณต้องแสดงข้อความและใช้returnคําสําคัญเพื่อยุติวิธีการเรียกวิธีการของคุณโดยการเพิ่มรหัสต่อไปนี้เหนือ
RSVPลายเซ็นวิธีการ:RSVP("Rebecca", 1, "none", true); RSVP("Nadia", 2, "Nuts", true); RSVP("Linh", 2, "none", false); RSVP("Tony", 1, "Jackfruit", true); RSVP("Noor", 4, "none", false); RSVP("Jonte", 2, "Stone fruit", false); ShowRSVPs();บันทึกและเรียกใช้โค้ดเพื่อสังเกตเอาต์พุตต่อไปนี้:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruit
ใช้อาร์กิวเมนต์ที่มีชื่อ
เมื่อเรียกใช้เมธอด ที่รับพารามิเตอร์จํานวนมาก อาจเป็นเรื่องยุ่งยากในการทําความเข้าใจสิ่งที่อาร์กิวเมนต์แสดง การใช้อาร์กิวเมนต์ที่มีชื่อสามารถทําให้โค้ดของคุณอ่านง่ายขึ้น ใช้อาร์กิวเมนต์ที่มีชื่อโดยระบุชื่อพารามิเตอร์ตามด้วยค่าอาร์กิวเมนต์ ในงานนี้ คุณจะฝึกการใช้อาร์กิวเมนต์ที่มีชื่อ
ค้นหาบรรทัดของโค้ดต่อไปนี้:
RSVP("Linh", 2, "none", false);อัปเดตการเรียกใช้เมธอด ดังนี้:
RSVP(name: "Linh", partySize: 2, allergies: "none", inviteOnly: false);โปรดสังเกตว่าคุณใส่ชื่อของพารามิเตอร์ ตามด้วยเครื่องหมายทวิภาคและค่า ไวยากรณ์นี้จะกําหนดอาร์กิวเมนต์ที่มีชื่อ ไม่จําเป็นต้องตั้งชื่ออาร์กิวเมนต์ทั้งหมด ตัวอย่างเช่น ไวยากรณ์ต่อไปนี้ก็ถูกต้องเช่นกัน:
RSVP("Linh", 2, allergies: "none", inviteOnly: false);RSVP("Linh", partySize: 2, "none", false);อาร์กิวเมนต์ที่มีชื่อ เมื่อใช้กับอาร์กิวเมนต์ตําแหน่งจะใช้ได้หากใช้ในตําแหน่งที่ถูกต้อง อาร์กิวเมนต์ที่มีชื่อจะถูกต้องตราบใดที่ไม่ได้ตามด้วยอาร์กิวเมนต์ตําแหน่งใดๆ ตัวอย่างเช่น การรวมถึง
"Linh"และ2ที่ส่วนท้ายจะไม่ถูกต้อง:RSVP(allergies: "none", inviteOnly: false, "Linh", 2);ถ้าคุณป้อนรหัสนี้ คุณจะได้รับข้อผิดพลาดต่อไปนี้:
Named argument 'allergies' is used out-of-position but is followed by an unnamed argumentค้นหาบรรทัดของโค้ดต่อไปนี้:
RSVP("Tony", 1, "Jackfruit", true);อัปเดตการเรียกใช้เมธอด ดังนี้:
RSVP("Tony", inviteOnly: true, allergies: "Jackfruit", partySize: 1);โปรดสังเกตว่าอาร์กิวเมนต์ที่มีชื่อไม่จําเป็นต้องปรากฏในลําดับเดิม อย่างไรก็ตาม อาร์กิวเมนต์
Tonyที่ไม่มีชื่อเป็นอาร์กิวเมนต์ตําแหน่ง และต้องปรากฏในตําแหน่งที่ตรงกันบันทึกและเรียกใช้โค้ดเพื่อสังเกตเอาต์พุตต่อไปนี้:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruitโปรดสังเกตว่าการใช้อาร์กิวเมนต์ที่มีชื่อจะไม่เปลี่ยนแปลงผลลัพธ์
ประกาศพารามิเตอร์ที่เลือกได้
พารามิเตอร์จะกลายเป็น ตัวเลือก เมื่อได้รับการกําหนดค่าเริ่มต้น ถ้าพารามิเตอร์ที่เลือกได้ถูกเว้นไว้จากอาร์กิวเมนต์ ค่าเริ่มต้นจะถูกใช้เมื่อวิธีการปฏิบัติการ ในขั้นตอนนี้ คุณจะสร้างพารามิเตอร์ partySizeallergies และ inviteOnly เป็นทางเลือก
หากต้องการกําหนดพารามิเตอร์ที่เลือกได้ ให้อัปเดตลายเซ็นของ
RSVPเมธอด ดังนี้:void RSVP(string name, int partySize = 1, string allergies = "none", bool inviteOnly = true)ใช้เวลาสักครู่เพื่อสังเกตไวยากรณ์ พารามิเตอร์ยังคงถูกคั่นด้วยเครื่องหมายจุลภาค แต่พารามิเตอร์
partySize,allergiesและinviteOnlyจะถูกกําหนดให้กับค่าถัดไป คุณจะอัปเดตการเรียกใช้เพื่อ
RSVPนําพารามิเตอร์ที่เลือกได้ไปใช้อัปเดตโค้ดของคุณเป็นรายการต่อไปนี้:
RSVP("Rebecca"); RSVP("Nadia", 2, "Nuts"); RSVP(name: "Linh", partySize: 2, inviteOnly: false); RSVP("Tony", allergies: "Jackfruit", inviteOnly: true); RSVP("Noor", 4, inviteOnly: false); RSVP("Jonte", 2, "Stone fruit", false);ในการเรียกใช้แต่ละวิธี ให้สังเกตว่าไม่มีการเว้นชื่อไว้ เมื่อมีการเรียกใช้เมธอด อาร์กิวเมนต์ที่จําเป็นทั้งหมดจะต้องถูกรวมไว้เสมอ อย่างไรก็ตาม สามารถละเว้นอาร์กิวเมนต์ที่เป็นทางเลือกใด ๆ ได้
ในโค้ดนี้ คุณได้ลบอาร์กิวเมนต์
1, "none", trueออกจาก rsvp ของ Rebecca เนื่องจากอาร์กิวเมนต์เหล่านี้ตรงกับค่าเริ่มต้น ผลลัพธ์ของ rsvp ของ Rebecca จะเหมือนกันคุณได้เอา
inviteOnlyอาร์กิวเมนต์ออกจาก rsvp ของ Nadia แล้ว เนื่องจากค่าเริ่มต้นของinviteOnlyคือtrueผลลัพธ์ของ rsvp ของ Nadia จะเหมือนกันคุณได้เอา
partySizeอาร์กิวเมนต์ออกจาก rsvp ของ Tony แล้ว ถ้า Tony มีคําเชิญ ค่าเริ่มต้นของpartySizeจะถูกใช้ใน RSVPคุณได้เอา
allergiesอาร์กิวเมนต์ออกจาก rsvps ของ Linh และ Noor rsvps ของพวกเขาจะแสดงค่าเริ่มต้นของnoneสําหรับ "โรคภูมิแพ้"บันทึกและเรียกใช้โค้ดเพื่อสังเกตเอาต์พุตต่อไปนี้:
Sorry, Tony is not on the guest list Total RSVPs: Name: Rebecca, Party Size: 1, Allergies: none Name: Nadia, Party Size: 2, Allergies: Nuts Name: Linh, Party Size: 2, Allergies: none Name: Noor, Party Size: 4, Allergies: none Name: Jonte, Party Size: 2, Allergies: Stone fruitโปรดสังเกตว่าค่าเริ่มต้นจะถูกใช้แทนอาร์กิวเมนต์ที่ถูกละเว้น เช่น
partySizeและallergies
สรุป
นี่คือสิ่งที่คุณได้เรียนรู้เกี่ยวกับอาร์กิวเมนต์ที่เลือกได้และมีชื่อจนถึงตอนนี้:
- พารามิเตอร์จะถูกเลือกโดยการตั้งค่าเริ่มต้นในลายเซ็นของวิธีการ
- อาร์กิวเมนต์ที่มีชื่อจะถูกระบุด้วยชื่อพารามิเตอร์ ตามด้วยเครื่องหมายทวิภาคและค่าอาร์กิวเมนต์
- เมื่อมีการรวมอาร์กิวเมนต์ที่มีชื่อและตําแหน่ง คุณต้องใช้ลําดับที่ถูกต้องของพารามิเตอร์