เมื่อคืนในงาน WWDC ส่วนตัวไม่ค่อยมีอะไรน่าสนใจ ยกเว้นส่วนสุดท้ายที่เป็นที่ฮือฮามาจนถึงวันนี้อย่าง Swift
ใช่สิ กุ Geek หนิ ...
ดังนั้น ประกาศไว้ตรงนี้ ... Blog นี้ Rate G...eek นะคร้าบ หากใครอ่านไม่รู้เรื่องอย่าด่ากัน พลีสสสส
วันนี้เลยใช้เวลาทั้งวันนั่งศึกษาภาษา Swift มาเยอะพอสมควร ตั้งแต่โครงสร้างภาษาไปจนถึงการเขียน iOS Application เลยเอามาเล่าให้ฟังแบบคร่าวๆ (แต่คงทั้งหมดไม่ไหว รายละเอียดมันเยอะ)
Swift คืออะไร ทำไมต้องมี?
เป็นนักร้องคนหนึ่งที่เพิ่งยกเลิกการแสดงสดในไทยไป ...
เล่นกันทุกคน เล่นบ้างดิ๊
Swift คือภาษาใหม่ที่สร้างขึ้นโดย Apple เพื่อใช้พัฒนาแอพฯลง iOS และ OS X ซึ่งในนาทีที่เค้าเปิดตัว Swift โลกต่างมึนงงและตื่นเต้น จนทำเอาเว็บของ Swift Lang ก็ล่มลงไปในทันที ซึ่งต้องบอกตรงนี้ว่ามันคนละภาษากันเลยโดยสิ้นเชิง ไม่ต้องไปสนใจเว็บนั้น ถ้าอยากจะลองต้องโหลด Xcode 6 beta มาเท่านั้นครับ เป็นทางเดียว
Objective-C ถือว่าเป็นภาษาที่เก่าพอสมควร เรียกว่าโบราณก็ว่าได้ มีโครงสร้างอะไรที่ซับซ้อนมากจนถึงซับซ้อนมากเกินไป ถึงคนเก่าๆจะชอบไปแล้ว แต่สำหรับนักพัฒนาใหม่ๆ การจะเริ่ม Objective-C มันก็เป็นสิ่งที่แสนทรมานอยู่ดี มันซับซ้อนเกินพอดีไปหน่อย สร้าง Learning Curve ที่สูงเกินจำเป็น แถมยังขาดสิ่งที่ภาษาโปรแกรมมิ่งสมัยใหม่มีเยอะแยะมากมาย (ส่วนตัวก็เขียนไปหงุดหงิดไป เขียนมากี่ปีก็ยังหงุดหงิดอยู่อย่างงั้น อารมณ์เดียวกับหงุดหงิด C# บน Windows Phone เดี๊ยะ) ซึ่งพวกนี้พอยอมรับได้เมื่อ 6 ปีที่แล้วอยู่นะ เพราะระบบมันยังไม่ดีเท่าไหร่ พวก ARC ก็ยังไม่มี ก็เลยต้องเขียนดิบๆหน่อย แต่นาทีนี้ โลกมันไปไหนแล้ว ก็ต้องตามโลกให้ทันแหละนะ
Swift จึงเกิดขึ้นมาเพื่อเป็นภาษาที่ใช้ทดแทน Objective-C นั่นเอง โดยมีแนวคิดว่าเป็นภาษาที่ง่าย จึงถูกออกแบบมาเป็นภาษาสคริปต์ ที่หน้าตาคุ้นๆ แต่สุดท้ายมันคืออะไรหลายๆอย่างผสมเข้าด้วยกัน จนต้องบอกว่ามันเป็นภาษาใหม่จริงๆแหละ
แต่ถึงจะเป็นภาษาสคริปต์ แต่มันก็ไม่ได้รันแบบสคริปต์ หากแต่มันถูกคอมไพล์เป็น Binary เพื่อเอาไปรันจริงๆบน Runtime เดียวกับ Objective-C
อย่างที่เห็นในภาพด้านบน มันเรียกใช้ Cocoa และ Cocoa Touch ได้ (a.k.a. เขียนโปรแกรมพร้อม UI บน iOS และ OS X ได้) และโค้ดจะถูกคอมไพล์ด้วย LLVM (Low Level Virtual Machine) ใช้ Runtime ตัวเดียวกับ Objective-C และยังสนับสนุน ARC (Automatic Reference Counting) ซึ่งจะช่วยเรื่อง Memory Leak อีกด้วย
ในแง่ประสิทธิภาพก็ไม่ได้แย่ลง ตรงกันข้าม มันกลับดีขึ้น (เค้ายกตัวอย่างมาเป็นเคสๆ พร้อมบอกว่าโดยรวมมันเร็วขึ้น แต่เอาเข้าจริงก็ต้องดูกันไปอีกที)
เรียกว่าอยู่ใน Concept ที่ดึงดูดพัฒนาเป็นอย่างมาก
เขียนง่ายขึ้นแต่กลับทำงานเร็วขึ้น
โดย Apple ยก Concept มาว่า
Objective-C without the baggage of C
ถึงจะเป็นภาษาใหม่ แต่พอได้เขียนแป๊บนึงจะรู้ว่ามันยังมีกลิ่นอายของ Objective-C อยู่อย่างเต็มเปี่ยม (แต่มาแค่กลิ่นนะ) รู้สึกว่ามันคือ Reduced Objective-C เลยก็ว่าได้ แต่ก็พ่วงมาด้วยความสามารถใหม่มากมาย และกำจัดอะไรที่น่ารำคาญออกไป ซึ่งทำให้เห็น Vision ของ Apple และแนวทางของ Swift ต่อจากนี้ได้เป็นอย่างดี
และไหนๆก็จะทำภาษาใหม่มาแล้ว ถ้ายังต้องมายึดติดกับความเป็น C อีกก็เหมือนหนีเสือปะโคตรไอ้เขี้ยม ภาษานี้ก็เลยกำจัดความเป็น C ทิ้งไปหมด เราจะไม่ได้เห็นพวก semicolon (;) ท้ายคำสั่งกัน (แต่บางทีก็รู้สึกว่าทำไมต้องทำใหม่ด้วยนะ ภาษา C ก็สวยอยู่แล้ว แต่ก็เอาเหอะ นี่มัน Apple)
ทั้งหมดทั้งมวลนี้ ทำให้เกิดมาเป็นภาษาสคริปต์ Swift ที่หลังจากเล่นมาทั้งวัน ต้องยอมรับว่า Apple ทำการบ้านมาดีมากกับภาษาใหม่นี้ และเชื่อว่ามันไปได้ไกลมาก สุดท้ายจะทดแทน Objective-C ไปได้เลย (แต่คงต้องใช้เวลาเปลี่ยนผ่านสัก 2 ปี และ Apple ก็เตรียมการสำหรับการเปลี่ยนผ่านนี้ไว้ดีมากๆ)
ลองเล่น Swift บนสนามเด็กเล่น (Playground)
Experience is the best teacher งานเขียนโปรแกรมคือการลงมือทำ ดังนั้นเรามาเริ่มเล่นกันเลยดีกว่า
โดย Xcode ตัวใหม่มาพร้อมส่วนที่เรียกว่า Playground เอาไว้ซ้อมมือสำหรับผู้ที่จะหัด Swift โดยมีคุณสมบัติว่าเขียนอะไรไปก็จะเห็นผลทันทีตามสไตล์ภาษาสคริปต์ (เท่มาก) แต่ก็อาจจะต้องรอแป๊บนึงนะ ไม่ได้ทันทีขนาดนั้น 4-5 ไรงี้
เริ่มจาก ... ลง Xcode 6 beta ให้เรียบร้อย อันนี้ ... ตัวใครตัวมันนะฮ้าาาา
แล้วก็เปิด Xcode 6 beta นี้ขึ้นมา จิ้มไปที่ Get Started with a playground
ก็จะเจอหน้าจอประมาณนี้
คือ ... มันมีแค่สองบรรทัดแหละ ที่เหลือเติมเอง
สังเกตดูว่า ทุกบรรทัดที่มีการเปลี่ยนแปลงของตัวแปร ค่าก็จะถูกแสดงบนแถบด้านขวาทันที หรือถ้าอยากจะแสดงค่าของตัวแปรไหน ก็แค่พิมพ์ชื่อตัวแปรนั้นบนบรรทัดนั้นๆได้ทันที (ไม่ต้องมีคำสั่งอะไร แค่ชื่อตัวแปร) มันก็จะแสดงผลออกมาให้ดูทันที
Playground นี้เหมาะแก่การเริ่มต้นจนถึงการฝึกความแข็งแกร่งของภาษาได้เลย จงไปโหลด eBook นี้มาอ่านบน iBooks แล้วทำไปบน Playground ไม่นานคุณจะกล้าแกร่งในทันที
ซึ่ง Playground มีฟังก์ชั่นให้เล่นเยอะมาก ไม่ใช่แค่ Text แต่ยังรวมถึง Graphical ต่างๆอีกด้วย ลองเล่นดูสักชั่วโมงให้คุ้นชินกับโครงสร้างภาษา ก่อนจะไปต่อบน iOS Project อีกทีครับ
โครงสร้างภาษา Swift
มารู้จักกับโครงสร้างภาษา Swift เบื้องต้นกันสักนิดสักหน่อยละกันครับ
var, let
บน Swift เราสามารถตั้งตัวแปร (Variable) และค่าคงที่ (Constant) ได้ด้วย var และ let ตามลำดับ ซึ่งโดยเบื้องต้นมันจะเรียนรู้เองว่าเป็น Type ไหนจากข้อมูลที่พิมพ์ลงไป แต่ถ้าอยากระบุ Type ก็สามารถทำได้เช่นกันครับ ดังนี้
Primitive Type ก็มีครบถ้วน Int, Double, Bool, String, Float รวมทั้ง Primitive Collection Types ก็มี Array และ Dictionary มาให้ใช้ด้วย
หรือ Tuple ก็มีให้ใช้ (ได้ใช้บ่อยด้วย)
สำหรับตัวแปรที่สามารถ "ไม่มีค่า" ได้ ก็สามารถนำ nil เข้ามาใช้ได้ แต่ต้องใช้ร่วมกับเครื่องหมาย ? มิฉะนั้นจะเกิด Error ดังนี้
ซึ่งเครื่องหมาย ? นี้จะมีประโยชน์มากในเรื่องของตัวแปรที่มีการเรียกได้หลายชั้นตัวอย่างเช่น Class เป็นต้น (ไว้ลองศึกษาตาม eBook จะเข้าใจครับ)
semicolon ที่รัก
สังเกตดูว่าคำสั่งบน Swift จะไม่มี semicolon มาต่อได้ แต่ถ้าอยากจะใส่ ; ก็ใส่ได้ครับ คอมไพล์ผ่านเหมือนกัน เพราะ semicolon มันมีเอาไว้คั่นคำสั่งหลายๆคำสั่งในบรรทัดเดียว
Comments
วิธี Comment ก็เหมือน C, Objective-C และภาษาตระกูลนี้ทั่วไป คือใช้ // สำหรับ Line Comment และ /* ... */ สำหรับการ Comment หลายบรรทัด
Control Flow
มี if-else, for, for-in, switch-case, while, do-while ให้ใช้อย่างครบถ้วนแถมดีกว่าทั่วไปด้วย อย่าง for in ก็สามารถดึง key และ value ออกมาจาก Dictionary ได้ง่ายๆเลย
ซึ่งอยากให้สังเกต Syntax ตรง if ... { } จะเห็นว่ามันต่างกับตระกูลภาษา C คือไม่มีเครื่องหมายวงเล็บครอบ Condition ไว้ และจำเป็นต้องมี Bracket ไม่งั้นจะคอมไพล์ไม่ผ่าน จงชินกับ Syntax นี้ครับ เป็นแบบนี้หมด
โดยรวม Control Flow ของ Swift มี Flexibility ค่อนข้างสูง ทำได้หลายท่า และใช้งานง่ายด้วย
ยังไงอยากให้ลองเล่น switch ดูเป็นกรณีพิเศษ ผมว่ามันมีของ ...
Functions and Closures
การเขียน Function บน Swift ทำได้หลายท่ามาก และสวยงามด้วย สามารถระบุ Parameter ทั้งขาเข้าและขาออกได้อย่าง Flexible มาก
นอกจากนั้นยังทำ nested function ได้อีกด้วย
ยังมีอีกหลายท่าเช่นการโยนฟังก์ชั่นเข้าเป็น Parameter หรือการโยนฟังก์ชั่นออกมาเป็น Return Value ลองไปอ่านในคัมภีร์ดูครับ =)
Class
แน่นอนว่านี่มันปี 2014 แล้ว จะไม่มีคำว่า Class มาเกี่ยวก็คงผิดอย่างรุนแรง Swift ทำทุกอย่างเกี่ยวกับ Class ได้ครับ ตั้งแต่ constructor (ใช้คำว่า init) destructor (ใช้ deinit) ไปจนถึง inheritance และ override
แต่ข้อจำกัดแบบเดียวกับ Objective-C ก็ยังมีอยู่ คือไม่มี private, public และ protected ให้ใช้นะครับโพ้ม
struct
struct ก็มีให้ใช้บน Swift ครับ โดยรวมเหมือน class ทุกประการ ต่างกันตรงนี้ เวลามีการโยนค่า struct จะก็อปปี้ค่าไป ส่วน class จะโยน reference ไป
enum
ทุกคนคงรู้จัก Enum กันอยู่แล้วเนอะ ก็ใช้งานบน Swift ได้เหมือนกันครับ แต่สวยงามกว่าชาวบ้านเค้าตรงที่สามารถยัด Function เข้าไปได้ด้วย
สำหรับฟังก์ชั่นที่แปลงค่า Enum นั้นเป็นตัวเลขคือ toRaw() ส่วน fromRaw() มีไว้แปลงจากตัวเลขเป็น Enum อีกทีครับ
Protocol
protocol มีไว้ประกาศ Interface Class เพื่อให้ class, enum หรือ struct อื่นเอาไปเรียกใช้
Concept โดยรวมเหมือน interface ทุกประการครับ ต่างกันตรงที่บน Swift มันประกาศทีเดียวเอาไปใช้ได้หมดทั้ง class, enum และ struct นั่นเอง
Extension
ใครเขียน Objective-C มาก่อนก็คงจะคุ้นกับ extension อยู่ มันเอาไว้ประกาศคำสั่งหรือตัวแปรเพิ่มให้กับ Type ที่มีอยู่แล้ว ยกตัวอย่างเช่นอยากเพิ่มคำสั่ง simpleDescription ให้กับตัวเลข (Int) ก็เขียนเพิ่มได้ดังนี้
ชอบ Concept ของ extension มาก ใช้ประโยชน์ได้เยอะเลยหละ
Generics
เป็นหนึ่งในสิ่งที่ปรากฎโดดเด่นเป็นสง่าบนสไลด์ในงาน WWDC และก็สมควรจะโดดเด่นจริงๆแหละเพราะ Generics เป็นสิ่งที่สำคัญมากในการเขียนโปรแกรมที่ซับซ้อนๆให้มันสั้นลง สำหรับคนที่ไม่คุ้นกับ Generics มันคือการประกาศ Type แบบหลวมๆไว้เพื่อให้เราสามารถกำหนด Type ร่วมตอนสร้างตัวแปรหรือเรียกใช้ได้ทันทีโดยไม่ต้องประกาศฟังก์ชั่นหลายๆตัวเพื่อหลายๆ Type ใช้มันอันเดียวนี่แหละ อธิบายแล้วงง ดูโค้ดเลยละกัน
การเขียนโปรแกรมเรามีหลายทางเลือก จะใช้ Generics ก็ได้ จะไม่ใช่ก็ได้ แต่แนะนำอย่างยิ่งว่าถ้าอยากจะก้าวกระโดดไประดับ Advance เจ้า Generics นี้สำคัญมากครับ ทำความเข้าใจมันไว้เยอะๆ
โครงสร้าง Swift บน iOS Application Project
เล่นบน Playground กันไปสักพักก็เริ่มคันไม้คันมือ อยากทำมันเป็นแอพฯ iOS ซะแล้วสิ ดูจากภาษาแล้วนึกไม่ออกว่ามันจะไปเขียน iOS App ได้ยังไง มันทำยังไงของมันนะ
สงสัยก็ต้องหาคำตอบครับ เลยกด New Xcode Project ซะเลย ตามนี้
จากนั้นกำหนดทุกอย่างเหมือนเป็นแอพฯ iOS ตัวหนึ่ง ยกเว้นตรง Language ให้กำหนดเป็น Swift ครับ
จากนั้นก็บูมมมมมม เรียบร้อย ! หน้าตาของโปรเจคก็เหมือนกับ Objective-C Project ก่อนหน้านี้ทุกประการ มีไฟล์ plist ครบถ้วน ส่วนตัว UI ก็เป็น storyboard เหมือนเดิม แต่ที่ต่างออกไปคือไม่มีไฟล์ .m .h มาให้เห็น แต่กลายเป็นไฟล์ .swift สองตัวแทน
ใครเคยเขียน iOS มาก่อนหน้านี้ก็คงจะเห็นภาพตามทันทีเพราะไฟล์ที่ถูกนำมาแทนที่นั้นมีชื่อไฟล์เหมือนเดิมเลย ยังไม่พอ เนื้อหาข้างในก็เหมือนเดิมนะ แค่เปลี่ยนภาษา
เรียกว่าโครงสร้างทุกอย่างเหมือน Objective-C Code เลย แค่เปลี่ยนให้มันง่ายขึ้น สั้นลง สวยงามกว่าเดิมครับ
จากนั้นลองแก้ไฟล์ Main.storyboard นิดหน่อยเพื่อความเป็นกันเอง แล้วก็ลองสั่งรันดูได้เลยครับ
เย้ !
จากนั้นลองเพิ่มอีกนิดนึงด้วยการ Reference ถึง UI Component ตัว UILabel บรรทัดบน (วิธีการเชื่อมเหมือนเดิมเลย กด Ctrl จาก Storyboard แล้วลากลงโค้ด) แล้วก็เขียนโปรแกรมเปลี่ยน text แบบ Runtime ผลออกมาเป็นดังนี้ครับ
ก็พูดได้เลยว่าคนที่เขียน Objective-C มาก่อนแล้วเกิดอาการนอยด์เมื่อวานว่าอุตส่าห์ศึกษามาตั้งนาน ทำไมโยนทิ้งกันดื้อๆ ก็ไม่ต้องเสียใจไปครับ โครงสร้างโดยรวมทุกอย่างมันแทบจะเหมือนเดิมหมด แค่เปลี่ยนภาษาให้ง่ายขึ้นเท่านั้นเอง ใครเคยเขียน Objective-C มาก่อนหน้านี้ จะเข้าใจ Swift สำหรับ iOS และ OS X ได้เร็วขึ้นกว่าชาวบ้านเค้ามากครับ
Swift เกิดมาเพื่อแทนที่ Objective-C
สาเหตุที่เรามาเล่น Swift จริงจังเพราะเราอยากเข้าใจแนวคิดของ Apple ว่าจะทำมาทำไม สุดท้ายได้คำตอบในใจว่า "Swift เกิดมาเพื่อแทนที่ Objective-C" ครับ
ดูจากโค้ดด้านบนก็คงจะเข้าใจแล้วว่า Swift นั้นไม่ได้เกิดมาเล่นๆหรือเป็นทางเลือก หากแต่มันเกิดมาเพื่อแทนที่ Objective-C ในการพัฒนา iOS App และ OS X App เลยหละ
เชื่อว่ามีคนไม่น้อยไม่ปันใจจาก Objective-C เพราะศึกษามานานแล้ว อันนี้เห็นด้วยครับเพราะสุดท้ายเทคโนโลยีสองตัวนี้มันใช้แทนกันได้อยู่ (อย่างน้อยก็ตอนนี้) การจะเลือกใช้อะไรไม่สำคัญเพราะผู้ใช้ไม่รู้หรอก ที่สำคัญคือจะทำให้มันเสร็จได้รึเปล่า ดังนั้นเอาตัวที่ถนัดก่อนครับ Swift ยังค่อนข้าง Early มาก หากติดปัญหาอะไรจะหาคนมาช่วยก็คงยาก
ซึ่ง Apple ก็คงไม่ทิ้ง Objective-C ภายใน 3 ปีนี้แน่ๆ เพราะเป็นภาษาที่นักพัฒนาเหนียวแน่นมากมานานแล้ว โยนทิ้งไปดื้อๆก็คงซ้ำรอยโนเกีย .... (ชิส์) ดังนั้น Objective-C จะได้ไปต่ออีกค่อนข้างนานครับ
แต่ ... ระยะยาว เชื่อว่า Objective-C จะ Fade ตัวเองลงทีละนิดๆ ยังไงอย่าลืมศึกษา Swift ไว้ด้วยแล้วเตรียมตัวเปลี่ยนไปใช้อย่างจริงจังภายใน 1 ปีเถอะครับ ตัวนี้ท่าจะยิงยาวไปอีกหลายสิบปีเลย
โค้ดที่เขียนด้วย Swift ใช้งานร่วมกับโค้ดที่เขียนด้วย Objective-C ได้
เบื้องต้นแล้ว อย่างที่เห็นในโค้ด iOS ด้านบน จะเห็นว่าเราสามารถเรียกคำสั่งของ UIKit เช่น UILabel ด้วย Swift ได้อย่างง่ายดาย เพราะ Apple เตรียมทุกอย่างมาพร้อมแล้ว ทุก Foundation ที่มีบน Objective-C สามารถถูกเรียกใช้ได้ทันทีบน Swift ด้วย Syntax ที่ง่ายกว่ามาก อันนี้เรียกได้ว่า Swift สามารถเรียกคำสั่ง Objective-C APIs ได้ทันทีนั่นเอง
แต่ที่น่าสนใจกว่านั้นคือ เราสามารถใช้ Swift ร่วมกับ Objective-C ในโปรเจคเดียวกันได้ด้วย (Mix and Match)
งานนี้ต้องปรบมือดังๆให้ Apple ที่เตรียมพร้อมมาอย่างดี เพราะแน่นอนว่าภาษาใหม่แบบนี้ จะให้มี 3rd Party Library โน่นนี่มา Support ตั้งแต่เดือนแรกคงไม่ได้ ก็ไม่เป็นไร ... เอาโค้ด Objective-C ที่มีอยู่ว่อนเนตนี่แหละ เอามาใช้กับโปรเจค Swift ได้เลย (Strategy เท่มากหวะนาย)
อย่างไรก็ตาม มันไม่ได้ใช้ได้แบบแปะโป้งงงแล้วใช้ได้เลย แต่ Xcode จะ Generate header file ที่เรียกว่า Bridging Header เพื่อให้ Swift สามารถเข้าถึง Objective-C Code ได้ และในทางตรงกันข้าม ให้ Objective-C Code เข้าถึง Swift Code ได้
ถ้าคุณ import Objective-C Code เข้า Swift ตัว Xcode จะสร้างไฟล์ "xxxx-Bridging-header.h" ให้ ซึ่งตัวโค้ดของ Swift ไม่ต้องทำอะไร แค่ไปสั่ง import ใน Bridging Header ก็พอ จากนั้นก็เรียกใช้ใน Swift ได้ทันที เพราะเดี๋ยวมันไปหาเองว่าต้องใช้ไฟล์ไหน ... (เท่ชะมัด)
แต่ถ้าคุณ import โค้ด Swift เพื่อให้ Objective-C Code เรียกใช้ Xcode จะสร้างไฟล์ "xxxx-Swift.h" มา คุณต้อง import ไฟล์นี้เข้าไปในไฟล์ .m หรือ .h ที่คุณจะเรียกใช้ด้วยครับ
สำหรับการใช้งานร่วมกันของ Swift, Cocoa และ Objective-C ถูกเขียนไว้ใน Documentation นี้แล้ว ลองอ่านดูครับ ผมว่าเขียนมาได้ดีเลยหละ
สามารถเรียกใช้ External Framework ได้ทันที
ในเนตมี Framework ให้โหลดมาใช้มากมาย ซึ่ง Apple ทำมาดีอีกแล้ว หากอยากเรียกใช้ Framework เหล่านั้นทาง Swift ก็แค่ import มาแล้วเรียกใช้ได้เลย ... จบ
ในทางตรงกันข้าม หากเขียน Framework ขึ้นมาด้วย Swift แล้ว ก็สามารถให้ Objective-C เรียกใช้ด้วย import เช่นกันครับ
ในเว็บ Apple มีวิธี "การ Migrate โปรเจค Objective-C ไป Swift"
ก็ด้วยวิธีด้านบนที่ต้องสร้าง Bridging Header นั่นแหละครับ โดยวิธีเต็มๆอยู่ที่หน้านี้ Migrating Your Objective-C Code to Swift
ที่เขียนมานี้ไม่ได้จะมาอธิบายวิธี แต่อยากให้เห็นว่า Apple เอาจริงกับ Swift แค่ไหนครับ
เชื่อว่าอนาคตจะมีเครื่องมือในการ Migrate ที่ดีกว่านี้ คงต้องรออีกหน่อยครับ
โปรแกรมที่เขียนด้วย Swift ลงได้ถึง iOS 6
ถึงจะเปิดตัวมาพร้อม iOS 8 จนทำให้คนเข้าใจผิดว่ามันรันได้เฉพาะบน iOS 8 แต่ความจริงแล้ว Swift ก็เป็นแค่ภาษา High Level ภาษานึง ซึ่งสุดท้ายจะถูกคอมไพล์ออกมาเป็น Binary แบบเดิม พูดง่ายๆคือ ... มันรันได้ถึง iOS 6 เลยครับ
อันนี้ลองรันบน iOS 7.1 Simulator เพื่อพิสูจน์
ผลออกมาทำงานได้ดีงามครับ =)
ค่อยๆเป็น ค่อยๆไป รอสัก 6 เดือนถึงน่าจะอยู่ตัว
ยังไม่มีการยืนยันอะไรจาก Apple ว่าเอาจริงกับ Swift แค่ไหน แต่ส่วนตัวแล้วเชื่ออย่างสนิทใจจากการศึกษามาตลอดวันว่า Apple เอาจริงกับมันแน่ๆ และคงจะเตรียมทิ้ง Objective-C ภายใน 3 ปีนี้แน่ๆ
แต่ก็นั่นแหละ ภาษาใหม่ที่เกิดมามันต้องรอให้อะไรๆอยู่ตัวสักพักหนึ่ง โดยปกติก็ 6 เดือนเพื่อรอให้ภาษานิ่งและพิสูจน์ว่าภาษาไม่ได้ขาดสิ่งจำเป็นสำคัญอะไรไป และถ้าขาด ก็จะมี Library มาใช้แบบไม่มีปัญหาภายในเวลา 6 เดือนนี้นี่แหละ
แต่หลังจากเล่นมาพักนึงก็คิดว่าอาจจะต่ำกว่า 6 เดือนก็ได้ครับ เพราะ Apple เตรียมพร้อมมาดีมาก นี่สามารถเขียนแอพฯจริงๆด้วย Swift ได้แล้ว เอาขึ้น App Store ได้ด้วย แค่ยังไม่ชัวร์ว่ามันจะมีปัญหาอะไรแปลกๆระหว่างทางมั้ย ถ้าเจอปัญหาจะถามใครก็ไม่รู้ด้วยสิ ภาษาใหม่เกิ๊น ^^"
ซึ่งถามว่าความง่ายของมันมีประโยชน์ยังไง? ... นี่ผ่านไป 24 ชั่วโมง มีอะไรมาให้เล่นกันบ้างละครับ FlappySwift =)
เราจะได้เห็นอะไรแบบนี้อีกเรื่อยๆจน Swift สมบูรณ์ครับ ถึงจุดนั้นชีวิตจะมีความสุขขึ้นไปอีกหลายขั้น
ความเท่ของภาษา Swift
คิดว่าคงขอจบเพียงเท่านี้ก่อนครับ เขียน Blog เหนื่อยมาก ขอส่งท้ายด้วยความหล่อความเท่ของภาษา Swift ที่ไม่สามารถหาได้จากภาษาไหน เอามาเป็น Gimmick ให้ยิ้มเล่น กับเจ้าภาษาที่ตั้งตัวแปรเป็นหมาแมวอะไรก็ได้ ...
ก็บอกแล้วไงว่าตั้งเป็นหมาแมวหมาวัวอะไรก็ได้ =P
นี่กำลังคิดเขียนโปรแกรมเชิงเล่าเรื่องผ่านโค้ดที่รันได้ด้วยและโค้ดมีความหมายด้วยอยู่ ท่าจะสนุกทีเดียว
แล้วก็นะ ... ถ้าตัวเลขยาวๆมันอ่านยาก ก็ ... คั่นมันซะเลย จะได้อ่านง่ายๆ โอเค้ ?
โค้ดที่เห็นด้านบนนี้เป็นโค้ดจริงและทำงานได้ด้วย ภาษามันค่อนข้างดิ้นได้เยอะมากทีเดียวครับ ทำอะไรแปลกๆได้หลายอย่างแต่ก็ยังคงซึ่งความสวยงามและไม่ยืดหยุ่นจนเกินไปไว้ได้
สำหรับผม ถือว่าชอบภาษานี้มากทีเดียวเลยหละครับ
ขอบคุณ Apple มากครับที่ทำให้ชีวิตมีแนวทางตีจาก Objective-C เสียที =)
อยากติดตามบทความอะไรแบบนี้เรื่อยๆ ไป Like Page กันได้นะครับ ^_^ https://www.facebook.com/nuuneoicom
สวัสดีครับ