Swift 3 API Changes Wrapped Up


หลังจากงาน WWDC'16 ที่ผ่านมา Apple ก็ได้ขยับเวอร์ชั่นของภาษา Swift ไปอีกขั้นหนึ่ง นั่นคือ Swift 3 นั่นเอง ซึ่งหลังจากที่ Apple เปิด Open Source มาได้ประมาณครึ่งปี ก็มีคนช่วยกันพัฒนามากมาย ถึงขนาดที่ว่า การเปลี่ยนส่วนใหญ่ของ Swift 3 มาจาก Proposal ทั้งหลายที่เกิดขึ้นบน Swift Official Repository เลยทีเดียว โดยสามารดูการเปลี่ยนแปลงหลักๆ นอกเหนือจากที่ผมนำมายกตัวอย่างได้จาก ที่นี่ What's New in Swift

ถ้าเกิดใครสนใจในรายละเอียดการเปลี่ยนแปลงและข้อเสนออื่นๆ 
ได้ที่โครงการ Swift Evolution ที่นี่ครับ

โดยใน Blog นี้จะบอกเพียงแค่การเปลี่ยนแปลงคร่าวๆ ที่เราจะต้องเจอก่อนที่จะเปลี่ยน Code ไปเป็น Swift 3 ในอนาคต ข่าวดีก็คือ เรายังคงใช้ Swift 2.3 ต่อไปได้เรื่อยๆ ครับ ไม่มีปัญหาใดๆ เปลี่ยนเมื่อเราพร้อมที่จะเปลี่ยน

โดยในแต่ละหัวข้อจะสามารถคลิกเข้าไปดู Proposal ที่เกี่ยวข้อง ที่ผมทำไว้ให้ได้ด้วย ซึ่งโค้ดที่มาจาก Proposal ก็อาจจะมีบางส่วนที่ไม่เหมือนกันกับ Swift 3 จริงๆ ทั้งนี้ก็คงจะต้องตามอัพเดทจาก Official Language Reference ของ Apple เพื่อความถูกต้องอีกครั้งครับ

Swift API Design Guideline and The Grand Renaming

เริ่มที่ Swift API Design Guideline จะเป็นแนวทางการเขียนโค้ดแบบใหม่ ที่เรียกว่า Swifty มากขึ้น ใช้ประโยชน์จาก Strong Typing มาช่วยลดส่วนเกินของความชัดเจนในโค้ดที่เราพบเจอกันใน Objective-C ก่อนหน้านี้ เช่น -moveToPoint(point: CGPoint) ก็เป็น -move(to point: CGPoint) เวลาเรียกใช้งานจากที่เป็น moveToPoint(point) ก็จะเป็น move(to: point) เป็นต้น และยังมีเรื่องอื่นๆ อีกลองตามไปอ่านได้ครับ

ส่วน The Grand Renaming จะเป็นเครื่องมือในการแปลงจาก C, Objective-C Code เดิมๆ ให้เป็นไปตาม Swift API Design Guildline เมื่อเราพยายามที่จะปล่อย API ฝั่ง Objective-C ให้ Swift ใช้ได้ด้วย ซึ่งเราจะไม่ต้องเปลี่ยนไปมา ทั้ง 2 ภาษา เพราะ Objective-C ก็มี Code Style เป็นของตัวเองเช่นกัน

Foundation Value Types

ของหลายๆ อย่างใน Foundation Framework ตอนนี้ถูกทำให้เป็น Value Types ทั้งหมดในฝั่ง Swift แล้ว และถึงเวลาต้องลาจาก `NS` กันเสียที และสามารถที่จะใช้ร่วมกันระหว่าง Objective-C และ Swift ได้อย่างเนียนสนิทแบบที่เราเขียนกันมาตลอดใน Swift เช่น NSArray และ Array, NSString และ String เป็นต้น โดย Value Types Object ที่ถูกสร้างขึ้นใหม่บน Swift 3 มีดังนี้



เนื่องจากตอนที่เราเขียน Objective-C เนี่ย หลายครั้งเราจะมี Constants ในรูปแบบของ String เต็มไปหมดอันเนื่องมาจาก C-Style คราวนี้พอถูกใช้ในฝั่ง Swift มันดูไม่ปลอดภัย (จริงๆ ใช้ฝั่งไหนก็ไม่ปลอดภัย) แต่หลังจากนี้ Constants String ใน Objective-C เมื่อถูก import มาใช้ในฝั่ง Swift จะกลายเป็น Enum หรือ Struct ให้โดยอัตโนมัติ โดยที่เราต้องเพิ่มโค้ดนิดหน่อย ในฝั่ง Objective-C


โดยทาง Apple ก็ยอมรับข้อตกลงนี้ และเปลี่ยนหลายๆ อย่าง (หรือทั้งหมด เมื่อ Swift 3 ถูกใช้งานอย่างเป็นทางการ) ใน Foundation Framework เช่นกัน ตัวอย่างเช่น NSCalendarIdentifierGregorian ก็จะกลายเป็น Calendar.Identifier.gregorian หรือ UIApplicationDidFinishLaunchingNotification ตอนนี้ก็จะกลายเป็น NSNotification.Name.UIApplicationDidFinishLaunching

Type-safe selectors and key paths

ในส่วนของ Selectors น่าจะทำได้ตั้งแต่ Swift 2.2 แล้วล่ะ แต่ที่เพิ่มมาใน Swift 3 หลักๆ น่าจะเป็นเรื่องของ Key Paths ที่ตลอดมายังคงใช้ในรูปแบบของ String Literals แต่ตอนนี้มี Syntax ใหม่ที่คล้าย Selector เพื่อเข้าถึง Key Paths ต่างๆ ของ Object ซึ่งจะทำให้เข้าถึงอย่างปลอดภัยมากขึ้น และแน่นอนว่า Auto Completion ก็จะทำงานประกอบกันด้วย



ข้อเสนอนี้จะมีผลกับพวก C functions ทั้งหลาย ซึ่งจะถูกเขียน Identifier ที่เมื่อถูก import มาใช้ใน Swift แล้วจะอยู่ในรูปแบบ methods ของ Object แทน

โดยที่น่าตื่นตาตื่นใจในสุดเวทีที่ Chris Lattner พูดใน Session `What's new in Swift 3` ก็คงหนีไม่พ้นฟังก์ชั่น Core Graphics ทั้งหลายที่เปลี่ยนจากรูปแบบนี้


กลายเป็นแบบนี้



อีกหนึ่งเรื่องที่ชาว Apple Platform Developer น่าจะรอคอยมานาน นั่นคือ การเขียน libdispatch ที่เราใช้ C functions มาน๊านนนนน... แสนนาน แบบใหม่หมดจดใน Swift 3 นี้ ซึ่ง libdispatch หรือชื่ออย่างเป็นทางการว่า Grand Central Dispatch เป็น API ที่เราใช้กันบ่อยมากๆ ตลอดการเขียนโปรแกรมบน Apple Platform ซึ่งถูก Design และเขียนใหม่ทั้งหมดในรูปแบบ Object Oriented ในชื่อ DispatchQueue ถ้าใครสนใจลองกดเข้าไปดูใน Proposal ได้ครับ แต่รูปแบบคร่าวๆ ที่จะเปลี่ยนไปจากที่เราเคยเขียนในรูปแบบ C functions ก็จะประมาณนี้


ซึ่งสามารถเข้าไปดู DispatchQueue API เต็มๆ ได้ที่ DispatchQueue API Reference 
นอกจากนั้นยังมี Proposal ที่ขอให้เอาฟีเจอร์บางอันของ Swift ออกและได้รับการตอบรับจาก Apple เช่นกัน ว่าสมควรเอาออก ใน Session กล่าวไว้ดังนี้ครับ

โดยที่ผมยกตัวอย่างมานี้ยังไม่หมดนะครับ ถ้าใครต้องการรู้เพิ่มเติมอีก คงต้องบอกอีกทีว่าให้ไปดู WWDC Session ที่ชื่อว่า What's New in Swift และ What's New in Foundation for Swift

และสำหรับใครที่จะเปลี่ยนไป Swift 3 นั้นทาง Apple ก็ได้เตรียม Migration Guide ให้ด้วยนะครับ
ยาวเหมือนกันแหะ Blog นี้ ตอนแรกนึกว่าจะเขียนไม่เยอะ พอได้ละครับ ฮ่าฮ่า

เป็นอีกหนึ่งการเปลี่ยนแปลงครั้งใหญ่ของภาษาที่ผมรู้สึกว่าเขียนแล้วมีความสุข 
และดูมีอนาคตมากๆ ในทุกวงการ ที่ไม่ได้จำกัดเฉพาะ Apple Platform อีกต่อไป

Comments

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

Command Line Compiling C/C++ ,Java [Windows, Mac]

การเขียนโปรแกรมแก้ปัญหา "โจทย์รูปทรงสมมาตร"