แบบฝึกหัด - สร้างรหัสด้วยวิธีการ
วิธีการมีประโยชน์สําหรับการจัดระเบียบโค้ด การนําโค้ดกลับมาใช้ใหม่ และเพื่อแก้ไขปัญหาอย่างมีประสิทธิภาพ คุณสามารถนึกภาพวิธีการ เช่น กล่องสีดําที่รับข้อมูลป้อนเข้า ดําเนินการงานที่มีชื่อ และแสดงผลลัพธ์ ด้วยสมมติฐานนี้คุณสามารถจัดโครงสร้างโปรแกรมอย่างรวดเร็วโดยการตั้งชื่องานของคุณเป็นวิธีการแล้วกรอกข้อมูลในตรรกะหลังจากที่คุณระบุงานที่จําเป็นทั้งหมดแล้ว
เมื่อคุณใช้ภาษาธรรมดาเพื่ออธิบายขั้นตอนในโค้ด โดยไม่ต้องปฏิบัติตามกฎไวยากรณ์อย่างเคร่งครัด คุณกําลังใช้ "รหัส pseudo" การรวมวิธีการและโค้ดหลอกเป็นวิธีที่ยอดเยี่ยมในการขับเคลื่อนงานการเขียนโปรแกรมที่ท้าทายอย่างรวดเร็ว
ใช้วิธีการจัดโครงสร้างรหัส
สมมติว่าคุณเป็นผู้สมัครในการสัมภาษณ์เรื่องการเข้ารหัส ผู้สัมภาษณ์ต้องการให้คุณเขียนโปรแกรมที่ตรวจสอบว่าที่อยู่ IPv4 ถูกต้องหรือไม่ คุณได้รับกฎต่อไปนี้:
- ที่อยู่ IPv4 ที่ถูกต้องประกอบด้วยตัวเลขสี่ตัวที่คั่นด้วยจุด
- แต่ละตัวเลขต้องไม่มีเลขศูนย์นําหน้า
- ตัวเลขแต่ละตัวต้องอยู่ในช่วงตั้งแต่ 0 ถึง 255
1.1.1.1 และ 255.255.255.255 เป็นตัวอย่างของที่อยู่ IP ที่ถูกต้อง
ที่อยู่ IPv4 จะแสดงเป็นสตริง คุณสามารถสันนิษฐานได้ว่าจะมีตัวเลขและจุดเท่านั้น (ไม่มีตัวอักษรในสตริงที่ระบุ)
คุณจะเข้าใกล้งานนี้ได้อย่างไร
โน้ต
ถึงแม้ว่าคุณไม่คุ้นเคยกับที่อยู่ IP แต่ไม่ต้องกังวล! คุณยังคงสามารถกรอกรหัสในแบบฝึกหัดนี้ได้โดยทําตามขั้นตอน
ทําลายปัญหา
สําหรับงานนี้ คุณจะต้องระบุขั้นตอนที่จําเป็นในการแก้ไขปัญหา หากคุณดูกฎอย่างใกล้ชิด คุณอาจตระหนักว่าจะใช้เพียงสามขั้นตอนในการพิจารณาว่าที่อยู่ IPv4 ถูกต้องหรือไม่
ใน Visual Studio Code Editor ให้ลบโค้ดที่มีอยู่ออกจากแบบฝึกหัดก่อนหน้า
ป้อนรหัสหลอกต่อไปนี้ลงในตัวแก้ไข:
/* if ipAddress consists of 4 numbers and if each ipAddress number has no leading zeroes and if each ipAddress number is in range 0 - 255 then ipAddress is valid else ipAddress is invalid */รหัส Pseudo เป็นวิธีที่ดีในการเริ่มแก้ไขปัญหาใด ๆ เมื่อใช้บล็อกข้อคิดเห็นนี้ คุณจะเชื่อมโยงช่องว่างระหว่างกฎพร้อมท์และรหัสโปรแกรม เพื่อทําให้งานหลักๆ ที่โค้ดของคุณดําเนินการชัดเจนขึ้น โค้ด Pseudo ไม่จําเป็นต้องทํางานหรือปฏิบัติตามกฎไวยากรณ์ อย่างไรก็ตามควรเป็นคําอธิบายที่ชัดเจนว่าโค้ดจะทําอย่างไร ตอนนี้เรามาเปลี่ยนสิ่งนี้เป็นโค้ดจริงกันเถอะ!
ป้อนบรรทัดโค้ดว่างใหม่ จากนั้นพิมพ์โค้ดต่อไปนี้ในตัวแก้ไข:
if (ValidateLength() && ValidateZeroes() && ValidateRange()) { Console.WriteLine($"ip is a valid IPv4 address"); } else { Console.WriteLine($"ip is an invalid IPv4 address"); }ในขั้นตอนนี้ คุณแปลงคําสั่ง
ifจากรหัสเทียมของคุณเป็นวิธีการที่สามารถเรียกใช้งานได้และแสดงผลลัพธ์ ไม่ต้องกังวลเกี่ยวกับการกําหนดวิธีการ คุณสามารถสันนิษฐานได้ว่าแต่ละวิธีจะทํางานที่ชื่อนั้นๆ คุณจะแก้ไขข้อผิดพลาดในการคอมไพล์และสร้างตรรกะวิธีการในเร็ว ๆ นี้ แต่มุ่งเน้นไปที่ภาพรวมสําหรับตอนนี้ เมื่อคุณเริ่มทํางานกับโปรแกรมใหม่ การมุ่งเน้นไปที่การออกแบบโดยรวมช่วยให้คุณจัดระเบียบและพัฒนาแอปพลิเคชันของคุณได้เร็วขึ้นป้อนบรรทัดรหัสว่างใหม่ด้านล่างโค้ดที่มีอยู่ จากนั้นพิมพ์โค้ดต่อไปนี้ในตัวแก้ไข:
void ValidateLength() {} void ValidateZeroes() {} void ValidateRange() {}โปรดสังเกตว่าการใช้วิธีตัวแทนข้อความช่วยให้คุณเข้าถึงปัญหาและจัดโครงสร้างโค้ดของคุณเพื่อพัฒนาโซลูชันได้อย่างรวดเร็ว ตอนนี้คุณมีแผนที่มีโครงสร้างแล้ว คุณสามารถแก้ไขปัญหาต่อไปได้โดยการกรอกโค้ดทีละชิ้น
พัฒนาโซลูชันของคุณ
ตอนนี้คุณมีวิธีการตัวแทนข้อความทั้งหมดที่จําเป็นในการแก้ไขปัญหาแล้ว คุณสามารถเริ่มมุ่งเน้นไปที่รายละเอียดของโซลูชันของคุณได้ โปรดทราบว่ารูปแบบการป้อนข้อมูลของที่อยู่ IPv4 จะเป็นสตริงที่ประกอบด้วยตัวเลขที่คั่นด้วยจุด มาเริ่มต้นกันเลย!
ในตอนต้นของโปรแกรมของคุณ ให้สร้างตัวแปรเพื่อจัดเก็บสถานะการป้อนข้อมูลและการตรวจสอบความถูกต้อง:
string ipv4Input = "107.31.1.5"; bool validLength = false; bool validZeroes = false; bool validRange = false;อัปเดตรหัสโซลูชันของคุณเพื่อใช้ตัวแปรตรวจสอบความถูกต้องดังต่อไปนี้:
ValidateLength(); ValidateZeroes(); ValidateRange(); if (validLength && validZeroes && validRange) { Console.WriteLine($"ip is a valid IPv4 address"); } else { Console.WriteLine($"ip is an invalid IPv4 address"); }อัปเดตวิธีการ
ValidateLengthดังนี้:void ValidateLength() { string[] address = ipv4Input.Split("."); validLength = address.Length == 4; };กฎข้อแรกระบุว่าที่อยู่ IPv4 ต้องมีตัวเลขสี่ตัว ดังนั้นในรหัสนี้ คุณใช้
string.Splitเพื่อแยกตัวเลขและตรวจสอบว่ามีสี่หลักอัปเดตวิธีการ
ValidateZeroesดังนี้:void ValidateZeroes() { string[] address = ipv4Input.Split("."); foreach (string number in address) { if (number.Length > 1 && number.StartsWith("0")) { validZeroes = false; } } validZeroes = true; }ใช้เวลาสักครู่เพื่อพิจารณาว่ากฎแปลเป็นโค้ดอย่างไร
กฎข้อที่สองระบุว่าตัวเลขในที่อยู่ IPv4 ต้องไม่มีเลขศูนย์นําหน้า ดังนั้นวิธีการนี้จําเป็นต้องตรวจสอบตัวเลขสําหรับเลขศูนย์นําหน้าในขณะที่ยอมรับ
0เป็นตัวเลขที่ถูกต้อง ถ้าตัวเลขทั้งหมดมีเลขศูนย์ที่ถูกต้องvalidZeroesควรเท่ากับtrueและfalseถ้าเป็นอย่างอื่น ดังนั้นในรหัสนี้ คุณตรวจสอบว่าแต่ละตัวเลขที่มีตัวเลขมากกว่าหนึ่งหลักไม่ได้เริ่มต้นด้วยศูนย์หากคุณมองอย่างใกล้ชิด คุณจะสังเกตเห็นว่า
validZeroesถูกตั้งค่าเป็นtrueหลังจากที่รอบforeachเสร็จสมบูรณ์แล้ว อย่างไรก็ตาม คุณต้องการตั้งค่าvalidZeroesเป็นtrueหากไม่พบศูนย์นําหน้า คุณสามารถแก้ไขบักนี้ได้โดยการตั้งค่าvalidZeroes = trueก่อนที่จะเรียกใช้รอบforeachอย่างไรก็ตาม คุณยังสามารถแก้ไขบั๊กนี้ได้โดยใช้คําสั่ง ส่งกลับอัปเดตโค้ดของคุณเป็นรายการต่อไปนี้:
foreach (string number in address) { if (number.Length > 1 && number.StartsWith("0")) { validZeroes = false; return; } }ส่งกลับคําสั่ง จะยุติการดําเนินการของเมธอด และส่งกลับตัวควบคุมไปยังตัวเรียกเมธอด เพิ่มคําสั่ง
returnหลังจากvalidZeroes = falseยุติวิธีการ หลังจากพบศูนย์ที่ไม่ถูกต้องครั้งแรก ถ้าไม่พบศูนย์ที่ไม่ถูกต้อง เมธอด จะสิ้นสุดการทํางานหลังจากการตั้งค่าvalidZeroesเป็นtrueไปต่อที่วิธีถัดไปกันอัปเดตวิธีการ
ValidateRangeดังนี้:void ValidateRange() { string[] address = ipv4Input.Split("."); foreach (string number in address) { int value = int.Parse(number); if (value < 0 || value > 255) { validRange = false; return; } } validRange = true; }กฎข้อที่สามระบุว่าแต่ละหมายเลขในที่อยู่ IPv4 ต้องอยู่ในช่วงตั้งแต่ 0 ถึง 255 ดังนั้นในรหัสนี้คุณตรวจสอบว่าแต่ละหมายเลขน้อยกว่า 255 และหากไม่เป็นการยกเลิกการดําเนินการหลังจากการตั้งค่า
validRangeเป็นfalseเนื่องจากสตริงป้อนเข้ามีตัวเลขและจุดเท่านั้น คุณไม่จําเป็นต้องตรวจสอบจํานวนลบอย่างไรก็ตาม อาจมีกรณีที่ไม่มีตัวเลขอยู่ระหว่างจุด ตัวอย่างเช่น "255...255" ในกรณีนี้
string.Split(".")จะส่งกลับรายการที่ว่างเปล่า ซึ่งส่งผลให้int.Parseล้มเหลว คุณสามารถป้องกันได้โดยการระบุStringSplitOptionsอัปเดตโค้ดของคุณดังต่อไปนี้:
string[] address = ipv4Input.Split(".", StringSplitOptions.RemoveEmptyEntries);การใช้
StringSplitOptions.RemoveEmptyEntriesจะละเว้นรายการที่ว่างเปล่าจากอาร์เรย์addressและป้องกันความพยายามในการแยกวิเคราะห์สตริงที่ว่างเปล่า
ทําให้โซลูชันของคุณเสร็จสมบูรณ์
ตอนนี้คุณมีวิธีการทั้งหมดเสร็จสมบูรณ์เพื่อตรวจสอบที่อยู่ IP แล้ว ถึงเวลาเข้าเยี่ยมชมโซลูชันเริ่มต้นของคุณอีกครั้ง ในงานนี้ คุณจะเพิ่มค่าที่ป้อนเข้าเพิ่มเติมและเตรียมพร้อมสําหรับการทดสอบรหัสของคุณ
ค้นหารหัสต่อไปนี้ที่คุณเขียนไว้ก่อนหน้านี้ในโปรแกรม:
string ipv4Input = "107.31.1.5";อัปเดตโค้ดดังต่อไปนี้:
string[] ipv4Input = {"107.31.1.5", "255.0.0.255", "555..0.555", "255...255"};เมื่อพัฒนาโซลูชัน สิ่งสําคัญคือต้องทดสอบโค้ดของคุณด้วยกรณีอินพุตที่แตกต่างกัน ในโค้ดนี้ คุณจะระบุช่วงที่เหมาะสมของค่าการทดสอบ หลังจากที่คุณได้อัปเดตค่าทดสอบของคุณแล้ว คุณจะต้องอัปเดตรหัสของคุณเพื่อใช้ค่าใหม่ เนื่องจากค่าอยู่ในอาร์เรย์ คุณจะต้องอัปเดตรหัสของคุณเพื่อทดสอบแต่ละรายการโดยใช้การวนรอบ
อัปเดตโค้ดของคุณดังต่อไปนี้:
foreach (string ip in ipv4Input) { ValidateLength(); ValidateZeroes(); ValidateRange(); if (validLength && validZeroes && validRange) { Console.WriteLine($"{ip} is a valid IPv4 address"); } else { Console.WriteLine($"{ip} is an invalid IPv4 address"); } }สุดท้าย คุณจําเป็นต้องแก้ไขข้อมูลป้อนเข้าที่แต่ละวิธีใช้เนื่องจากคุณอัปเดต
ipv4Inputจากสตริงไปยังอาร์เรย์ เนื่องจากแต่ละวิธีใช้string.Splitคุณสามารถประกาศตัวแปรเพื่อจัดเก็บผลลัพธ์ของstring.Splitและใช้ในแต่ละวิธีแทนเพิ่มตัวแปรเพื่อจัดเก็บที่อยู่ IPv4 ปัจจุบันที่แต่ละเมธอดจะอ้างอิง:
string[] ipv4Input = {"107.31.1.5", "255.0.0.255", "555..0.555", "255...255"}; string[] address; bool validLength = false; bool validZeroes = false; bool validRange = false;เริ่มต้น
addressโดยใช้string.Splitดังนี้:foreach (string ip in ipv4Input) { address = ip.Split(".", StringSplitOptions.RemoveEmptyEntries);ลบการอ้างอิงไปยัง
string.Splitออกจากวิธีการตรวจสอบความถูกต้องแต่ละวิธีเพื่อให้ใช้ตัวแปรaddressส่วนกลางแทน เช่น:void ValidateLength() { validLength = address.Length == 4; };
ตรวจสอบงานของคุณ
สําหรับงานนี้ คุณจะเรียกใช้แอปพลิเคชันของคุณจากเทอร์มินัลรวมและตรวจสอบว่ารหัสของคุณทํางานได้อย่างถูกต้อง มาเริ่มต้นกันเลย
เปรียบเทียบโค้ดของคุณกับโค้ดต่อไปนี้เพื่อให้แน่ใจว่าถูกต้อง:
string[] ipv4Input = {"107.31.1.5", "255.0.0.255", "555..0.555", "255...255"}; string[] address; bool validLength = false; bool validZeroes = false; bool validRange = false; foreach (string ip in ipv4Input) { address = ip.Split(".", StringSplitOptions.RemoveEmptyEntries); ValidateLength(); ValidateZeroes(); ValidateRange(); if (validLength && validZeroes && validRange) { Console.WriteLine($"{ip} is a valid IPv4 address"); } else { Console.WriteLine($"{ip} is an invalid IPv4 address"); } } void ValidateLength() { validLength = address.Length == 4; }; void ValidateZeroes() { foreach (string number in address) { if (number.Length > 1 && number.StartsWith("0")) { validZeroes = false; return; } } validZeroes = true; } void ValidateRange() { foreach (string number in address) { int value = int.Parse(number); if (value < 0 || value > 255) { validRange = false; return; } } validRange = true; }บันทึกงานของคุณโดยใช้ Ctrl + S หรือใช้เมนูไฟล์ของ Visual Studio Code
หากจําเป็น ให้เปิดแผงเทอร์มินัลแบบรวมของ Visual Studio Code
ในแผง EXPLORER ในการเปิดเทอร์มินัลที่ตําแหน่งโฟลเดอร์ TestProject ของคุณ ให้คลิกขวาที่ TestProjectจากนั้นเลือก เปิดในเทอร์มินัลแบบรวม
ที่พร้อมท์คําสั่งเทอร์มินัล ให้ใส่ dotnet ทํางาน
ตรวจสอบว่าโค้ดของคุณสร้างเอาต์พุตต่อไปนี้:
107.31.1.5 is a valid IPv4 address 255.0.0.255 is a valid IPv4 address 555..0.555 is an invalid IPv4 address 255...255 is an invalid IPv4 addressหากรหัสของคุณแสดงผลลัพธ์ที่แตกต่างกัน คุณจะต้องตรวจสอบรหัสของคุณเพื่อค้นหาข้อผิดพลาดและทําการอัปเดต เรียกใช้รหัสอีกครั้งเพื่อดูว่าคุณได้แก้ไขปัญหาหรือไม่ อัปเดตและเรียกใช้โค้ดของคุณต่อจนกว่ารหัสของคุณจะสร้างผลลัพธ์ที่คาดหวัง
การสรุป
นี่คือสิ่งที่คุณได้เรียนรู้เกี่ยวกับการใช้วิธีการจนถึงตอนนี้:
- สามารถใช้วิธีการเพื่อจัดโครงสร้างแอปพลิเคชันได้อย่างรวดเร็ว
- คําหลัก
returnสามารถใช้เพื่อยุติการดําเนินการของวิธีการ - แต่ละขั้นตอนของปัญหามักจะสามารถแปลเป็นวิธีการของตนเอง
- ใช้วิธีการแก้ปัญหาเล็ก ๆ เพื่อสร้างโซลูชันของคุณ