Method
Vuttichai Vicheanchai http://www.it.msu.ac.th/onizuka email :
[email protected] 1
คลาส(class)
• การสร้างคลาส (class) • รูปแบบ [modifier] class <ชื่อคลาส> {
; Method() { <Statements>; } } 2
คลาส(class)
public class Pen { Color color; float price; Attributes float thickness; void drawLine() { …………. Statement ………. } Color getColor() { ……….. Statement …………. }
Method
} 3
เมธอด (method)
• คือชุดคำาสั่งทีท่ ำางานอย่างใดอย่างหนึง่ อาจมีการคืนค่ากลับออกมาหรือไม่ก็ได้ • เมธอดช่วยลดขั้นตอนการเขียนโปรแกรมที่มีการทำางานซำ้าซ้อน ให้ไม่ต้องเขียนซำ้าๆ • เมธอดต้องอยู่ภายใต้ { } ของคลาสเท่านัน้ • เมธอดอยู่ภายใต้ { } ของเมธอดอื่นไม่ได้
4
เมธอด (method)
• ตัวอย่าง • จงเขียนโปรแกรมคำานวนหาค่าของ 4 ยกกำาลัง 7 โดยไม่ใช้ Math.pow(); int result = 1; for(int i = 1;i<=7;i++) result *= 4; System.out.println(result); 5
เมธอด (method)
• จงเขียนโปรแกรมคำานวนหาค่าของ 4 ยกกำาลัง 7 for(int i = 1;i<=7;i++) result *= 4; System.out.println(result); 2 ยกกำาลัง 5 for(int i = 1;i<=5;i++) result *= 2; 45 ยกกำาลัง 6 System.out.println(result); 7 power 9 for(int i = 1;i<=6;i++) result *= 45; 10 power 8 System.out.println(result); โดยไม่ใช้ Math.pow(); 6
เมธอด (method)
• เมธอดมีขึ้นเพื่อลดขั้นตอนของการทำางาน for(int i = 1;i<=เลขยกกำาลัง;i++) result *= เลขฐาน; System.out.println(result);
7
การประกาศเมธอด
• รูปแบบ [modifier] <ชื่อเมธอด>(พารามีเตอร์) { <statements>; } • return type คือชนิดข้อมูลของผลลัพธ์ที่คืนกลับมาจากเมธอดหลังจากทำางา นเสร็จสิ้นแล้ว • พารามีเตอร์ คือ ค่าของข้อมูลที่ส่งเข้าไปในเมธอด เพื่อนำาไปใช้ในการทำางานต่อไป 8
การประกาศเมธอด • ตัวอย่าง
1. return type คือคำาว่าอะไร 2. พารามีเตอร์มีกี่ตัว อะไรบ้าง มีชนิดข้อมูลคืออะไร 9
return type • • • • • • • •
คือ ชนิดของข้อมูลที่มีการคืนค่าออกมาจากเมธอด void = เมธอดนั้นไม่มีการคืนค่าใดๆเลย int = ผลลัพธ์ของเมธอดคืนค่าออกมาเป็น int float = ผลลัพธ์ของเมธอดคืนค่าออกมาเป็น float String = ผลลัพธ์ของเมธอดคืนค่าออกมาเป็น String char = ผลลัพธ์ของเมธอดคืนค่าออกมาเป็น char ชนิดข้อมูลอืน่ ๆ เมธอดที่มี return type ทีไ่ ม่ใช่ void ต้องมีคำาสั่ง return ด้วยเสมอ
10
ตัวอย่าง return type
• คำาถาม • return type มีชนิดข้อมูลคือ ? • ถ้ามี return type ที่ไม่ใช่ void ต้องมีคำาสั่งอะไรเสมอ 11
ชื่อเมธอด
• หลักการตัง้ ชื่อ • ตั้งให้สื่อความหมาย • ถ้าเมธอดทำาหน้าที่ในการกำาหนดค่าให้โปรแกรมควรขึ้นต้นด้วย คำาว่า set (เรียกว่า setter method) • ถ้าเมธอดทำาหน้าที่ในการดึงค่าจากโปรแกรมควรขึ้นต้นด้วยคำาว่ า get (เรียกว่า getter method)
12
ชื่อเมธอด
• ตัวอักษรตัวแรกของคำาแรกจะเป็นตัวเล็ก (lower case) • ตัวอักษรตัวแรกของคำาต่อไปจะเป็นตัวใหญ่ (upper case) OK compareTo()
max() setDefaultColor()
NO K compareto() CompareTo() compare_to() MAX() setdefaultcolor() set_default_color() SetDefaultColor()
13
ชื่อเมธอด • Setter Method OK
NO K
setColor()
changeColor()
setLocation()
makeLocationTo()
setFont()
goToFont()
14
ชื่อเมธอด • Getter Method OK
NO K
getColor()
checkColorForMe()
getName()
whatIsName()
getWidth()
widthOfSquare()
15
ชื่อเมธอด • ถ้าเมธอดทำาหน้าที่ในการตรวจสอบสิ่งใดๆ ควรขึ้นต้นว่า is OK
NO K
isLetter()
checkTheLetter()
isLoweCase()
lowerCharacter()
isTitleCase()
titleLetterOrNot()
16
พารามิเตอร์ของเมธอด
• พารามีเตอร์คือ ค่าของข้อมูลที่จะถูกส่งเข้าไปใน เมธอด เพื่อนำาไปใช้ในการทำางานภายในเมธอดต่อไป • รูปแบบ <ชื่อเมธอด>(พารามีเตอร์ตัวที่ 1, พารามีเตอร์ตัวที่ 2,……) • พารามีเตอร์ ทุกตัวต้องมีการกำาหนดชนิดข้อมูล power(int base, int exp) • พารามีเตอร์แต่ละตัวมีชนิดข้อมูลที่ต่างกันได้ copyString(String str, int index)
17
การใช้งานพารามิเตอร์
void methodA(){ char c = 'E'; int i = 30; output(c, i); }
ตัวนี้คอื การส่งค่าเข้าไปให้เมธอด ตัวนี้คอื การรับค่าเข้าไปในเมธอด
void output(char ch, int size ){ for(int i = 0;i<size; i++) System.out.println(ch); } 18
การใช้งานเมธอด
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } • คำาถาม • โปรแกรมนี้มีเมธอดหรือไม่ • เมธอดชื่ออะไร, return type, พารามีเตอร์คืออะไร
19
การเรียกใช้เมธอด
• ขั้นตอนการเรียกใช้เมธอด 2. สร้าง Object ของคลาสทีเ่ มธอดนั้นเป็นสมาชิกอยู่โดยคำาสั่ง รูปแบบ <ชื่อคลาส> <ชื่อObject> = new <ชื่อคลาส>( ); Hello myObj = new Hello(); 2. เมื่อสร้าง Object แล้วจึงจะเรียกใช้งานเมธอดได้ โดยการใช้ . (จุด) ต่อท้าย Object แล้วตามด้วยชื่อเมธอด myObj.printLine();
20
การใช้งานเมธอด
class HelloWorld { public static void main(String[] args) { HelloWorld h = new HelloWorld(); h.print(); } void print() { System.out.println("Hello World!"); } } 21
การใช้งานเมธอด
22
ขอบเขตของตัวแปร(ทบทวนของเดิม)
• ขอบเขตของตัวแปรเป็นสิ่งที่ต้องคำานึงถึงในการเขียนโปรแกร มที่เมธอด • ตัวแปรใดประกาศในเมธอดไหน จะใช้งานได้เฉพาะในเมธอดนั้นเท่านั้น • ขอบเขตของตัวแปร ดูจาก { } ว่าตัวแปรอยู่ภายใต้ { } ใด
23
ขอบเขตของตัวแปร
ผิดตรงไหน
24
ขอบเขตของตัวแปร
num2 อยู่ใน{ } นี้เท่านั้น i อยู่ในลูป for เท่านั้น 25
Static method
• คือเมธอดที่ถูกสร้างทันทีที่มีการรันโปรแกรม แล้วเก็บเมธอดไว้ในหน่วยความจำาเพื่อสามารถเรียกใช้งานได้ทั นที • การสร้าง static method • ต้องมีคำาว่า static ขึ้นต้นเมธอดเสมอ
• ตัวอย่าง static void printStar(int number) static double calTax(double salary) 26
การใช้งาน Static method
• การใช้งาน static method สามารถเรียกใช้งานได้ทันที ไม่ต้องมีการสร้าง Object ของคลาสก่อน
non Static method
Static method
27
Static method
• การเลือกใช้ Static method กับ non Static method • ในเมื่อ Static method สร้างแล้วเรียกใช้งานได้เลย โดยไม่ต้องสร้าง Object ของคลาสก่อน สะดวกกว่า • ทำาไมไม่เขียนเป็น Static ทั้งหมดเลย • ตัวอย่าง ถ้า static method 1 method จองพื้นที่หน่วยความจำา 100 kB 100 method เท่ากับ 100 * 100 = 10000 kB เพียง 3 method เท่านัน้ method ที่จองไว้ไม่ได้ใช้ 9700 kB 28
Static method
• การขียนโปรแกรมที่ถกู ต้องหากไม่จำาเป็นไม่ควรสร้างเมธอดเป็ น Static method • เนื่องจาก ทำาให้จองหน่วยความจำาโดยไม่ใช้ประโยชน์เท่าที่ควร • ในการเรียนวิชานี้ ยังไม่ต้องเขียนแบบ Static ให้เขียนเป็น non Static ก่อน
29
Setter method
• เมธอดที่ทำาหน้าที่ในการกำาหนดค่าให้คำาสิ่งต่างๆในโปรแกรม • setter method มักขึ้นต้อนด้วยคำาว่า set • Setter method มักใช้ในการกำาหนดค่าให้กบั Attribute ของโปรแกรม • Attribute คือตัวแปรที่ประกาศภายในคลาส แต่ไม่ได้อยู่ภายใต้ method ใดๆ
30
Setter method Attribute
สั่งให้ไปกำาหนดค่า firstName ให้เป็น “Peter” Setter Method
31
Getter method
• เมธอดที่ทำาหน้าที่ในการนำาค่าในโปรแกรมมาใช้งาน • getter method มักขึ้นต้อนด้วยคำาว่า get • Getter method มักใช้ในการนำาค่าของ Attribute มาใช้งาน
32
Setter method Attribute
นำาค่า firstName มาแสดง
Getter Method 33
Overloading method
• คือการสร้างเมธอดให้มีชื่อเหมือนกันได้ • แต่ พารามิเตอร์ตอ้ งแตกต่างกัน • จำานวน • ชนิดข้อมูล
• จาวาจะเลือกเองโดยอัตโนมัติว่าจะไปทำางานที่เมธอดใด โดยดูจาก พารามิเตอร์เป็นหลัก
34
Overloading method จาวาจะเช็คเองว่าจะทำางานที่เมธอดใด PrintLine ไม่มีพารามิเตอร์
PrintLine มีพารามิเตอร์ 1 ตัว 35
Overloading method
PrintLine พารามิเตอร์ 1 ตัวเป็น char PrintLine พารามิเตอร์ 1 ตัว int 36
การส่งผ่านค่าในเมธอด
• การส่งผ่านค่ามี 2 แบบคือ Pass by value Pass by reference • Pass by value คือการส่งข้อมูลเข้าออกจากเมธอดโดยการส่งค่าของตัวแปรนั้น • Pass by reference คือการส่งข้อมูลเข้าออกจากเมธอดโดยการส่งค่าตำาแหน่งของตั วแปรนัน้ 37
Pass by Value
• ชนิดข้อมูลพืน้ ฐานทั้งหมด เช่น char, int , double จะมีการส่งค่าแบบ pass by value • เมื่อส่งข้อมูลเข้าออกจากเมธอด จาวาจะทำาการจองพืน้ ที่ในหน่วยความจำาใหม่ทกุ ครั้ง • หากส่งตัวแปรเข้าไปในเมธอด แล้วมีการเปลี่ยนแปลงค่าตัวแปรนั้นในเมธอด ตัวแปร ต้นทางจะไม่ถูกเปลี่ยนแปลงด้วย 38
Pass by Value
void methodA(){ char c = 'E'; int i = 30; output(c, i); System.out.println(c + i); } c
i
E
30
39
Pass by Value
void methodA(){ char c = 'E'; int i = 30; output(c, i); System.out.println(c + i); } void output(char ch, int size ){ c
i
E
30
for(int i = 0;i<size; i++) System.out.println(ch); ch = 'P'; size = 20; }
ch E
size 30
40
Pass by Value
void methodA(){ char c = 'E'; int i = 30; output(c, i); System.out.println(c + i); } void output(char ch, int size ){ c
i
E
30
for(int i = 0;i<size; i++) System.out.println(ch); ch = 'P'; size = 20; }
ch P
size 20
41
Pass by Value
void methodA(){ char c = 'E'; int i = 30; output(c, i); System.out.println(c + i); } void output(char ch, int size ){ c
i
E
30
E
30
for(int i = 0;i<size; i++) System.out.println(ch); ch = 'P'; size = 20; }
ch P
size 20
42
Pass by Reference
• เป็นการส่งผ่านค่าโดยการส่งตำาแหน่ง (address) ของหน่วยความจำาไป • เมื่อส่งข้อมูลเข้าออกจากเมธอด จาวาจะใช้หน่วยความจำาตำาแหน่งเดิมทุกครั้ง • หากส่งตัวแปรเข้าไปในเมธอด แล้วมีการเปลี่ยนแปลงค่าตัวแปรนั้นในเมธอด ตัวแปร ต้นทางจะถูกเปลี่ยนแปลงด้วย 43
Pass by Reference
เซตอาเรย์ต้นทาง[0] ถูกเปลีย่ นเป็น ‘z’ ด้วย เซตอาเรย์ปลายทาง[0] เป็น ‘z’ 44
เมธอดที่สำาคัญ
• charAt(); • คือเมธอดทีใ่ ช้ในการดึงค่าตัวอักษร ออกจากข้อความ (String) โดยระบุตำาแหน่งที่ต้องการ • ตัวอย่าง
• ผลลัพธ์ ch = ‘P’ • อย่าลืม จาวาเริ่มนับจาก ศูนย์
45
เมธอดที่สำาคัญ
• toCharArray(); • คือเมธอดที่ใช้ในการแยกตัวอักษรแต่ละตัวออกจากข้อความแล้ วนำาไปเก็บในอาเรย์ของ char • ตัวอย่าง
• ผลลัพธ์ x = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘ ‘, ‘P’, ‘e’, ‘t’, ‘e’, ‘r’} 46