Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 2069

ว่าด้วยเรื่อง Protocol Oriented Programming (POP) ของภาษา Swift

$
0
0

pop-swift

pop-swift ในภาษา Swift นั้นพยายามแก้ไขปัญหาต่าง ๆ ที่มากับ Object Oriented Programming (OOP) โดยการนำแนวคิด Protocol Oriented Programming (POP) มาใช้งาน ซึ่งถูกแนะนำครั้งแรกในงาน WWDC 2015 แน่นอนว่ามันทำให้การเขียนโปรแกรมด้วยภาษา Swift เปลี่ยนไป แถมยังง่ายและสนุกขึ้นอีกด้วย มาดูกันนิดหน่อยว่า นำไปใช้ในการพัฒนาระบบอย่างไรบ้าง ?

สำหรับผู้เริ่มต้นแนะนำให้ศึกษาจาก

มาดูการใช้งานบ้างดีกว่า

ปกติเรามักจะมี feature พื้นฐานทั่วไป ที่ทุก ๆ หน้า หรือหน้าส่วนใหญ่จะต้องมี ตัวอย่างเช่นใน iOS app เกือบทุก ๆ หน้าจะต้องมีการ logout ออกจากระบบ ดังนั้นใน ViewController จำเป็นต้องมี function logout() ซึ่งแน่นอนว่าเราจะสร้าง BaseViewController ขึ้นมาดังนี้ [gist id="15468e328189734988c015732229ed7f" file="1.swift"] แต่ปัญหาที่เกิดขึ้นคือ ในทุก ๆ ViewController ต้องทำการ extend มาจาก class BaseController ทั้ง ๆ ที่ในบางหน้าหรือ ViewController ไม่จำเป็นต้องใช้ function logout() !! แต่ก็ต้องทำเพราะว่า มันคือ standard หรือ pattern ที่ตกลงร่วมกัน !! ดังนั้นแนวคิดนี้ ไม่น่าจะดีนะ ?

มาดูแนวคิดของ Protocol Oriented Programming (POP) กันหน่อยสิ

มันก็คือการนำ Protocol ซึ่งเป็นหนึ่งใน feature ของภาษา Swift ถ้าผมทำการสร้าง protocol ชื่อว่า Logoutable ขึ้นมาล่ะ จากนั้น ViewController ไหนที่ต้องการความสามารถการ logout ก็ทำการ conform ไปได้
ปล. แนวคิดมันเหมือนกับ interface เลยนะเออ
มาดูตัวอย่าง code กัน [gist id="15468e328189734988c015732229ed7f" file="=2.swift"] ดูเหมือนว่าจะดีนะ !! แต่ว่าทุก ๆ ViewController ที่ทำการ conform protocol Logoutable นั้น ต้องทำการ implement function logout() เองทั้งหมด ซึ่งไม่น่าจะดีแน่นอน !! ลองคิดดูสิว่า ถ้าเรามี ViewController เป็นสิบ ๆ ชีวิตน่าจะยากขึ้นนะ !!

โชคดีที่ในภาษา Swift มี Protocol Extension มาให้

ดังนั้นเราจึงสามารถเขียน extension เพิ่มเติมให้กับ Protocol ได้เลย โดยจะทำการเพิ่ม function logout() ให้กับ ทุก ๆ ViewController ที่ทำการ conform กับ protocol Logoutable เลย เมื่อนำทุกอย่างมารวมกัน สามารถเขียน code ได้ดังนี้ [gist id="15468e328189734988c015732229ed7f" file="3.swift"]
ซึ่งน่าจะทำให้การเขียน code ด้วยภาษา Swift สนุกขึ้น ด้วยแนวคิดของ POP + Extension นะครับ

Viewing all articles
Browse latest Browse all 2069

Trending Articles