การส่งค่าไปยังเมท็อด
ค่าที่ถูกส่งไปนี้เรียกว่า อาร์กิวเมนต์ (argument) ส่วนเมท็อดที่ถูกเรียกจะรับค่าเหล่านี้ผ่านมาทางพารามิเตอร์ (parameter) ซึ่งถูกนิยามไว้ในส่วน parameter_list ของการประกาศเมท็อด (ลองย้อนกลับไปดู
รูปแบบการประกาศเมท็อดข้างต้น) เมท็อดแต่ละอันสามารถถูกประกาศให้มีพารามิเตอร์ได้ตั้งแต่ศูนย์ตัว
หรือมากกว่า โดยพารามิเตอร์แต่ละตัวจะต้องมีรูปแบบข้อมูลกำกับไว้เสมอ และอาร์กิวเมนต์ที่ใช้ในขณะ
เรียกใช้งานเมท็อดจะต้องมีรูปแบบข้อมูลที่ตรงกัน
ตัวอย่างที่ 5.2 เมท็อด PrintCharLine ด้านล่างนี้ดัดแปลงมาจากเมท็อด PrintLine เมท็อดใหม่นี้
กำหนดให้มีพารามิเตอร์สองตัว คือ c เป็นชนิด char และ len เป็นชนิด int โดยที่พารามิเตอร์ c ใช้
สำหรับระบุอักขระที่จะพิมพ์ออกทางจอภาพ ) ไม่ได้พิมพ์เพียงแค่ดาวอีกต่อไป (และ len ใช้ระบุจำนวน
อักขระที่ต้องการพิมพ์ในหนึ่งบรรทัด
1: using System;
2: class ParamNoRet {
3: static void PrintCharLine(char c, int len) {
4: for (int i = 0; i < len; i++)
5: Console.Write(c);
6: Console.WriteLine();
7: }
8:
9: static void Main() {
10: PrintCharLine(’o’, 10);
11: PrintCharLine(’x’, 20);
12: }
13: }
|
จากโปรแกรมข้างต้น การเรียกใช้เมท็อด PrintCharLine ครั้งแรกภายในเมท็อด Main ใน
บรรทัดที่ 10 มีอาร์กิวเมนต์เป็น 'o' และ 10 ซึ่งเมท็อด PrintCharLine จะรับค่าอาร์กิวเมนต์นี้เข้ามา
อยู่ในพารามิเตอร์ c และ len ตามลำดับ ดังนั้นจะเห็นว่าบรรทัดที่ 4 และ 5 จะมีผลทำให้โปรแกรมพิมพ์
อักขระ o ออกทางหน้าจอเป็นจำนวน 10 ตัว ในทำนองเดียวกัน การเรียกใช้เมท็อด PrintCharLine
ในบรรทัดที่ 11 จะมีผลทำให้โปรแกรมพิมพ์อักขระ x ออกทางหน้าจอเป็นจำนวน 20 ตัว
เมท็อดแบบคืนค่า
เมท็อดแบบคืนค่าเป็นเมท็อดที่ส่งผลลัพธ์กลับไปให้ยังผู้เรียกหลังจากการทำงานในเมท็อดเสร็จสิ้นลงตัวอย่างที่เราคุ้นเคยดีอยู่แล้วคือเมท็อด Console.ReadLine ซึ่งทำหน้าที่รอรับข้อมูลจากผู้ใช้และคืนค่าที่ผู้ใช้ป้อนในรูปของข้อความเพื่อให้โปรแกรมนำไปใช้ต่อไป หรือเมท็อด int.Parse ที่มีการรับ
ค่าพารามิเตอร์ในรูปข้อความและคืนค่ากลับออกมาเป็นตัวเลขที่สามารถนำไปใช้ในการคำนวณต่อไปได้
ดังนั้นโดยทั่วไปแล้วเมท็อดประเภทนี้จะปรากฏอยู่ในโปรแกรมในรูปของนิพจน์ชนิดต่าง ๆ ขึ้นอยู่กับชนิด
ของข้อมูลที่เมท็อดนั้น ๆ คืนกลับมาให้ อย่างไรก็ตามเราสามารถเรียกใช้เมท็อดเหล่านี้เป็นคำสั่งโดด ๆ ได้เช่นเดียวกับเมท็อดที่ไม่คืนค่าหากเราไม่ต้องการนำค่าที่คืนกลับมาไปประมวลผลใด ๆ
การสร้างเมท็อดแบบคืนค่าขึ้นมาเองนั้นต้องระบุชนิดของข้อมูลที่เมท็อดจะส่งกลับเอาไว้ในส่วนที่
เป็นreturn_type ของการประกาศเมท็อดนั้น ๆ แทนที่จะใช้คีย์เวิร์ด void เหมือนที่เคยใช้กับเมท็อด
แบบไม่คืนค่า และภายในตัวเมท็อดเองจะต้องมีการใช้คำสั่ง return เพื่อให้เมท็อดสิ้นสุดการทำงาน
ทันทีและส่งค่ากลับไปยังผู้เรียก รูปแบบการใช้งานคำสั่ง return เป็นดังนี้
return expression;
|
โดยแทนที่ expression ด้วยนิพจน์ที่จะถูกประเมินเป็นค่าที่ต้องการส่งกลับ
เมท็อดแบบคืนค่านิยมใช้ในกรณีที่ต้องการแจ้งให้ผู้เรียกใช้งานเมท็อดทราบถึงสถานะการทำงาน
ในเมท็อดเองว่าทำงานได้เสร็จสมบูรณ์หรือผิดพลาดอย่างไรโดยรายงานอยู่ในรูปของค่าความจริง true
หรือ false หรือหากความผิดพลาดสามารถเกิดขึ้นได้ในหลายกรณีแล้วเมท็อดนั้น ๆ สามารถรายงาน
ความผิดพลาดกลับไปได้ในรูปของรหัสความผิดพลาดที่กำหนดขึ้นมาเอง (เช่น ค่า 0 หมายถึงทำงานถูกต้องสมบูรณ์ 1 หมายถึงผู้ใช้ป้อนข้อมูลผิด หรือ 2 หมายถึงผู้ใช้ยกเลิกการทำงาน เป็นต้น)
อีกกรณีหนึ่งที่เมท็อดแบบคืนค่าถูกนำมาใช้มากคือการนิยามฟังก์ชัน (function) ทางคณิตศาสตร์
ขึ้นมาเองเพื่อชดเชยจากส่วนที่ขาดไปในคลาส Math อีกทั้งยังใช้ในการสร้างฟังก์ชันเพื่อคำนวณที่ซับซ้อนเพื่อซ่อนความซับซ้อนนั้นไม่ให้ปรากฏในส่วนของโปรแกรมหลักดังเช่นตัวอย่างต่อไปนี้
ตัวอย่างที่ 5.3 โปรแกรมต่อไปนี้นิยามเมท็อดชื่อ TriangleArea ขึ้นมาเพื่อคำนวณพื้นที่ของ
สามเหลี่ยมโดยรับพารามิเตอร์เป็นความสูงและความกว้างของสามเหลี่ยม ส่วนภายในเมท็อด Main จะเป็น เพียงการถามค่าความสูงและความกว้างจากผู้ใช้แล้วส่งค่าให้กับ TriangleArea เพื่อคำนวณพื้นที่
1: using System;
2: class Triangle {
3: static double TriangleArea(double w, double h) {
4: double area = w*h/2.0;
5: return area;
6: }
7:
8: static void Main() {
9: Console.Write("Enter width: ");
10: double width = double.Parse(Console.ReadLine());
11: Console.Write("Enter height: ");
12: double height = double.Parse(Console.ReadLine());
13: Console.WriteLine("The area of the triangle is {0:f2}.",
14: TriangleArea(width, height));
15: }
16: }
|
สังเกตว่าเนื่องจากเมท็อด TriangleArea ถูกประกาศให้คืนค่าเป็นชนิด double ในบรรทัด
ที่ 3ดังนั้นการเรียกใช้เมท็อดนี้จึงอยู่ในรูปของนิพจน์แบบ double ทำให้สามารถใช้งานร่วมกับเมท็อด
Console.WriteLine ในบรรทัดที่ 13-14 ได้ทันที
ตัวอย่างที่ 5.4 ตัวอย่างนี้แสดงการนิยามฟังก์ชัน
ให้อยู่ในรูปของเมท็อดที่ถูกเรียกใช้จากเมท็อด Main เพื่อแสดงตารางค่าของ f (n) สำหรับแต่ละค่าของ n ตั้งแต่ 1 ถึง 15
1: using System;
2: class Function {
3: static double f(int n) {
4: double sum = 0.0;
5: for (int i = 1; i <= n; i++)
6: sum += Math.Sqrt(i);
7:
8: return sum;
9: }
10:
11: static void Main() {
12: Console.WriteLine(" n | f(n)");
13: Console.WriteLine("---+------");
14: for (int n = 1; n <= 15; n++) {
15: Console.WriteLine("{0,2} | {1:f3}", n, f(n));
16: }
17: }
18: }
|
ตัวอย่างผลการทำงาน
n | f(n)
---+------
1 | 1.000
2 | 2.414
3 | 4.146
4 | 6.146
5 | 8.382
6 | 10.832
7 | 13.478
8 | 16.306
9 | 19.306
10 | 22.468
11 | 25.785
12 | 29.249
13 | 32.855
14 | 36.596
15 | 40.469
|
หมายเหตุ: สัญลักษณ์ {0,2} ที่ใช้ในคำสั่ง Console.WriteLine ในบรรทัดที่ 15 คือการกำหนดให้
ผลลัพธ์ในการพิมพ์ค่าในนิพจน์แรก (ซึ่งก็คือค่าในตัวแปร n) มีความยาวอย่างน้อยสองอักขระ เช่น หาก n
มีค่าเท่ากับ 3 ผลลัพธ์ที่พิมพ์ออกทางหน้าจอคือ ' 3' คือมีช่องว่างนำหน้าหนึ่งช่อง (ไม่รวมเครื่องหมาย
') ทำให้ผลลัพธ์โดยรวมมีความยาวสองอักขระ แต่ถ้า n มีค่าเท่ากับ 15 โปรแกรมจะแสดงผลลัพธ์ '15'
โดยไม่มีช่องว่างเนื่องจาก 15 มีความยาวสองอักขระอยู่แล้ว เหตุผลที่ต้องทำแบบนี้เพื่อให้เส้นตารางใน
ผลลัพธ์ดูสวยงาม ไม่เหลื่อมซ้อนกัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น