ใบความรู้ที่ 5.3
เมท็อดแบบคืนค่า
เมท็อดแบบคืนค่าเป็นเมท็อดที่ส่งผลลัพธ์กลับไปให้ยังผู้เรียกหลังจากการทำงานในเมท็อดเสร็จสิ้นลงตัวอย่างที่เราคุ้นเคยดีอยู่แล้วคือเมท็อด 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 มีความยาวสองอักขระอยู่แล้ว เหตุผลที่ต้องทำแบบนี้เพื่อให้เส้นตารางใน
ผลลัพธ์ดูสวยงาม ไม่เหลื่อมซ้อนกัน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น