(1) ทำไมต้องใช้ฟังก์ชัน? (Why Functions?)
ลองนึกภาพว่าเรามีโค้ดที่ใช้คำนวณภาษี 7% จากราคาสินค้า ถ้าเราต้องใช้การคำนวณนี้ 10 ครั้งในโปรแกรม เราอาจต้องเขียนโค้ดบรรทัดเดิมๆ 10 ครั้ง ซึ่งไม่สะดวกและถ้าต้องการเปลี่ยนอัตราภาษี ก็ต้องตามแก้ไขทั้ง 10 จุด
ฟังก์ชันเข้ามาเพื่อแก้ปัญหานี้ครับ ฟังก์ชันเปรียบเสมือน “กล่องดำ” หรือ “เครื่องมือที่เราสร้างเอง”
- Input: เราใส่ข้อมูลที่จำเป็นเข้าไป (เช่น ราคาสินค้า)
- Process: กล่องดำจะทำงานตามที่เราเขียนคำสั่งไว้ (เช่น คำนวณภาษี)
- Output: เราได้ผลลัพธ์ออกมา (เช่น จำนวนเงินภาษี)
ประโยชน์หลักของฟังก์ชัน:
- ลดความซ้ำซ้อนของโค้ด (Code Reusability): เขียนโค้ดการทำงานที่ซับซ้อนไว้ในฟังก์ชันเพียงครั้งเดียว และสามารถเรียกใช้ซ้ำกี่ครั้งก็ได้ตามต้องการ สิ่งนี้เรียกว่าหลักการ DRY (Don’t Repeat Yourself)
- จัดระเบียบโค้ด (Organization/Modularity): ช่วยให้เราแบ่งโปรแกรมใหญ่ๆ ที่ซับซ้อนออกเป็นส่วนย่อยๆ ที่จัดการได้ง่ายขึ้น ทำให้โค้ดสะอาดตา อ่านง่าย และหาข้อผิดพลาดได้ง่ายขึ้น
- ซ่อนความซับซ้อน (Abstraction): เมื่อเราสร้างฟังก์ชันขึ้นมาแล้ว เวลาเรียกใช้ เราไม่จำเป็นต้องกังวลว่าข้างในมีขั้นตอนการทำงานอย่างไร แค่รู้ว่าต้องใส่อะไรเข้าไปและจะได้อะไรออกมาก็พอ
(2) การนิยามและการเรียกใช้ฟังก์ชัน (Defining and Calling a Function)
การสร้างฟังก์ชันประกอบด้วย 2 ขั้นตอนหลัก:
1. การนิยามฟังก์ชัน (Function Definition): คือการ “สร้าง” หรือ “สอน” ให้โปรแกรมรู้จักกับฟังก์ชันของเรา
ไวยากรณ์:
Pythondef function_name(parameter1, parameter2):
"""
Docstring: คำอธิบายว่าฟังก์ชันนี้ทำอะไร (เป็นทางเลือกแต่แนะนำให้มี)
"""
# Function Body: ชุดคำสั่งที่จะทำงาน
# ต้องมีการเยื้อง (Indentation)
statement1
statement2
# ...
def
: คำสำคัญ (keyword) ที่บอก Python ว่าเรากำลังจะสร้างฟังก์ชัน
function_name
: ชื่อของฟังก์ชัน ควรตั้งให้สื่อความหมาย (ใช้กฎเดียวกับการตั้งชื่อตัวแปร)
()
: วงเล็บ จำเป็นต้องมีเสมอ
parameter1, parameter2
: ตัวแปรสำหรับรับค่าจากภายนอก (เรียกว่า พารามิเตอร์) ไม่จำเป็นต้องมีก็ได้
:
: เครื่องหมายโคลอนปิดท้ายบรรทัด def
Docstring
: ข้อความในเครื่องหมาย """ """
ใช้เขียนอธิบายการทำงานของฟังก์ชัน
Function Body
: ชุดคำสั่งที่อยู่ภายในฟังก์ชัน ต้องเยื้องเข้าไปในระดับเดียวกันเสมอ (มาตรฐานคือ 4 เคาะ)
2. การเรียกใช้ฟังก์ชัน (Function Call): คือการ “สั่ง” ให้ฟังก์ชันที่สร้างไว้เริ่มทำงาน
ไวยากรณ์:
Pythonfunction_name(argument1, argument2)
สำคัญ: การนิยามฟังก์ชันเป็นเพียงการสร้างพิมพ์เขียว โปรแกรมจะยังไม่ทำงานจนกว่าจะมีการเรียกใช้ (Call) ฟังก์ชันนั้น
ตัวอย่าง:
Python# 1. นิยามฟังก์ชัน
def say_hello():
"""ฟังก์ชันนี้จะแสดงข้อความทักทาย"""
print("สวัสดีครับ ยินดีต้อนรับสู่โปรแกรมของเรา")
# 2. เรียกใช้ฟังก์ชัน
print("เริ่มต้นโปรแกรม...")
say_hello() # สั่งให้ฟังก์ชัน say_hello() ทำงาน
print("จบการทำงาน")
(3) พารามิเตอร์ และ อาร์กิวเมนต์ (Parameters and Arguments)
- พารามิเตอร์ (Parameter): คือ ตัวแปรที่ประกาศไว้ในวงเล็บ
()
ตอนนิยามฟังก์ชัน เปรียบเสมือน “ช่องรับข้อมูล” ที่รอรับค่าจากภายนอก
- อาร์กิวเมนต์ (Argument): คือ ค่าข้อมูลจริงที่เราส่งเข้าไปในฟังก์ชัน ตอนเรียกใช้ฟังก์ชัน
ตัวอย่าง:
Python# "name" และ "age" คือ พารามิเตอร์ (Parameters)
def display_user_info(name, age):
print(f"ชื่อ: {name}")
print(f"อายุ: {age} ปี")
# "สมชาย" และ 30 คือ อาร์กิวเมนต์ (Arguments) ที่ส่งเข้าไป
display_user_info("สมชาย", 30)
# "สมหญิง" และ 25 คือ อาร์กิวเมนต์ในอีกการเรียกใช้หนึ่ง
display_user_info("สมหญิง", 25)
ในตัวอย่างนี้ ค่า "สมชาย"
จะถูกส่งไปเก็บในพารามิเตอร์ name
และค่า 30
จะถูกส่งไปเก็บในพารามิเตอร์ age
ตามลำดับ
(4) การคืนค่าจากฟังก์ชันด้วย return
(Returning Values)
ฟังก์ชันมี 2 ประเภทหลักๆ:
- ฟังก์ชันที่ไม่คืนค่า (Non-fruitful function): ทำงานบางอย่างแล้วจบไป เช่น ฟังก์ชัน
say_hello()
ข้างต้นที่ทำหน้าที่แค่ print
ข้อความ (เบื้องหลังจะคืนค่า None
โดยอัตโนมัติ)
- ฟังก์ชันที่คืนค่า (Fruitful function): ทำการประมวลผลบางอย่าง แล้วส่งผลลัพธ์กลับออกมาให้เรานำไปใช้ต่อได้ โดยใช้คำสั่ง
return
การทำงานของ return
:
return
จะส่งค่าที่อยู่ข้างหลังมันกลับไปยังจุดที่เรียกใช้ฟังก์ชัน
- เมื่อโปรแกรมทำงานมาเจอคำสั่ง
return
ฟังก์ชันนั้นจะ หยุดทำงานทันที และออกจากฟังก์ชัน
ตัวอย่าง:
Pythondef calculate_area(width, height):
"""คำนวณและคืนค่าพื้นที่สี่เหลี่ยม"""
area = width * height
return area # ส่งค่าในตัวแปร area กลับออกไป
# เรียกใช้ฟังก์ชันและนำค่าที่ return กลับมาเก็บในตัวแปร
rect1_area = calculate_area(10, 5) # rect1_area จะมีค่า 50
rect2_area = calculate_area(20, 30) # rect2_area จะมีค่า 600
total_area = rect1_area + rect2_area
print(f"พื้นที่สี่เหลี่ยมรูปที่ 1 คือ: {rect1_area}")
print(f"พื้นที่รวมของทั้งสองรูปคือ: {total_area}")
# เราสามารถใช้ผลลัพธ์จากฟังก์ชันได้โดยตรง
print(f"พื้นที่ของสี่เหลี่ยมขนาด 7x8 คือ: {calculate_area(7, 8)}")
ปฏิบัติการที่ 1: ฟังก์ชันแรกของฉัน (My First Function)
- โจทย์ 1.1: สร้างฟังก์ชันที่ไม่มีพารามิเตอร์ เมื่อเรียกใช้จะแสดงข้อความต้อนรับ
- คำสั่ง: สร้างฟังก์ชันชื่อ
show_welcome_message
ที่จะแสดงข้อความ “— Welcome to My Program —” ออกทางหน้าจอ แล้วเรียกใช้ฟังก์ชันนั้น
- โค้ดตัวอย่าง:
- โจทย์ 1.2: สร้างฟังก์ชันที่แสดงข้อมูลส่วนตัว แล้วเรียกใช้ซ้ำ
- คำสั่ง: สร้างฟังก์ชันชื่อ
show_my_info
ที่จะแสดงชื่อและรหัสนักศึกษาของคุณ จากนั้นให้เรียกใช้ฟังก์ชันนี้ 3 ครั้งติดต่อกัน
- โค้ดตัวอย่าง:
ปฏิบัติการที่ 2: ส่งข้อมูลให้ฟังก์ชัน (Passing Data to Functions)
- โจทย์ 2.1: สร้างฟังก์ชันที่รับชื่อแล้วทักทาย
- คำสั่ง: สร้างฟังก์ชันชื่อ
greet(name)
ที่รับพารามิเตอร์ name
1 ตัว แล้วแสดงข้อความว่า “สวัสดี, [name]!” (เช่น ถ้าส่ง “มานะ” เข้าไป จะแสดง “สวัสดี, มานะ!”). ให้ทดลองเรียกใช้โดยส่งชื่อที่แตกต่างกัน 2-3 ชื่อ
- โค้ดตัวอย่าง:
- โจทย์ 2.2: สร้างฟังก์ชันคำนวณภาษีมูลค่าเพิ่ม
- คำสั่ง: สร้างฟังก์ชันชื่อ
calculate_vat(price)
ที่รับราคาสินค้า (price) แล้วคำนวณและแสดงภาษีมูลค่าเพิ่ม 7% ของราคานั้น (VAT = price * 0.07)
- โค้ดตัวอย่าง:
ปฏิบัติการที่ 3: รับผลลัพธ์จากฟังก์ชัน (Getting Results from Functions)
- โจทย์ 3.1: สร้างฟังก์ชันบวกเลข
- คำสั่ง: สร้างฟังก์ชันชื่อ
add(a, b)
ที่รับตัวเลข 2 ตัว แล้ว return
ผลบวกของเลขทั้งสอง จากนั้นในส่วนหลักของโปรแกรม ให้เรียกใช้ฟังก์ชันนี้, นำผลลัพธ์ไปเก็บในตัวแปร, แล้วแสดงผลตัวแปรนั้น
- โค้ดตัวอย่าง:
- โจทย์ 3.2: สร้างฟังก์ชันตรวจสอบเลขคู่
- คำสั่ง: สร้างฟังก์ชัน
is_even(number)
ที่รับตัวเลข 1 ตัว และ return
ค่า True
ถ้าเป็นเลขคู่ และ return
ค่า False
ถ้าเป็นเลขคี่ จากนั้นให้เรียกใช้ฟังก์ชันนี้กับตัวเลขต่างๆ และพิมพ์ผลลัพธ์ที่ได้
- โค้ดตัวอย่าง:
ปฏิบัติการที่ 4: ประกอบร่างสร้างโปรแกรม (Putting It All Together)
- โจทย์: สร้างโปรแกรมคำนวณดัชนีมวลกาย (BMI) โดยแบ่งการทำงานออกเป็นฟังก์ชันย่อยๆ
- คำสั่ง:
- สร้างฟังก์ชัน
get_user_input()
: ทำหน้าที่รับค่าน้ำหนัก (kg) และส่วนสูง (m) จากผู้ใช้ แล้ว return
ค่าทั้งสองออกมา
- สร้างฟังก์ชัน
calculate_bmi(weight, height)
: รับน้ำหนักและส่วนสูง มาคำนวณค่า BMI (สูตร: BMI=fracweight_kgheight_m2) แล้ว return
ค่า BMI
- สร้างฟังก์ชัน
interpret_bmi(bmi_value)
: รับค่า BMI มาแล้วพิมพ์ผลการแปลความหมาย (เช่น “น้ำหนักน้อย”, “ปกติ”, “อ้วน”)
- ในส่วนหลักของโปรแกรม ให้เรียกใช้ฟังก์ชันเหล่านี้ตามลำดับเพื่อให้โปรแกรมทำงาน
- โค้ดตัวอย่าง: