ยินดีด้วยครับ น้องๆ ก้าวมาไกลมากแล้ว! ตอนนี้เรามีปัญหาใหม่คือ ถ้าเราเขียนโค้ดที่ซับซ้อน เช่น โค้ดคำนวณภาษี แล้วต้องใช้โค้ดชุดนี้ในหลายๆ หน้าของโปรแกรม เราจะก๊อปปี้แปะโค้ด 10 บรรทัดนี้ไปทุกที่เลยเหรอ? ถ้าจะแก้โค้ดทีหนึ่ง ต้องตามแก้ 10 ที่เลยนะ! ไม่ดีแน่ๆ
ทางออกคือการสร้าง "ฟังก์ชัน (Function)" หรือเปรียบเหมือนการสร้าง "โรงงานคำสั่งส่วนตัว" ครับ เราจะรวบรวมโค้ด 10 บรรทัดนั้นไว้ในฟังก์ชันเดียว แล้วแปะป้ายชื่อไว้ เวลาจะใช้ก็แค่เรียกชื่อฟังก์ชันนั้น... ทีเดียวจบ!
🎁 1. ประโยชน์ของฟังก์ชัน
- ประหยัดเวลา: เขียนโค้ดชุดเดิมแค่ครั้งเดียว แต่เรียกใช้ได้ไม่จำกัดรอบ
- โค้ดสะอาดอ่านง่าย: แบ่งโปรแกรมขนาดใหญ่ออกเป็นส่วนย่อยๆ ที่ทำหน้าที่ชัดเจน
- ดูแลรักษาง่าย: ถ้าต้องการแก้ไขตรรกะ แก้แค่ในฟังก์ชันเดียว ผลลัพธ์จะเปลี่ยนไปทุกที่ที่เรียกใช้
🏗️ 2. วิธีนิยามฟังก์ชัน (User-Defined Functions)
การสร้างฟังก์ชันใน Python ง่ายมากๆ ครับ เราจะใช้คำสำคัญว่า def (ย่อมาจาก define) ตามด้วยชื่อฟังก์ชันที่เราตั้งเอง มีขั้นตอนดังนี้:
🚨 กฎเหล็ก: การตั้งชื่อฟังก์ชันใช้กฎเดียวกับการตั้งชื่อตัวแปร (ห้ามขึ้นต้นด้วยตัวเลข, ห้ามเว้นวรรค) และคำสั่งที่อยู่ข้างในฟังก์ชันต้อง ย่อหน้า (Indentation) เสมอ!
# 1. นิยามฟังก์ชัน (สร้างโรงงาน)
def say_hello():
print("สวัสดีครับ")
print("ยินดีต้อนรับสู่บทเรียนฟังก์ชัน")
# 2. เรียกใช้ฟังก์ชัน (สั่งโรงงานทำงาน)
say_hello()
say_hello() # เรียกซ้ำอีกรอบก็ยังได้
🕹️ 3. ฟังก์ชันที่รับส่งข้อมูลได้ (Parameters & Return)
โรงงานที่ฉลาดขึ้น คือโรงงานที่เราส่งวัตถุดิบ (ข้อมูล) เข้าไปให้มันประมวลผล แล้วมันส่งสินค้า (ผลลัพธ์) กลับมาให้เราครับ
- พารามิเตอร์ (Parameter): เปรียบเหมือน "ช่องรับวัตถุดิบ" คือตัวแปรที่อยู่ภายในวงเล็บ
() ตอนนิยามฟังก์ชัน
- รีเทิร์น (Return): เปรียบเหมือน "ช่องส่งสินค้าออก" ใช้คำสั่ง
return เพื่อส่งผลลัพธ์กลับไปให้จุดที่เรียกใช้
# ฟังก์ชันคำนวณพื้นที่วงกลม รับรัศมี (radius)
def cal_area(radius):
area = 3.14159 * (radius ** 2)
return area # ส่งผลลัพธ์กลับมา
result = cal_area(10) # เรียกใช้โดยส่งเลข 10 ไปให้
print("พื้นที่วงกลม:", result)
📦 4. โมดูลสำเร็จรูป (Modules)
นอกจากการสร้างฟังก์ชันเองแล้ว Python ยังมีโรงงานสำเร็จรูปเก่งๆ ที่เรียกว่า "โมดูล (Modules)" มาให้เราอิมพอร์ต (import) มาใช้งานได้ฟรีๆ เลยครับ เช่น หากต้องการใช้สูตรคณิตศาสตร์ขั้นสูง เราต้องอิมพอร์ตโมดูล math เข้ามาครับ
ตัวอย่างการใช้โมดูล math:
import math (สั่งอิมพอร์ตโรงงาน math มา)
print(math.pi) (เรียกใช้ค่า พาย π แบบเป๊ะๆ -> 3.141592...)
print(math.sqrt(25)) (เรียกใช้ฟังก์ชันถอดสแควรูท √ -> ได้ 5.0)