ฟังก์ชั่น

สำหรับการเขียนโปรแกรม ไม่ว่าโปรแกรมนั้นจะแปลกหรือซับซ้อนแค่ไหน สุดท้ายโปรแกรมทุกโปรแกรมก็ต้องใช้เพียงแค่ ตัวแปร และ คำสั่งควบคุม เพียงสองส่วนประกอบนี้ก็สามารถเขียนโปรแกรมใดๆ ก็ได้ อย่างไรก็ตามโปรแกรมที่ซับซ้อนไม่จะมีลักษณะพิเศษที่พ่วงท้ายมาด้วยเสมอ นั่นคือ โปรแกรมใดๆ จะมีส่วนที่ซ้ำกันเสมอ ถ้าส่วนที่ซ้ำกันต้องทำซ้ำๆ ติดๆ กันก็จะกลายเป็น ลูป แต่ถ้าไม่ได้ซ้ำติดๆ กัน ก็จะทำให้ไม่สามารถเขียนเป็น ลูป ได้ โปรแกรมส่วนนั้นก็จะซ้ำกันโดยปริยาย และแล้วก็ถึงบทพระเอกของ ฟังก์ชั่น

ฟังก์ชั่น หรือ function ก็คือ ชุดของคำสั่งที่ต้องทำตามลำดับนั่นเอง แทนที่จะเป็นคำสั่ง 10 บรรทัดที่ใช้ 10 ที่ ทำให้โปรแกรมยาว 100 บรรทัด เวลาเจอที่ผิดก็ต้องแก้ 10 ที่ ก็เปลี่ยนเป็น 10 บรรทัด 1 ที่สำหรับประกาศ ฟังก์ชั่น และอย่างละ 1 บรรทัดสำหรับตอนเรียกใช้งาน

มีหลายคนกลัวการใช้ ฟังก์ชั่น กลัวว่ายาก กลัวว่าไม่เข้าใจ กลัวไม่รู้เรื่อง กลัวพลาด กลัวสารพัด ทุกครั้งที่เขียนก็มักคัดลอกคำสั่งชุดนั้นไปทุกที่ที่ใช้โดยไม่เขียน ฟังก์ชั่น เวลามีใครมาทักก็จะบอกว่า เขียนให้เสร็จแล้วค่อยแก้ก็ได้ สาเหตุใหญ่ๆ เป็นเพราะ เข้าใจผิด ฟังก์ชั่น ไม่ได้มีไว้เพื่อให้โปรแกรมสวย แต่มีไว้เพื่อทำให้ความซับซ้อนของโปรแกรมลดน้อยลงโดยการทำให้ส่วนของโปรแกรมที่ทำหน้าที่ร่วมกันมีชื่อเรียกแทนที่จะเป็นคำสั่งหลายบรรทัดยาวๆ ด้วยเหตุนี้ ฟังก์ชั่น จึงช่วยให้โปรแกรมคล้ายกับ อัลกอริทึ่ม และเข้าใจได้ง่าย

ใน ไพธอน นั้น ฟังก์ชั่น ไม่ใช่เรื่องน่ากลัวแต่อย่างใด ลองมาดูแบบง่ายๆ กันก่อน

def hello():
    print ’Hello’

ฟังก์ชั่น hello มีไว้สำหรับพิมพ์คำว่า Hello ออกมาทุกครั้งที่ถูกเรียกใช้ วิธีเรียกใช้นั่นยิ่งง่าย เพียงแค่เรียก hello() เท่านั้นเอง เมื่อนำมารวมกับ ลูป ก็จะดูมีประโยชน์ขึ้นมาทันที

hello()
print ’begin’
for i in range(10):
    hello()
print ’end’
hello()

ทีนี้ลองมาดูว่า ฟังก์ชั่น มีประโยชน์ยังไง โดยการเปลี่ยนโจทย์ให้พิมพ์คำว่า Hello, World แทน ถ้าไม่ได้เขียนด้วย ฟังก์ชั่น ก็ต้องแก้ 3 ที่ แต่เพราะเราใช้ ฟังก์ชั่น ผลบุญเลยช่วยให้แก้แค่เพียงที่เดียวเท่านั้น

ตัวอย่างที่ผ่านมาเป็นเพียง ฟังก์ชั่น แบบง่าย ไม่มี พารามิเตอร์ แต่อย่างใด ฟังก์ชั่นพวกนี้มันมีไว้สำหรับงานง่ายๆ ที่ต้องทำซ้ำๆ กันบ่อยๆ ตัวอย่างถัดมาเป็น ฟังก์ชั่น ที่มี พารามิเตอร์ กันบ้าง

def hello(p):
    print ’Hello, World’,p

for i in range(10):
    hello(i)

ฟังก์ชั่นนี้จะรับ พารามิเตอร์ 1 ตัว และนำมาพิมพ์ต่อท้ายคำว่า Hello, World โดยที่ไม่สนว่า พารามิเตอร์นั้นจะเป็นชนิดอะไร ในกรณีที่ต้องการส่ง พารามิเตอร์ มากกว่า 1 ตัวก็สามารถทำได้โดยใช้ comma , ขั้นทั้งตอนประกาศและเรียกใช้

def hello(s,i):
    print s,i

นอกจากนี้แล้ว ฟังก์ชั่น ยังสามารถคืนค่ากลับมาได้ด้วยคำสั่ง return อีกด้วย ค่าที่ส่งคืนนี้มาเป็นข้อมูลชนิดใดก็ได้ รวมไปถึง list tuple และ dictionary

def hello(s,i):
    return ’%s,%i’ % (s,i)

for i in range(10):
    print hello(’Hello, World’,i)