EP09: ฟังก์ชันเบื้องต้นในภาษาไพธอน

(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): คือการ “สร้าง” หรือ “สอน” ให้โปรแกรมรู้จักกับฟังก์ชันของเรา

ไวยากรณ์:

Python
def 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): คือการ “สั่ง” ให้ฟังก์ชันที่สร้างไว้เริ่มทำงาน

ไวยากรณ์:

Python
function_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 ประเภทหลักๆ:

  1. ฟังก์ชันที่ไม่คืนค่า (Non-fruitful function): ทำงานบางอย่างแล้วจบไป เช่น ฟังก์ชัน say_hello() ข้างต้นที่ทำหน้าที่แค่ print ข้อความ (เบื้องหลังจะคืนค่า None โดยอัตโนมัติ)
  2. ฟังก์ชันที่คืนค่า (Fruitful function): ทำการประมวลผลบางอย่าง แล้วส่งผลลัพธ์กลับออกมาให้เรานำไปใช้ต่อได้ โดยใช้คำสั่ง return

การทำงานของ return:

  • return จะส่งค่าที่อยู่ข้างหลังมันกลับไปยังจุดที่เรียกใช้ฟังก์ชัน
  • เมื่อโปรแกรมทำงานมาเจอคำสั่ง return ฟังก์ชันนั้นจะ หยุดทำงานทันที และออกจากฟังก์ชัน

ตัวอย่าง:

Python
def 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) โดยแบ่งการทำงานออกเป็นฟังก์ชันย่อยๆ
    • คำสั่ง:
      1. สร้างฟังก์ชัน get_user_input(): ทำหน้าที่รับค่าน้ำหนัก (kg) และส่วนสูง (m) จากผู้ใช้ แล้ว return ค่าทั้งสองออกมา
      2. สร้างฟังก์ชัน calculate_bmi(weight, height): รับน้ำหนักและส่วนสูง มาคำนวณค่า BMI (สูตร: BMI=fracweight_kgheight_m2) แล้ว return ค่า BMI
      3. สร้างฟังก์ชัน interpret_bmi(bmi_value): รับค่า BMI มาแล้วพิมพ์ผลการแปลความหมาย (เช่น “น้ำหนักน้อย”, “ปกติ”, “อ้วน”)
      4. ในส่วนหลักของโปรแกรม ให้เรียกใช้ฟังก์ชันเหล่านี้ตามลำดับเพื่อให้โปรแกรมทำงาน
    • โค้ดตัวอย่าง: